【问题标题】:Heteroscedastic residuals plot not matching plot shown in Pinhiero and Bates异方差残差图与 Pinhiero 和 Bates 中显示的图不匹配
【发布时间】:2018-12-30 06:05:59
【问题描述】:

我无法在 Pinhiero 和 Bates S 和 S-Plus 中的混合效应模型中绘制标准残差与协变量图匹配。绘制的模型是非线性混合效应模型的一般公式,包含在 nlme 包中

library(nlme)
options(contrasts = c("contr.helmert", "contr.poly"))
fm1Dial.gnls <- gnls(rate ~ SSasympOff(pressure, Asym, lrc, c0),
                     data = Dialyzer,
                     params = list(Asym + lrc ~ QB, c0 ~ 1),
                     start = c(53.6, 8.6, 0.51, -0.26, 0.225))

当我们在该模型中绘制标准化残差与跨膜压力时

plot(fm1Dial.gnls, resid(.) ~ pressure, abline = 0)

结果图显示了不同压力下的异方差性证据。因此,我们拟合了一个具有幂方差函数的新模型来解决这个问题。

fm2Dial.gnls <- update(fm1Dial.gnls, weights = varPower(form = ~ pressure))

明显优于第一个模型

anova(fm1Dial.gnls, fm2Dial.gnls)

但是,当我们绘制新改进模型的标准化残差与跨膜压力时

plot(fm2Dial.gnls, resid(.) ~ pressure, abline = 0)

与第一个图相比,该图看起来没有太大改进,残差的垂直分布在较高压力下似乎仍然要高得多。

不过,Pinhiero 和 Bates 中的第二个改进模型的情节。显示了在所有压力水平下残差的类似垂直分布,考虑到在这个改进的模型中明确考虑了异方差性,这是有道理的。

我做错了什么?

【问题讨论】:

  • 我怀疑您会在stats.stackexchange.com 获得更好的帮助如果您在这里没有得到答案,请考虑将问题迁移到那里
  • 感谢@dww,但这似乎更像是软件语法问题,而不是纯粹的统计问题。
  • 如果通过plot(fm2Dial.gnls, resid(., type = "n) ~ pressure, abline = 0) 指定归一化残差,这些图表似乎更符合本书,但本书特别提到了“标准化残差”。所以我仍然不确定我的示例中的第二个图出了什么问题,以及为什么尽管在模型中引入了方差函数,标准化残差与压力图似乎并没有改变。
  • 其实plot(fm2Dial.gnls, resid(., type = "p") ~ pressure, abline = 0) 也会产生与书相匹配的情节。 plot.lme 中的 type = "p" 参数表示 pearson 的标准化残差。这引出了一个问题,如果不是标准化残差,默认是什么?
  • 回复您的评论 ^^;如果您查看nlme:::residuals.gnls 的代码,如果未指定type,则match.arg 获取第一个值,因此默认值为原始残差。 (这并不是说这本书在写作时也是如此)。 (ps:来自?nlme:::residuals.gnlsPearson == 标准化)

标签: r nlme


【解决方案1】:

你说错了

plot(fm2Dial.gnls, resid(.) ~ pressure, abline = 0)

是标准化残差,但实际上不是。你正确地发现了

plot(fm2Dial.gnls, resid(., type = "p") ~ pressure, abline = 0)

或者,更完整地说,

plot(fm2Dial.gnls, resid(., type = "pearson") ~ pressure, abline = 0)

给出与书中相同的情节,并且是标准化残差。

?residuals.gnls解释了很多:

type --- 一个可选的字符串,指定残差的类型 使用。如果“响应”,则“原始”残差(观察到 - 拟合)是 用过的;否则,如果“pearson”,则标准化残差(原始残差 除以相应的标准误差)被使用;否则,如果 “归一化”,归一化残差(标准化残差 预乘以估计的逆平方根因子 误差相关矩阵)被使用。参数的部分匹配是 使用,所以只需要提供第一个字符。默认为 “回应”。

从这个描述中我们也看到了为什么选择type 作为"normalized""pearson" 会得到相同的结果:前一个选项会考虑到错误的依赖结构,但是因为我们只是放松了同方差假设,我们仍然没有依赖关系。这在nlme:::residuals.gnls 中也很明显

if (type != "response") {
    val <- val/attr(val, "std")
    lab <- "Standardized residuals"
    if (type == "normalized") {
        if (!is.null(cSt <- object$modelStruct$corStruct)) {
            val <- recalc(cSt, list(Xy = as.matrix(val)))$Xy[, 
              1]
            lab <- "Normalized residuals"
        }
    }
}

【讨论】:

  • 再次感谢@Julius Vainora,所以默认是原始残差。我正在寻找 plot.lme 而不是 residuals.lme 的帮助。为什么这些原始残差即使在模型中构建了异方差后也几乎没有变化,但 pearson 和 normalisresiduals 确实显示了变化?
  • @llewmills, 1) 和weights = varPower(form = ~ pressure) 我们只为每个观测值建模权重(或标准差);我们不会在等式中添加任何新的回归量。给定这些权重,我们确实获得了新的估计和新的原始残差。通常,这些估计值和原始残差(在两个模型下)不必相似。但在这种情况下,它们确实是相似的。我们可以认为由于权重导致的负偏差和正偏差在某种程度上抵消了。或者SSasympOff 可能无法像我们希望的那样充分利用这些信息。很难说。
  • 2) 正如我所说,我们不会在等式中添加任何新项,只是尝试解释这些原始残差的结构。在第一个模型中,我们说方差是常数,因此除以标准差(常数)只会重新调整所有内容。现在在第二个模型中,我们有类似的原始残差,但现在我们相信它们的规模不是恒定的,并且取决于pressure。我们尝试估计这个比例(使用varPower),现在将原始残差除以每次观察的不同标准差。希望这会有所帮助。我也回复了stackoverflow.com/q/52884290/1320535
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2020-06-04
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多