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

时间:2018-12-30 06:05:59

标签: r nlme

我很难使标准残差与协变量的图与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中的第二个改进模型的图。显示了在所有压力水平下残渣的垂直分布相似,这是合理的,因为在此改进模型中已明确考虑了异方差性。

我在做什么错了?

1 个答案:

答案 0 :(得分: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 ---可选字符串,指定要保留的残差类型   使用。如果为“响应”,则“原始”残差(观察到的-拟合)为   用过的;否则,如果为“皮尔逊”,则为标准残差(原始残差   除以相应的标准误差);否则,如果   “归一化”,归一化残差(标准化残差   预乘以估计值的平方根反比   误差相关矩阵)。参数的部分匹配为   使用,因此只需要提供第一个字符。默认为   “响应”。

从此描述中,我们还看到了为什么选择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"
        }
    }
}