Как преобразовать график взаимодействия регрессии в ggplot?

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

xx <- c(40,65)   
yy <- c(26.77,37.15)
x <- c(40,65)   #  <-- x-coords for lines
y1 <- c(28.5,37.15)
y2 <- c(30.345,35.895)
y3 <- c(32.19,34.64)
plot(xx,yy,type='n',font=2,font.lab=2,xlab='x1',ylab='Y',main='2-Way Interaction Plot')
lines(x,y1,lwd=3,lty=1,col=1)
lines(x,y2,lwd=3,lty=5,col=2)
lines(x,y3,lwd=3,lty=6,col=3)
points(x,y1,col=1,pch=16)
points(x,y2,col=1,pch=16)
points(x,y3,col=1,pch=16)                                                      
legend(leg[1],leg[2],legend=c('W1(1)','W1(2)','W1(3)'),lwd=c(3,3,3),lty=c(1,5,6),col=c(1,2,3))

y1, y2, y3 — значения баллов/условного уклона модератора.


person user29436    schedule 22.08.2013    source источник
comment
Добро пожаловать в Cross Validated! Но этот вопрос касается программирования, и его лучше задать в Stack Overflow.   -  person Scortchi - Reinstate Monica    schedule 22.08.2013
comment
Я надеюсь, что это и этот пример поможет вам начать работу.   -  person Henrik    schedule 22.08.2013
comment
Проверьте свой синтаксис, пожалуйста. А что такое leg[1] и leg[2]?   -  person Frank    schedule 22.08.2013


Ответы (1)


Вам нужен фрейм данных в длинном формате:

dfrm <- data.frame(x=rep(x,3), y=c(y1,y2,y3), 
                   group=rep(c("y1","y2","y3") ,each=2) ) 
ggplot(data=dfrm, aes(x=x,y=y,group=group) ) +
                      geom_point()+geom_line(aes(col=group))

(Легенда появляется автоматически.) Существуют также функции xlim и ylim, если вы хотите применить ограничения «xx» и yy, которые вы применили к пустой структуре графика в базовом графическом шаблоне.

введите здесь описание изображения

person IRTFM    schedule 22.08.2013
comment
спасибо @DWin. В случае, если кто-то еще новичок в R, как я, и пытается воспроизвести: group — это w-переменная модератора, а y1, y2, y3 выше — условные значения в w (values). Код для фрейма данных И ggplot: 'group= c(w(1), w(1), w(2), w(2), w(3), w(3)) x= c(40 , 65, 40, 65, 40, 65) y= c(28,5, 37,15, 30,345, 35,895, 32,19, 34,64) mydata‹- data.frame (x, y, group) ggplot(data=mydata, aes(x= x,y=y,group=group)) + geom_point()+geom_line(aes(col=group))' - person user29436; 23.08.2013