使用 lme/lmer 函数时,我无法让 R 使用 par(mfrow=c(2,2)) 和 plot( )。我只得到了分辨率与拟合图,没有其他任何东西。我使用 lm 函数时没有问题。有人知道怎么做这个吗?
library(lme4)
m0<-lmer(hematology~Treatment*day+Gender+(1|ID),data=long,na.action=na.omit,REML=FALSE)
par(mfrow=c(2,2))
plot(m0)
Run Code Online (Sandbox Code Playgroud)
tl;dr ?plot.merMod非常详细地解释了绘图方法如何适用于[g]lmer...产生的拟合
您至少可以相当plot.lm容易地获得对应的前三个图:
plot(lmer_model, type=c("p","smooth"), col.line=1)\nRun Code Online (Sandbox Code Playgroud)\n(不同颜色绘制的平滑线和零线比较难)
\nplot(lmer_model,\n sqrt(abs(resid(.)))~fitted(.),\n type=c("p","smooth"), col.line=1)\nRun Code Online (Sandbox Code Playgroud)\nlattice::qqmath(lmer_model)\nRun Code Online (Sandbox Code Playgroud)\nplot(fm1, rstudent(.) ~ hatvalues(.))\nRun Code Online (Sandbox Code Playgroud)\n(库克距离可以通过计算,cooks.distance()但叠加 CD={0.5,1} 的轮廓并不那么容易......)
诊断图方法的设计和实现lme4与 不同plot.lm,这是基本 R 中的典型示例。为什么?我不确定,但这种方法源自nlmeR 之前的包;我能找到的最早版本是来自 Wayback Machine (1998) 的这个页面,它链接到1.2 版用户指南的副本,日期为 1995 年 2 月;距离1995 年 6 月首次发布 R 源代码(通过 ftp)还有三个月。
lattice(源自 Trellis\xe2\x84\xa2 图形)而不是基本 R 图形plot(fm1,residuals(.)~Days|Subject)plot) 和 QQ 图 ( qqnormin nlme, qqmathin lme4)只要我们添加答案,性能包现在就可用:
library(lme4)
library(performance)
fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
check_model(fm1)
Run Code Online (Sandbox Code Playgroud)
在 R 中,plot是一个泛型函数。这意味着当您调用 时plot,R 将检查您传递给第一个参数的对象的类,并根据该类选择绘图方法。
让我们举个例子。假设我使用该lm函数来创建模型。生成的模型对象将具有类"lm":
lm_model <- lm(Sepal.Length ~ Sepal.Width, data = iris)
class(lm_model)
#> [1] "lm"
Run Code Online (Sandbox Code Playgroud)
这意味着当我调用时plot(lm_model),R 将看到我正在调用plot类的对象lm。plot(1:10)R 现在知道调用专门为绘制类型对象而编写的绘图方法,而不是像我那样尝试构建基本的 xy 图"lm"。在这种情况下,它将调度 method stats:::plot.lm,这是一个长函数,它接受"lm"对象并创建 4 个诊断图。
现在让我们看看使用以下命令创建模型时会得到什么lmer:
library(lme4)
lmer_model <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
class(lmer_model)
#> [1] "lmerMod"
#> attr(,"package")
#> [1] "lme4"
Run Code Online (Sandbox Code Playgroud)
我们的模型是类型的对象"lmerMod"。当我们调用plot这个对象时,R 会查找正确的方法来绘制此类的对象。由于它与 类 对象具有完全不同的结构"lm",因此用 绘制它是没有意义的plot.lm,因此创建该包的作者lme4必须决定绘制类对象的最佳方法"lmerMod"是什么。他们编写了方法,该方法绘制您在调用模型lme4:::plot.merMod时看到的单个图。plot
为什么是这样?这是作者要回答的问题,但似乎主要原因是他们想要一种涵盖 GLMM、LMM 和 REML 模型的绘图方法。的诊断图lm对于所有这些模型类型都没有意义。
因此,简短的回答是,不存在需要“解决”的问题;这不是"lmerMod"绘制对象的方式。如果您对自己的健康状况的某些方面有特定的担忧,而这些诊断图可以解答这些问题,则您应该单独检查这些问题。