2011-10-23 2 views
9

나는 행동 과학을위한 다중 회귀 분석을 적용한 Cohen, Cohen, Aiken과 West (2003)의 책을 읽었으며 상호 작용과 상호 작용이없는 회귀 표면의 3 차원 음모를 보았습니다 259 쪽). 그래프는 R을 사용하여 만들어 졌던 것처럼 보입니다. 저는 그래프를 교육 도구로 좋아하며이를 재현하고 싶습니다. 플롯은 다음과 같이 보입니다. enter image description here플롯 회귀 표면

Coehn et al. 플롯은 평균에서 플레인을 가로 지르는 선이며, + 1sd이고 x2는 = 1sd입니다. 가능한 경우 우수한 추가 기능이 될 것입니다. 일반적으로 대부분의 기능은 R에서 가능합니다.

아래 샘플 데이터 세트에는 IV, 2 개의 예측 변수 및 중심 예측 변수가 제공됩니다. 어떻게하면 R을 사용하여 상호 작용을 보여주는 회귀 표면 (평면) 플롯을 생성하고 센터링 된 데이터와 센터링되지 않은 데이터 모두에 대한 추가 모델을 생성 할 수 있습니까? (나는 기술은 동일하지만 확실하게하고 싶다고 가정합니다). 4 플롯의

총 : 1. 2. uncentered 상호 작용 3. 가 상호 작용 4. 중심의 상호 작용

DF<-structure(list(y = c(-1.22, -1.73, -2.64, -2.44, -1.11, 2.24, 
3.42, 0.67, 0.59, -0.61, -10.77, 0.93, -8.6, -6.99, -0.12, -2.29, 
-5.16, -3.35, -3.35, -2.51, 2.21, -1.18, -5.21, -7.74, -1.34), 
    x1 = c(39.5, 41, 34, 30.5, 31.5, 30, 41.5, 24, 43, 39, 25.5, 
    38.5, 33.5, 30, 41, 31, 25, 37, 37.5, 24.5, 38, 37, 41, 37, 
    36), x2 = c(61L, 53L, 53L, 44L, 49L, 44L, 57L, 47L, 54L, 
    48L, 46L, 59L, 46L, 61L, 55L, 57L, 59L, 59L, 55L, 50L, 62L, 
    55L, 55L, 52L, 55L), centered.x1 = c(5.49702380952381, 6.99702380952381, 
    -0.0029761904761898, -3.50297619047619, -2.50297619047619, 
    -4.00297619047619, 7.49702380952381, -10.0029761904762, 8.99702380952381, 
    4.99702380952381, -8.50297619047619, 4.49702380952381, -0.50297619047619, 
    -4.00297619047619, 6.99702380952381, -3.00297619047619, -9.00297619047619, 
    2.99702380952381, 3.49702380952381, -9.50297619047619, 3.99702380952381, 
    2.99702380952381, 6.99702380952381, 2.99702380952381, 1.99702380952381 
    ), centered.x2 = c(9.80357142857143, 1.80357142857143, 1.80357142857143, 
    -7.19642857142857, -2.19642857142857, -7.19642857142857, 
    5.80357142857143, -4.19642857142857, 2.80357142857143, -3.19642857142857, 
    -5.19642857142857, 7.80357142857143, -5.19642857142857, 9.80357142857143, 
    3.80357142857143, 5.80357142857143, 7.80357142857143, 7.80357142857143, 
    3.80357142857143, -1.19642857142857, 10.8035714285714, 3.80357142857143, 
    3.80357142857143, 0.803571428571431, 3.80357142857143)), .Names = c("y", 
"x1", "x2", "centered.x1", "centered.x2"), row.names = c(NA, 
25L), class = "data.frame") 

사전에 감사를 중심없는 상호 작용을 uncentered 없습니다.

편집 : 다음 코드는 평면을 플롯하지만 상호 작용이있을 때 작동하지 않습니다 (실제로 관심이있는 부분입니다). 또한, 나는 높은 (+ 1sd), 낮은 (-1sd) 및 x2의 평균도 플롯하는 방법을 알지 못합니다.

x11(10,5) 
s3d <- scatterplot3d(DF[,c(2,3,1)], type="n", highlight.3d=TRUE, 
     angle=70, scale.y=1, pch=16, main="scatterplot3d") 

    # Now adding a regression plane to the "scatterplot3d" 
    my.lm <- with(DF, lm(y ~ x1 + x2)) 
s3d$plane3d(my.lm, lty.box = "solid") 

상호 작용면 (여기에서 보이는) 플롯하려는 시도 :

s3d <- scatterplot3d(DF[,c(2,3,1)], type="n", highlight.3d=TRUE, 
     angle=70, scale.y=1, pch=16, main="scatterplot3d") 

    my.lm <- with(DF, lm(y ~ x1 + x2 + x1:x2)) 
s3d$plane3d(my.lm, lty.box = "solid") 

나왔고 다음과 같은 오류 : 여기

Error in segments(x, z1, x + y.max * yx.f, z2 + yz.f * y.max, lty = ltya, : 
    cannot mix zero-length and non-zero-length coordinates 
+0

나는이 같은 무언가를 R 사령관에 뭔가가있을 수 있습니다 생각 ... –

답변

13

내가 그것을 할 것입니다 방법 (색상의 비트를 추가) 패키지 'rms'및 '격자':

require(rms) # also need to have Hmisc installed 
require(lattice) 
ddI <- datadist(DF) 
options(datadist="ddI") 
lininterp <- ols(y ~ x1*x2, data=DF) 
bplot(Predict(lininterp, x1=25:40, x2=45:60), 
     lfun=wireframe, # bplot passes extra arguments to wireframe 
     screen = list(z = -10, x = -50), drape=TRUE) 
(210)

enter image description here

그리고 비 상호 작용 모델 :

bplot(Predict(lin.no.int, x1=25:40, x2=45:60), lfun=wireframe, col=2:8, drape=TRUE, 
screen = list(z = -10, x = -50), 
main="Estimated regression surface with no interaction") 

enter image description here