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