2016-11-15 2 views
0

Я пытаюсь построить взаимодействие между фиксированным эффектом и случайным коэффициентом. sjPlot кажется хорошим пакетом для этого, но у меня возникают проблемы с изменением типов линий и цветов. Я хотел бы изменить цвет линий на схему серого масштаба с разными типами линий, чтобы дифференцировать группы. Я экспериментировал с аргументом geom.color и функцией sjp.setTheme, но до сих пор не смог получить желаемые результаты.Изменение цветов линий и типов вероятностных диаграмм spj.glmer по группам

Пример ниже показывает, мои первые попытки, заимствование из примера на sjPlot сайте:

data(efc) 

efc$hi_qol <- dicho(efc$quol_5) 

efc$grp = as.factor(efc$e15relat) 
    levels(x = efc$grp) <- get_labels(efc$e15relat) 

mydf <- data.frame(hi_qol = efc$hi_qol, 
        sex = to_factor(efc$c161sex), 
        c12hour = efc$c12hour, 
        neg_c_7 = efc$neg_c_7, 
        grp = efc$grp) 
fit <- glmer(hi_qol ~ sex + c12hour + neg_c_7 + (1 | grp), 
       data = mydf, family = binomial("logit")) 

sjp.glmer(fit, type="ri.slope", facet.grid=F, vars="neg_c_7") 

Чтобы изменить цвет линии, я попытался установить geom.colors="black", но это, кажется, не делать ничего.

sjp.glmer(fit, type="ri.slope", facet.grid=F, geom.colors="black", vars="neg_c_7") 

Далее я попытался изменить тему, используемую sjPlot, чтобы изменить тип линии, но это тоже не сработало.

sjp.setTheme(geom.linetype = c(1:8)) 
sjp.glmer(fit, type="ri.slope", facet.grid=F, vars="neg_c_7") 

Я пропустил что-то очевидное или меняю типы линий и цвета более сложные?

+0

'geom.colors' не относится к типу« ri.slope ». Если вы хотите связать взаимодействие (например, с 'sjp.int()'), вы можете использовать, например, 'sjp.int (fit, geom.colors =" gs ")' (для шкалы серого см. '? Sjp.grpfrq 'для получения подробной информации о аргументе' geom.colors'). Однако вы не можете изменить тип линии, так как эстетика типа линии не отображается в построении ggplot-объекта с помощью sjp-функции. – Daniel

ответ

0

Пакет sjPlot не поддерживает изменение типа линии - только цвет. Эстетика линий в настоящее время не отображается sjp-функциями. Тем не менее, вы можете получить доступ к данным, которые используются для сюжета и создать свой собственный график взаимодействия:

library(ggplot2) 
library(sjmisc) 
data(efc) 
# create binary response 
y <- ifelse(efc$neg_c_7 < median(stats::na.omit(efc$neg_c_7)), 0, 1) 
# create data frame for fitted model 
mydf <- data.frame(y = as.factor(y), 
sex = as.factor(efc$c161sex), 
barthel = as.numeric(efc$barthtot)) 
# fit model 
fit <- glm(y ~ sex * barthel, data = mydf, family = binomial(link = "logit")) 

p <- sjp.int(fit, geom.colors = "gs") 
ggplot(p$data.list[[1]], aes(x = x, y = y, linetype = grp)) + geom_line() 

enter image description here

Изменение цвета для участков взаимодействия работы с geom.colors -argument см Подробнее в ?sjp.grpfrq.

+0

Я думаю, что добавлю функции linetype-aes к функциям, чтобы вы могли легко создавать ч/б графики. – Daniel

0

Я не уверен, как это сделать с помощью sjplot, но вы можете использовать функцию interaction.plot для генерации графика и добавить col= c(...), чтобы изменить цвета линии.

interaction.plot(factor, factor, fit, .. col = c("red","blue"))