【问题标题】:Obtain residual standard errors of an "mlm" object returned by `lm()`获取“lm()”返回的“mlm”对象的残差标准误差
【发布时间】:2013-03-06 17:55:47
【问题描述】:

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

allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)

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

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

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

谢谢!

【问题讨论】:

    标签: r regression linear-regression lm mlm


    【解决方案1】:

    lm 对象的输出中有一个分量残差,因此您可以通过sum(output$residuals^2) 得到残差平方和。

    edit:您实际上是从摘要中取出 sigma,即 sqrt(sum(output$residuals^2)/output$df.residuals)

    对于所有模型使用

    sapply(allModels, function(a) sqrt(sum(a$residuals^2)/a$df.residuals)))

    【讨论】:

      【解决方案2】:

      很少有人知道,通用函数deviance 可以计算“lm”和“mlm”模型的残差平方和。让fit成为你的拟合模特,你可以这样做

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

      这里有两个优点:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-11
        • 2013-03-27
        • 2020-12-25
        • 1970-01-01
        • 2016-08-12
        • 2020-05-12
        • 2014-02-27
        • 1970-01-01
        相关资源
        最近更新 更多