6

我曾经lm()为 R 中的多个(约 100 万)响应变量拟合多个回归模型。

allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)

这将返回一个“mlm”类的对象,它就像一个包含所有模型的巨大对象。我想获得每个模型的残差平方和,我可以使用:

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

我的问题是我认为“汇总”函数也计算了一大堆其他东西,因此很慢。我想知道是否有更快的方法来提取模型的残差平方和?

谢谢!

4

2 回答 2

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

于 2013-03-06T18:24:06.297 回答
0

许多人很少知道,通用函数deviance可以计算“lm”和“mlm”模型的残差平方和。做你fit的合身模特,你能做到

sqrt(deviance(fit) / fit$df.residual)

这里有两个优点:

  1. 通用函数是完全“矢量化”的(使用colSums)而不是基于循环的(如解决方案 via sapply);
  2. 通用函数知道如何处理加权回归情况。
于 2016-10-07T17:57:02.867 回答