2013-07-15 2 views
3

Я пытаюсь настроить многострочные графики из пакета эффектов.Пользовательские графики с использованием пакета эффектов

В любом случае, чтобы разместить легенду в примере ниже в области графика, а не над графиком?

В качестве альтернативы: Кто-нибудь знает, как построить результаты многострочных регрессий, рассчитанных пакетом эффектов, используя ggplot2?

Я ценю любую помощь.

Энди

Пример:

library(effects) 
data(Prestige) 
mod5 <- lm(prestige ~ income*type + education, data=Prestige) 
eff_cf <- effect("income*type", mod5) 
print(plot(eff_cf, multiline=TRUE)) 
+0

Можете ли вы показать образцы данных, как то, что вы сделали в пакете эффектов. –

+0

Спасибо за ваш ответ, я обновил свой вопрос на примере – Andy

ответ

3

Это, как вы построить объект эффекта в ggplot

library(ggplot2) 

## Change effect object to dataframe 
eff_df <- data.frame(eff_cf) 

## Plot ggplot with legend on the bottom 
ggplot(eff_df)+geom_line(aes(income,fit,linetype=type))+theme_bw()+ 
    xlab("Income")+ylab("Prestige")+coord_cartesian(xlim=c(0,25000),ylim=c(30,110))+ 
    theme(legend.position="bottom") 

Вы можете изменить xlim и ylim в зависимости от того, как вы хотите, чтобы вывести свой данные.

Выход следующим образом: enter image description here

+0

только один дополнительный вопрос здесь - как бы вы наиболее элегантно добавили 95% -ные доверительные пределы или 95% -ные полосы прогнозов здесь, скажем, показывая 3 группы в трех разных цветах (используя сплошные & пунктирные линии) и, возможно, также фактические точки данных в разных цветах? В пакете эффектов нет возможности отображать фактические точки данных? –

3

С ?xyplot вы читаете:

В качестве альтернативы, ключ может быть расположен внутри области участка по задающих компонентов x, y и угловыми. x и y определить местоположение в углу клавиши задается угол, который, как правило, один из c(0,0), c(1,0), c(1,1) и c(0,1), которые обозначают углы единицы площади.

и от ?plot.eff вы читали

key.args дополнительные аргументы, которые будут переданы ключевые шпалере аргумент или densityplot графика XY, например, в положение ключа (легенда) в черчения области ,

Так, например, вы можете сделать следующее:

plot(eff_cf, multiline=TRUE,  
    key.args=list(x=0.2,y=0.9,corner=c(x=1, y=1))) 

enter image description here

1

@tom Wenseleers

Вы можете использовать sjPlot::sjp.int с type='eff' для этого.

Однако он не даст вам ковровых участков и никаких необработанных точек данных.

mod5 <- lm(prestige ~ type * income + education, data=Prestige) 
library(sjPlot) 
sjp.int(mod5,showCI = T, type = 'eff') 

Там аргумент, partial.residuals = T функции effect(). Это дает вам установленные значения, partial.residuals.raw и partial.residuals.adjusted. Я полагаю, вы могли бы объединить эти данные в исходном наборе данных, а затем спланировать сглаживание по группам, но на ранних этапах я столкнулся с некоторыми трудностями (например, na.action=na.exclude не соблюдается).

2

На основании ответа Рубена, вы можете попробовать следующее:

library(sjPlot) 
sjp.int(mod5, type = "eff", swapPredictors = T) 

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

sjp.setTheme(legend.pos = "bottom right", 
      legend.inside = T) 
sjp.int(mod5, type = "eff", swapPredictors = T) 

, который дает вам следующий сюжет:

enter image description here

См sjPlot-manual примеров о том, как настроить сюжетный внешний вид и легенда-позиция/размер и т. д.

Для построения оценок вашей модели в виде лесного участка или предельных эффектов всех условий модели см. ?sjp.lm в пакете sjPlot, или вы можете даже попробуйте последние функции в моем пакете from GitHub.

Смежные вопросы