5

我的首要问题是,在 WLS 案例中,R 如何计算 R^2?它不仅对观察结果进行加权,然后计算 R^2。为了弄清楚这一点,我一直在浏览源代码,直到我在lm.wfit代码中遇到这个:

z <- .Call(C_Cdqrls, x *wts, y*wts, tol) 

这里正在做什么?有谁知道我如何访问此代码以获取详细信息?即,返回z什么?C_Cdqrls, x*wts, y*wts,是如何tol使用的?

到目前为止我所理解的(我不确定它是否正确),这.Call意味着 R 正在 C 中执行此代码。但是,如果可能的话,我想看看这是如何在 C 中完成的。

谢谢!

4

2 回答 2

5

R squared值实际上是在调用时计算的summary.lm,您可以查看任何函数的源代码,无论是在实际的 svn 存储库(https://svn.r-project.org/R/)中,还是在 github 上的这个只读镜像中。

https://github.com/wch/r-source/blob/trunk/src/library/stats/R/lm.R查看 summary.lm

我们看到以下占权重 ( w)

r <- z$residuals
f <- z$fitted.values
w <- z$weights
if (is.null(w)) {
    mss <- if (attr(z$terms, "intercept"))
        sum((f - mean(f))^2) else sum(f^2)
    rss <- sum(r^2)
} else {
    mss <- if (attr(z$terms, "intercept")) {
        m <- sum(w * f /sum(w))
        sum(w * (f - m)^2)
    } else sum(w * f^2)
    rss <- sum(w * r^2)
    r <- sqrt(w) * r
}
# ..... some other code
# ... then this definition
ans$r.squared <- mss/(mss + rss)
于 2013-04-03T01:05:31.340 回答
3

谷歌搜索很快产生了这个:

https://svn.r-project.org/R/trunk/src/library/stats/src/lm.c

于 2013-04-03T00:48:09.140 回答