Построение результатов логистической регрессии с биномиальными данными из модели смешанных эффектов (lme4) с усреднением модели (MuMIn) - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь отобразить результаты логистической регрессии. Моя модель подходила с помощью glmer () из пакета lme4, затем я использовал MuMIn для усреднения модели.

Упрощенная версия моей модели с использованием набора данных mtcars:

glmer(vs ~ wt +  am + (1|carb), database, family = binomial, na.action = "na.fail")

Мой желаемый результат - два графика, которые показывают прогнозируемую вероятность того, что vs = 1, один для wt, который является непрерывным, один для am, который является биномиальным.

ОБНОВЛЕНИЕ:

Я получил много работы после комментариев @ KamilBartoń:

database <- mtcars

# Scale data
database$wt <- scale(mtcars$wt)
database$am <- scale(mtcars$am)

# Make global model
model.1 <- glmer(vs ~ wt + am + (1|carb), database, family = binomial, na.action = "na.fail")

# Model selection
model.1.set <- dredge(model.1, rank = "AICc")

# Get models with <10 delta AICc
top.models.1 <- get.models(model.1.set,subset = delta<10)

# Model averaging
model.1.avg <- model.avg(top.models.1)

# make dataframe with all values set to their mean
xweight <- as.data.frame(lapply(lapply(database[, -1], mean), rep, 100))

# add new sequence of wt to xweight along range of data
xweight$wt <- (wt = seq(min(database$wt), max(database$wt), length = 100))

# predict new values
yweight <- predict(model.1.avg, newdata = xweight, type="response", re.form=NA)

# Make plot 
plot(database$wt, database$vs, pch = 20, xlab = "WEIGHT (g)", ylab = "VS")

# Add predicted line
lines(xweight$wt, yweight)

Производит:

enter image description here

Остается проблема, что данные масштабируются и центрируются вокруг 0, что означает невозможность интерпретации графика. Я могу изменить масштаб данных, используя ответ @BenBolker на на этот вопрос , но он отображается неправильно:

## Ben Bolker's unscale function:
## scale variable x using center/scale attributes of variable y
scfun <- function(x,y) {
  scale(x,
        center=attr(y,"scaled:center"),
        scale=attr(y,"scaled:scale"))
        }

## scale prediction frame with scale values of original data -- for all variables
xweight_sc <- transform(xweight,
                        wt = scfun(wt, database$wt),
                        am = scfun(am, database$am))

# predict new values
yweight <- predict(model.1.avg, newdata = xweight_sc, type="response", re.form=NA)

# Make plot 
plot(mtcars$wt, mtcars$vs, pch = 20, xlab = "WEIGHT (g)", ylab = "VS")

# Add predicted line
lines(xweight$wt, yweight)

Производит:

enter image description here

Я вижу, что сюжетная линия там, но она не в том месте. Я пробовал это несколькими способами, но не могу понять, в чем проблема. Что я сделал не так?

Также еще одна оставшаяся проблема: Как сделать биномиальный график для am?

1 Ответ

0 голосов
/ 23 ноября 2018

Для этого вы можете использовать ggeffects-package , либо с ggpredict(), либо с ggeffect() (разницу между этими двумя функциями см. ?ggpredict, первые вызовы predict(), последние effects::Effect()).

library(ggeffects)
library(sjmisc)
library(lme4)
data(mtcars)

mtcars <- std(mtcars, wt)
mtcars$am <- as.factor(mtcars$am)

m <- glmer(vs ~ wt_z + am + (1|carb), mtcars, family = binomial, na.action = "na.fail")

# Note the use of the "all"-tag here, see help for details
ggpredict(m, "wt_z [all]") %>% plot()

enter image description here

ggpredict(m, "am") %>% plot()

enter image description here

...