回帰出力から回帰相互作用の近似値を手動で計算します
私は以下のような相互作用モデルを使用しています。
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= No
とmoderating = 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
カテゴリの予測値を手動で計算するにはどうすればよいですか?
predict
Rの関数から生成された予測値は次のとおりです。
#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
回答
交互作用項のあるモデルでは、使用している回帰モデルを書き留めておくことは常に有益だと思います。あなたの「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 {if X is Yes} \\ 0&\ text {if X is No} \ end {cases} \ end {eqnarray *}
そして
R
同様にあなたをコーディングします $M$値は次のとおりです。\ begin {eqnarray *} M&=&\ begin {cases} 1&\ text {モデレーターがはいの場合} \\ 0&\ text {モデレーターがいいえの場合} \ 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コーディングを使用していることがわかります。次のコマンドを発行することにより、0/1コーディングスキームがRセッションで使用されていることを確認できます。
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
.
.
.