使用 ggplot2 函数的混合效应模型残差图
Graphs of the mixed effects model residuals using the ggplot2 function
我正在尝试使用 ggplot2 函数绘制混合效应模型的残余效应图。然而,在执行搜索后,我发现了一些可用的功能,但在我看来,对于 nlme 功能,它们不起作用。
我打算制作的图表是以下示例的图表:
我最初尝试的计算例程如下,在ggplot2中执行函数时出现的错误。
library(splines)
library(ggplot2)
library(nlme)
library(gridExtra)
datanew1$DummyVariable = as.factor(datanew1$DummyVariable)
datanew1$Variable2 = as.factor(datanew1$Variable2)
datanew1$Variable3 = as.factor(datanew1$Variable3)
#############################################################################
############################## Model ########################################
#############################################################################
model <- lme(Response~(bs(Variable1, df=3)) + DummyVariable,
random=~1|Variable2/Variable3, datanew1, method="REML")
completemodel <- update(model, weights = varIdent(form=~1|DummyVariable))
p1 <- qplot(.fitted, .resid, data = completemodel) +
geom_hline(yintercept = 0) +
geom_smooth(se = FALSE)
Erro: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class lme
Run `rlang::last_error()` to see where the error occurred.
p2 <- qplot(sample =.stdresid, data = completemodel, stat = "qq") + geom_abline()
grid.arrange(p1,p2)
Erro: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class lme
Run `rlang::last_error()` to see where the error occurred.
Além disso: Warning message:
`stat` is deprecated
我尝试制作图表的另一种方法是使用下面的函数,但我没有成功。
ggplot(completemodel, aes(.fitted, .resid)) + geom_point()
Erro: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class lme
Run `rlang::last_error()` to see where the error occurred.
[解决方案]
library(splines)
library(ggplot2)
library(nlme)
library(gridExtra)
datanew1$DummyVariable = as.factor(datanew1$DummyVariable)
datanew1$Variable2 = as.factor(datanew1$Variable2)
datanew1$Variable3 = as.factor(datanew1$Variable3)
model <- lme(Response~(bs(Variable1, df=3)) + DummyVariable,
random=~1|Variable2/Variable3, datanew1, method="REML")
completemodel <- update(model, weights = varIdent(form=~1|DummyVariable))
df_model <- broom.mixed::augment(completemodel)
#> Registered S3 method overwritten by 'broom.mixed':
#> method from
#> tidy.gamlss broom
df_model[".stdresid"] <- resid(completemodel, type = "pearson")
p1 <- ggplot(df_model, aes(.fitted, .resid)) +
geom_point() +
geom_hline(yintercept = 0) +
geom_smooth(se=FALSE)
p2 <- ggplot(df_model, aes(sample = .stdresid)) +
geom_qq() +
geom_qq_line()
grid.arrange(p1,p2)
#> `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
我正在尝试使用 ggplot2 函数绘制混合效应模型的残余效应图。然而,在执行搜索后,我发现了一些可用的功能,但在我看来,对于 nlme 功能,它们不起作用。
我打算制作的图表是以下示例的图表:
我最初尝试的计算例程如下,在ggplot2中执行函数时出现的错误。
library(splines)
library(ggplot2)
library(nlme)
library(gridExtra)
datanew1$DummyVariable = as.factor(datanew1$DummyVariable)
datanew1$Variable2 = as.factor(datanew1$Variable2)
datanew1$Variable3 = as.factor(datanew1$Variable3)
#############################################################################
############################## Model ########################################
#############################################################################
model <- lme(Response~(bs(Variable1, df=3)) + DummyVariable,
random=~1|Variable2/Variable3, datanew1, method="REML")
completemodel <- update(model, weights = varIdent(form=~1|DummyVariable))
p1 <- qplot(.fitted, .resid, data = completemodel) +
geom_hline(yintercept = 0) +
geom_smooth(se = FALSE)
Erro: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class lme
Run `rlang::last_error()` to see where the error occurred.
p2 <- qplot(sample =.stdresid, data = completemodel, stat = "qq") + geom_abline()
grid.arrange(p1,p2)
Erro: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class lme
Run `rlang::last_error()` to see where the error occurred.
Além disso: Warning message:
`stat` is deprecated
我尝试制作图表的另一种方法是使用下面的函数,但我没有成功。
ggplot(completemodel, aes(.fitted, .resid)) + geom_point()
Erro: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class lme
Run `rlang::last_error()` to see where the error occurred.
[解决方案]
library(splines)
library(ggplot2)
library(nlme)
library(gridExtra)
datanew1$DummyVariable = as.factor(datanew1$DummyVariable)
datanew1$Variable2 = as.factor(datanew1$Variable2)
datanew1$Variable3 = as.factor(datanew1$Variable3)
model <- lme(Response~(bs(Variable1, df=3)) + DummyVariable,
random=~1|Variable2/Variable3, datanew1, method="REML")
completemodel <- update(model, weights = varIdent(form=~1|DummyVariable))
df_model <- broom.mixed::augment(completemodel)
#> Registered S3 method overwritten by 'broom.mixed':
#> method from
#> tidy.gamlss broom
df_model[".stdresid"] <- resid(completemodel, type = "pearson")
p1 <- ggplot(df_model, aes(.fitted, .resid)) +
geom_point() +
geom_hline(yintercept = 0) +
geom_smooth(se=FALSE)
p2 <- ggplot(df_model, aes(sample = .stdresid)) +
geom_qq() +
geom_qq_line()
grid.arrange(p1,p2)
#> `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'