R 在引擎盖下使用哪种算法来计算方差?

Which algorithm does R use under the hood to calculate the variance?

提问人:pglpm 提问时间:12/21/2021 最后编辑:pglpm 更新时间:12/25/2021 访问量:90

问:

有几种或多或少的数值鲁棒性和精确算法来计算数据样本的方差。例如,有一个高精度的公式(见下面的参考文献),大致相当于x

( sum((x - mean(x))^2) - (sum(x - mean(x))^2)/length(x) )/length(x)

这有点低效,因为它对数据进行了两次传递。另一方面,数学上等效的公式更容易发生灾难性的取消。还有许多其他算法,其中一些算法只对数据进行一次传递;例如,参见 Chan、Golub、LeVequeLing 的评论。mean(x^2)-mean(x)^2

R 在引擎盖下使用哪种算法来计算函数的方差?我阅读了该函数的手册页,但它们没有说明所使用的特定算法。我不是程序员,很难理解底层 C 代码中发生的事情。var()

R 算法 精度 方差

评论


答:

3赞 Park 12/21/2021 #1

如果您要查找,只需输入即可。stats::var

stats::var

function (x, y = NULL, na.rm = FALSE, use) 
{
    if (missing(use)) 
        use <- if (na.rm) 
            "na.or.complete"
        else "everything"
    na.method <- pmatch(use, c("all.obs", "complete.obs", 
        "pairwise.complete.obs", "everything", "na.or.complete"))
    if (is.na(na.method)) 
        stop("invalid 'use' argument")
    if (is.data.frame(x)) 
        x <- as.matrix(x)
    else stopifnot(is.atomic(x))
    if (is.data.frame(y)) 
        y <- as.matrix(y)
    else stopifnot(is.atomic(y))
    .Call(C_cov, x, y, na.method, FALSE)
}
<bytecode: 0x000001f7636f08f8>
<environment: namespace:stats>

并在其中调用对象 cov.c。您可以在该链接中找到算法。.Call(C_cov,...)Cvar