获取`lm()`返回的“mlm”对象的残余标准错误

时间:2013-03-06 17:55:47

标签: r regression linear-regression lm mlm

我使用lm()来拟合多个回归模型,用于R中的多个(约100万个)响应变量。例如

allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)

这将返回类“mlm”的对象,它类似于包含所有模型的巨大对象。我想为每个模型获得剩余的平方和,我可以使用:

summaries <- summary(allModels)
rss1s <- sapply(summaries, function(a) return(a$sigma))

我的问题是我认为“摘要”功能也计算了很多其他东西,因此非常慢。我想知道是否有更快的方法来提取模型的残差平方和?

谢谢!

2 个答案:

答案 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)

这里有两个好处:

  1. 泛型函数完全“向量化”(使用colSums)而不是基于循环(如通过sapply的解决方案);
  2. 泛型函数知道如何处理加权回归情况。