2016-09-20 4 views
2

내 데이터 세트에는 3 개의 그룹이 있으며 y 그룹과 x 사이의 상호 작용을 계획하고 싶습니다.다단계 분석에서 중재 효과를 플롯 팅 R

id <- c(1,1,1,2,2,2,3,3,3) 
group <- c(0,0,0,1,1,1,2,2,2) 
x <- c(20,50,30,50,65,80,20,50,60) 
y <- c(120,130,150,200,210,180,160,170,120) 

"interaction.plot"으로 이미 시도했지만 작동하지 않았습니다.

interaction.plot(x,group,y) 

누군가가이 상호 작용을 계획하기 위해 좋은 R 구문을 사용하고 있습니까?

+0

왜 작동하지 않는지 더 자세히 설명해주십시오. 나는이 코드를 입력하고 플롯을 얻는다. 그게 뭐가 잘못 됐어? – cgmil

답변

1

그룹의 class을 원하는 값에 상관없이 factor으로 변경해야합니다. 사실 interaction.plot()은 양방향 조합을위한 요소이며 귀하의 x은 요소가 아닙니다. 그러나 하나가 계속되면 interaction.plot() 몇 가지 도움을줍니다. 귀하의 경우, 결과는 "그러한 데이터와의 상호 작용을 고려하는 것은 어리석은 생각입니다"라고 말합니다.

df <- data.frame(id = id, x = x, y = y, group = as.factor(group)) 

## Base plot 
model <- lm(y ~ x * group, data = df) 
xpara <- 20:80 

plot(y ~ x, data = df, col=c(2:4)[group], pch=19) 
for(i in 1:3) lines(xpara, predict(model, data.frame(x = xpara, group = as.factor(i-1))), col = i+1) 
legend("topleft",paste(c("group0","group1","group2")), pch=19, lty=1, col=c(2:4)) 

## ggplot2 (I plotted lines and confidence intervals to interpret) 
library(ggplot2) 
ggplot(df, aes(x = x, y = y, colour = group)) + 
    geom_point(size = 4) + 
    geom_smooth(method = "lm", se = T, fullrange = T) 

enter image description here

[편집] 모델의 클래스가 predict() 지원하는 경우

, 방법 : 당신이 원하는 경우

는하지만 (난 당신이 선형 모델을 원 가정) 기본적으로 동일합니다.

df2 <- data.frame(id = as.factor(id), x = x, y = y, group = as.factor(group)) 
library(nlme) 

# first; make model 
lme.mod <- lme(y ~ x * group, random = ~ 1|id, data = df2) 

# second; get predicted values 
xpara <- 20:80 # make a vector for an independent variable you use as x. 
y.g1 <- predict(lme.mod, data.frame(x = xpara, group = "0", id = "1"), type="response") 
y.g2 <- predict(lme.mod, data.frame(x = xpara, group = "1", id = "1"), type="response") 
y.g3 <- predict(lme.mod, data.frame(x = xpara, group = "2", id = "1"), type="response") 

# third; draw 
plot(y ~ x, df2, col=c(2:4)[group], pch=19) 
lines(xpara, y.g1, col=2) 
lines(xpara, y.g2, col=3) 
lines(xpara, y.g3, col=4) 

## Simplificated version 
lev <- levels(df$group) 

plot(y ~ x, data = df2, col=c(2:4)[group], pch=19, ylab="y (id = "1")") 
for(i in seq.int(length(lev))) 
    lines(xpara, predict(lme.mod, data.frame(x = xpara, group = lev[i], id = 1)), col = i+1) 
legend("topleft",paste(c("group0","group1","group2")), pch=19, lty=1, col=c(2:4)) 
+0

답변과 구문을 제공해 주셔서 감사합니다. 그러나 필자의 데이터 세트에는 계층 적 구조가 있기 때문에 다중 레벨 모델에서 상호 작용을 그래프로 나타내므로 "lm"대신 comand "lme"를 사용합니다. 멀티 레벨 디자인에서도 가능합니까? –

+0

@ M.K .; 좋아, 내가 편집 했어. – cuttlefish44