在lm.wfit中,z< - .Call(C_Cdqrls,x * wts,y * wts,tol)做什么?

时间:2013-04-03 00:43:18

标签: r lm

我的首要问题是,R如何计算WLS案例中的R ^ 2?它不仅仅对观测值进行加权,然后计算R ^ 2。为了解决这个问题,我正在浏览源代码,直到我在lm.wfit代码中遇到此问题:

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

这里做了什么?有谁知道如何访问代码以获取详细信息?即,返回z的内容是什么?如何使用C_Cdqrlsx*wtsy*wtstol

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

谢谢!

2 个答案:

答案 0 :(得分:5)

R squared值实际上是在调用summary.lm时计算的,您可以在实际的svn存储库(https://svn.r-project.org/R/)或{{3中查看任何函数的源代码。在github上。

查看this read only mirror 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)

答案 1 :(得分:3)