代码之家  ›  专栏  ›  技术社区  ›  llewmills

异方差残差图与Pinhiero和Bates中显示的图不匹配

  •  3
  • llewmills  · 技术社区  · 5 年前

    我很难画出一个标准残差和协变量匹配的图,如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)
    

    这个图看起来不像第一个图的改进,在更高的压力下,残差的垂直分布仍然显得更高。

    然而,第二个改进模型在平希罗和贝茨的情节。结果表明,在所有压力水平下,残余物的垂直分布都是相似的,这是有意义的,因为在这个改进的模型中,异方差已被明确考虑。

    我做错什么了?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Julius Vainora    5 年前

    你错的地方是说

    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 解释的相当多:

    类型---指定残差类型的可选字符串。 被使用。如果“响应”,则“原始”残差(观察-安装)为 使用;否则,如果“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"
            }
        }
    }