我使用lm()
来拟合多个回归模型,用于R中的多个(约100万个)响应变量。例如
allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)
这将返回类“mlm”的对象,它类似于包含所有模型的巨大对象。我想为每个模型获得剩余的平方和,我可以使用:
summaries <- summary(allModels)
rss1s <- sapply(summaries, function(a) return(a$sigma))
我的问题是我认为“摘要”功能也计算了很多其他东西,因此非常慢。我想知道是否有更快的方法来提取模型的残差平方和?
谢谢!
答案 0 :(得分:5)
lm
个对象的输出中有一个组件残差,因此您可以通过sum(output$residuals^2)
获得剩余的平方和。
编辑:你实际上是从摘要中取出sigma,这是
sqrt(sum(output$residuals^2)/output$df.residuals)
对于所有型号,请使用
sapply(allModels, function(a) sqrt(sum(a$residuals^2)/a$df.residuals)))
答案 1 :(得分:0)
许多人都不知道,通用函数deviance
可以计算“lm”和“mlm”模型的残差平方和。让fit
成为您的拟合模型,您可以
sqrt(deviance(fit) / fit$df.residual)
这里有两个好处:
colSums
)而不是基于循环(如通过sapply
的解决方案);