我的首要问题是,R如何计算WLS案例中的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如果可能的话。
谢谢!
答案 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)