调整sjPlot交互中的均值主持人选项

时间:2017-04-26 12:20:12

标签: r plot interaction sjplot

我正在使用sjp.t函数sjPlot来绘制lme的交互。 主持人值的选项是平均值+/- sd,四分位数,全部,最大/最小值。有没有办法绘制平均值+/- 2sd?

通常情况如下:

 model <- lme(outcome ~ var1+var2*time, random=~1|ID, data=mydata, na.action="na.omit")
 sjp.int(model, show.ci=T, mdrt.values="meansd")

非常感谢

可重复的例子:

#create data
mydata <- data.frame( SID=sample(1:150,400,replace=TRUE),age=sample(50:70,400,replace=TRUE), sex=sample(c("Male","Female"),200, replace=TRUE),time= seq(0.7, 6.2, length.out=400), Vol =rnorm(400),HCD =rnorm(400))  
mydata$time <- as.numeric(mydata$time)

 #insert random NAs
  NAins <-  NAinsert <- function(df, prop = .1){
n <- nrow(df)
m <- ncol(df)
num.to.na <- ceiling(prop*n*m)
id <- sample(0:(m*n-1), num.to.na, replace = FALSE)
rows <- id %/% m + 1
cols <- id %% m + 1
sapply(seq(num.to.na), function(x){
    df[rows[x], cols[x]] <<- NA
}
)
return(df)
}


mydata2 <- NAins(mydata,0.1)

#run the lme which gives error message
model = lme(Vol ~ age+sex*time+time* HCD, random=~time|SID,na.action="na.omit",data=mydata2);summary(model)

mydf <- ggpredict(model, terms=c("time","HCD [-2.5, -0.5, 2.0]"))

#lmer works
 model2 = lmer(Vol ~ age+sex*time+time* HCD+(time|SID),control=lmerControl(check.nobs.vs.nlev = "ignore",check.nobs.vs.rankZ = "ignore", check.nobs.vs.nRE="ignore"), na.action="na.omit",data=mydata2);summary(model)
 mydf <- ggpredict(model2, terms=c("time","HCD [-2.5, -0.5, 2.0]"))

#plotting gives problems (jittered lines)
plot(mydf)

enter image description here

1 个答案:

答案 0 :(得分:1)

使用 sjPlot ,目前无法实现。但是,我编写了一个专门用于计算和绘制边际效应的包:ggeffects。这个软件包有点灵活(对于边缘效应图)。

ggeffects -package中,有一个ggpredict() - 函数,您可以在其中计算特定值的边际效果。一旦您知道相关模型术语的sd,就可以在函数调用中指定这些值来绘制交互:

library(ggeffects)
# plot interaction for time and var2, for values
# 10, 30 and 50 of var2
mydf <- ggpredict(model, terms = c("time", "var2 [10,30,50]"))
plot(mydf)

package-vignette中有一些示例,请参见this section

修改

以下是基于您可重现的示例的结果(请注意,目前需要GitHub版本!):

# requires at least the GitHub-Versiob 0.1.0.9000!
library(ggeffects)
library(nlme)
library(lme4)
library(glmmTMB)

#create data
mydata <-
  data.frame(
    SID = sample(1:150, 400, replace = TRUE),
    age = sample(50:70, 400, replace = TRUE),
    sex = sample(c("Male", "Female"), 200, replace = TRUE),
    time = seq(0.7, 6.2, length.out = 400),
    Vol = rnorm(400),
    HCD = rnorm(400)
  )
mydata$time <- as.numeric(mydata$time)

#insert random NAs
NAins <-  NAinsert <- function(df, prop = .1) {
  n <- nrow(df)
  m <- ncol(df)
  num.to.na <- ceiling(prop * n * m)
  id <- sample(0:(m * n - 1), num.to.na, replace = FALSE)
  rows <- id %/% m + 1
  cols <- id %% m + 1
  sapply(seq(num.to.na), function(x) {
    df[rows[x], cols[x]] <<- NA
  })
  return(df)
}

mydata2 <- NAins(mydata, 0.1)

# run the lme, works now
model = lme(
  Vol ~ age + sex * time + time * HCD,
  random =  ~ time |
    SID,
  na.action = "na.omit",
  data = mydata2
)
summary(model)

mydf <- ggpredict(model, terms = c("time", "HCD [-2.5, -0.5, 2.0]"))
plot(mydf)

<强> LME-积

enter image description here

# lmer also works
model2 <- lmer(
  Vol ~ age + sex * time + time * HCD + (time |
                                           SID),
  control = lmerControl(
    check.nobs.vs.nlev = "ignore",
    check.nobs.vs.rankZ = "ignore",
    check.nobs.vs.nRE = "ignore"
  ),
  na.action = "na.omit",
  data = mydata2
)
summary(model)
mydf <- ggpredict(model2, terms = c("time", "HCD [-2.5, -0.5, 2.0]"), ci.lvl = NA)

# plotting works, but only w/o CI
plot(mydf)

<强> 11聚物积

enter image description here

# lmer also works
model3 <- glmmTMB(
  Vol ~ age + sex * time + time * HCD + (time | SID),
  data = mydata2
)
summary(model)
mydf <- ggpredict(model3, terms = c("time", "HCD [-2.5, -0.5, 2.0]"))
plot(mydf)
plot(mydf, facets = T)

<强> glmmTMB-曲线

enter image description here

enter image description here