通过`lm()`返回的“mlm”对象获取残差标准误差。

6

我曾在R中使用lm()来拟合多元回归模型,适用于多个(约1百万个)响应变量。例如:

allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)

这将返回一个名为"mlm"的类对象,它类似于包含所有模型的巨大对象。我想要获取每个模型的残差平方和,可以使用以下方法:

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

我的问题是,我认为“summary”功能计算了大量其他内容,因此速度很慢。我想知道是否有更快的方法只提取模型的残差平方和?

谢谢!

2个回答

5

lm对象的输出中有一个残差组件residuals,所以你可以通过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)))


0
很少有人知道通用函数 deviance 可以计算“lm”和“mlm”模型的残差平方和。 假设 fit 是您拟合的模型,您可以这样做:
sqrt(deviance(fit) / fit$df.residual)

这里有两个优点:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接