2015-07-31 3 views
2

Я хотел бы построить взаимодействие (одну независимую переменную -3 модальности, рассматриваемую как категориальную, одну переменную-модератора -7 модальности, рассматриваемую как непрерывную, наконец, двоичную зависимая переменная -0 или 1).Задание графика взаимодействия в ggplot с использованием + 1sd/-1sd после логистической регрессии

В частности, я намерен составить график с DV по оси Y и категориальный IV по оси x. Теперь я хотел бы построить две строки для моей постоянной переменной модератора, представляющие + 1sd и -1sd из среднего значения на каждом уровне трех уровней независимой переменной (как это традиционно делается на таких графиках) а не семь строк, которые представляют каждый из модальностей.

Как я могу попросить программное обеспечение R рассчитать и отобразить эти две конкретные части информации только на графике, используя ggplot?

[EDIT 1] Вот подмножество моих данных: содержание категорического И.В., Motivcentered, модератор (непрерывный), соответственно мой DV (двоичный):

structure(list(content = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3), 
resp = c(1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1), 
motivcentered = c(-0.25, 1.75, 1.75, -0.25, -2.25, 1.75, 1.75, -1.25, 0.75, -0.25, 0.75, -0.25, -4.25, -1.25, 1.75), 
id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), 
item = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), 
.Names = c("content", "resp", "motivcentered", "id", "item"), 
row.names = c(NA, -15L), 
class = "data.frame", codepage = 65001L) 

[РЕДАКТИРОВАТЬ 2] Я пытаюсь построить новые данные, используя теперь категориальный ID (с непрерывным замедлителем и категоричным DV). Категориальный идентификатор - единственная разница с моим предыдущим запросом (см. Выше). Я сталкиваюсь с проблемами построения такого графика (по-прежнему рисуем + 1sd, -1sd и средние строки для модератора), так как он не отображает каждую модальность моего IV (3 модальности, которые должны появляться на оси x). Кто-нибудь из вас знает, как справиться с этой проблемой, используя предоставленное подмножество?

+0

Пожалуйста, найдите время для создания [воспроизводимого примера] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Вы должны предоставить образец ввода. Если возможно, возможно, вы можете набросать нужный результат или найти другое изображение сюжета, похожее на то, что вы пытаетесь создать. Это облегчит вам помощь. – MrFlick

ответ

2

Редактировать 1: После предоставления небольшого набора данных образцов я обновил свой ответ. Если непрерывная переменная является вашим модератором, я думаю, вы хотите иметь content вдоль оси x, прогнозируемые вероятности по оси y и другую строку для md, +1 и -1 sd для motivcentered.

Я скопировал данные в кадр данных называется mydat:

# make categorical 
mydat$content <- as.factor(mydat$content) 
# fit model 
fit <- glm(resp ~ content * motivcentered, 
      family = binomial("logit"), 
      data = mydat) 
# load library 
library(sjPlot) 
# show plot 
sjp.int(fit, type = "eff", 
     moderatorValues = "meansd", 
     swapPredictors = T) 

moderatorValues указывает, какие значения переменной замедлителя вы хотели бы использовать, вариант meansd подло, + 1/-1 сд. По умолчанию sjp.int предполагает, что переменная с менее уникальными значениями является модератором, однако вы хотите, чтобы она была наоборот. Таким образом, swapPredictors теперь использует content как DV вдоль оси x и motivcentered в качестве модератора.

Сюжет выглядит следующим образом (немного странно, весьма вероятно, из-за ограниченного количества наблюдений):

enter image description here

Для логистических регрессий, это вряд ли имеет смысл иметь только значения 0 и 1 на оси y, следовательно, показано влияние взаимодействия на предсказанные вероятности.

У вас есть различные варианты изменения внешнего вида сюжета, например.:

sjp.int(fit, 
     type = "eff", 
     moderatorValues = "meansd", 
     swapPredictors = T, 
     showCI = T, 
     facet.grid = T, 
     legendLabels = c("-1 sd", "mean", "+1 sd")) 

(Обратите внимание, что сюжет снова выглядит немного странно, особенно доверительные интервалы, из-за ограниченных наблюдений)

enter image description here

Edit 2: Оригинальный пост первого не имел воспроизводимый пример, поэтому я попробовал «общее» предположение здесь: Возможно, функция sjp.int от sjPlot-package работает на вас?

Предполагая, что вы хотите иметь предельные эффекты вашего члена взаимодействия, со средним и +/- 1 SD, вызов функции будет выглядеть следующим образом:

library(sjmisc) # for sample data 
data(efc) 
mydf <- data.frame(usage = efc$tot_sc_e, 
        sex = efc$c161sex, 
        education = efc$c172code, 
        burden = efc$neg_c_7, 
        barthel = efc$barthtot) 
# convert gender predictor to factor 
mydf$sex <- relevel(factor(mydf$sex), ref = "2") 
# fit samplemodel 
fit <- lm(usage ~ .*., data = mydf) 

library(sjPlot) 
sjp.int(fit, 
     type = "eff", 
     moderatorValues = "meansd") 

Полученный график может выглядеть следующим образом:

enter image description here

Эта цифра была взята из this package vignette раздела Различных значений модератора для отображения эффекта сюжетного типа; раздел, где показаны все соответствующие примеры, называется Умышленно выбирайте значения непрерывных модераторов.

+0

Итак, молись сказать, что именно может «подгонять» на самом деле? –

+0

Укомплектованная модель, возвращаемая, например, lm, glm, lmer, glmer ... с условиями взаимодействия. См. Связанный пакет виньетки в моем посте. – Daniel

+0

Хорошо, я добавил полный код, как показано в виньетике пакета, поэтому он воспроизводится напрямую. – Daniel