회귀 결과에서 회귀 상호 작용의 적합치를 직접 계산합니다.

Aug 21 2020

나는 아래와 유사한 상호 작용 모델을 사용하고 있습니다.

set.seed(1993)

moderating <- sample(c("Yes", "No"),100, replace = T)
x <- sample(c("Yes", "No"), 100, replace = T)
y <- sample(1:100, 100, replace = T)

df <- data.frame(y, x, moderating)

Results <- lm(y ~ x*moderating)
summary(Results)
Call:
lm(formula = y ~ x * moderating)

Residuals:
    Min      1Q  Median      3Q     Max 
-57.857 -29.067   3.043  22.960  59.043 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)         52.4000     6.1639   8.501 2.44e-13 ***
xYes                 8.4571     9.1227   0.927    0.356    
moderatingYes      -11.4435     8.9045  -1.285    0.202    
xYes:moderatingYes  -0.1233    12.4563  -0.010    0.992    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 30.82 on 96 degrees of freedom
Multiple R-squared:  0.04685,   Adjusted R-squared:  0.01707 
F-statistic: 1.573 on 3 and 96 DF,  p-value: 0.2009

회귀 테이블에서 상호 작용의 적합치를 계산하는 방법을 배우고 있습니다. 이 예에서 기본 범주 (또는 생략 된 범주)는 x= Nomoderating = No입니다.

지금까지 다음 적합치를 계산하는 방법을 알고 있습니다.

#Calulate Fitted Value From a Regression Interaction by hand
#Omitted Variable = X_no.M_no

X_no.M_no <- 52.4000
X_yes.M_no <- 52.4000 + 8.4571 
X_no.M_yes <- 52.4000 + -11.4435
X_yes.M_yes #<- ?

최종 범주, X_yes.M_yes계산 방법을 이해하지 못합니다 . 내 초기 생각은 X_yes.M_yes <- 52.4000 + -0.1233, (절편과 상호 작용 용어) 이었지만 그것은 올바르지 않습니다. 나는이 기능의 장착 값을 예측하여, 그 잘못 때문에 알고 X_yes.M_yes = 49.29032있지, 52.2767같은 52.4000 + -0.1233과 같다.

X_yes.M_yes범주 의 예측 값을 직접 계산하려면 어떻게합니까 ?

다음은 predictR 의 함수에서 생성 된 예측 값입니다.

#Validated Here Using the Predict Function:
newdat <- NULL
for(m in na.omit(unique(df$moderating))){ for(i in na.omit(unique(df$x))){
    moderating <- m
    x <- i
    
    newdat<- rbind(newdat, data.frame(x, moderating))
    
  }
}

Prediction.1 <- cbind(newdat, predict(Results, newdat, se.fit = TRUE))
Prediction.1

답변

3 StatsStudent Aug 21 2020 at 12:16

상호 작용 용어가있는 모델에서는 작업중인 회귀 모델을 기록하는 것이 항상 유익하다고 생각합니다. "X"값을 표시해 보겠습니다.$X$ 그리고 당신이 당신의 "중재자"라고 부르는 것은 $M$. 이 경우 모델은 다음과 같이 작성됩니다.

$\hat{Y} = \hat{\beta_0}+X\hat{\beta_1}+M\hat{\beta_2}+XM\hat{\beta_{3}}$

의 결과에서 다음 R과 같이됩니다.

$\hat{Y} = 52.4000+X8.4571-M11.4435-XM0.1233$

이제 R변수에 범주 / 이진 예 / 아니오 값을 코딩 하는 방법을 이해해야합니다.$X$$M$. 기본적으로 R코드됩니다$X$ 값은 다음과 같습니다 (사전 순) :

\ begin {eqnarray *} X & = & \ begin {cases} 1 & \ text {X가 예인 경우} \\ 0 & \ text {X가 아니오 인 경우} \ end {cases} \ end {eqnarray *}

R 유사하게 코드를 작성합니다. $M$값 : \ begin {eqnarray *} M & = & \ begin {cases} 1 & \ text {Moderator is Yes} \\ 0 & \ text {Moderator is No} \ end {cases} \ end {eqnarray * }

그런 다음 올바르게 식별 한 경우 $X$ 예, 그리고 $M$ 아니오, 위의 회귀 방정식은 다음과 같습니다.

$\begin{eqnarray*}\hat{Y} & = & 52.4000+(1)8.4571-(0)11.4435-(1)(0)0.1233 \\ & =& 52.4000+8.4571-(0)-0\\ & =& 52.4000+8.4571 \end{eqnarray*}$

자, 둘 다 $X$ 예, 그리고 $M$ 예, 둘 다의 코드 값 $X$$M$ 1과 같고 회귀 방정식은 다음과 같습니다.

$\begin{eqnarray*}\hat{Y} & = & 52.4000+(1)8.4571-(1)11.4435-(1)(1)0.1233 \\ & =& 52.4000+8.4571-11.4435-0.1233\\\end{eqnarray*}$

그리고이 마지막 용어는 당신이 쓴 곳에서 찾고있는 것입니다.

X_yes.M_yes #<- ?

노트:

@Roland가 언급했듯이 주목해야 할 사항은 위에서 작성한 모든 내용은 이진 변수에 대해 R의 기본 코딩을 사용하고 있다고 가정합니다. 기본적으로 R은 앞서 언급 한대로 "예"값을 1로 코딩하고 "아니요"값을 0으로 코딩합니다 (이 경우에는 사전 순으로 인자 변수의 첫 번째 수준이기 때문에 0이 아니오에 사용됨). 그러나 사용할 수있는 대체 코딩 방식이 있습니다 (예 : Yes = 1 및 No = -1). 그러나 귀하의 R 코드 및 출력을 통해 실제로 제 답변에서 제공 한 바이너리 0/1 코딩을 사용하고 있음을 알 수 있습니다. 다음 명령을 실행하여 R 세션에서 0/1 코딩 체계가 사용되고 있는지 확인할 수 있습니다.

model.matrix(Results)

그러면 "디자인 매트릭스"또는 "모델 매트릭스"가 표시되고 각 카테고리 "뒤에"코딩이 표시됩니다.

   (Intercept) xYes moderatingYes xYes:moderatingYes
1             1    1             1                  1
2             1    0             1                  0
3             1    0             1                  0
4             1    1             1                  1
5             1    0             1                  0
6             1    0             1                  0
7             1    1             1                  1
.
.
.