4

lm を使用して、モデルに適合させたいと思います: y = b0 + b1*x1 + b2*x2 + b1*b2*x1*x2

私の質問は次のとおりです。相互作用の係数が主効果の係数の乗算と等しくなるように指定するにはどうすればよいですか?

係数を特定の値に設定するには、offset() と I() を使用できることがわかりましたが、係数間の関係を指定する方法がわかりません。

以下は、単純なシミュレートされたデータセットです。

n <- 50 # Sample size
x1 <- rnorm(n, 1:n, 0.5) # Independent variable 1
x2 <- rnorm(n, 1:n, 0.5) # Independent variable 2
b0 <- 1 
b1 <- 0.5
b2 <- 0.2
y <- b0 + b1*x1 + b2*x2 + b1*b2*x1*x2 + rnorm(n,0,0.1)

モデル 1: y = b0 + b1*x1 + b2*x2 + b3*x1*x2 に適合させるには、次のようにします。

summary(lm(y~ x1 + x2 + x1:x2))

しかし、どのようにモデル 2 を当てはめますか: y = b0 + b1*x1 + b2*x2 + b1*b2*x1*x2?

2 つのモデルの主な違いの 1 つは、推定するパラメーターの数です。モデル 1 では、b0 (切片)、b1 (変数 1 の勾配)、b2 (変数 2 の勾配)、および b3 (変数 1 と 2 間の交互作用の勾配) の 4 つのパラメーターを推定します。モデル 2 では、b0 (切片)、b1 (変数 1 の勾配 & 変数 1 と 2 間の相互作用の勾配の一部)、および b2 (変数 2 の勾配 & の勾配の一部) の 3 つのパラメーターを推定します。変数 1 と 2 の間の交互作用)

私がこれをしたい理由は、モデル 2 の x1 と x2 の間に有意な相互作用があるかどうかを調査するとき、y = b0 + b1*x1 + b2*x2 + b1*b2*x1*x2 の方がよい可能性があるためです。 y = b0 + b1*x1 + b2*x2 より null モデル。

どうもありがとう!

マリー

4

3 に答える 3

5

ブライアンは、指定した制約付きモデルに適合する方法を提供していますが、制約なしモデルが制約付きモデルよりも適合するかどうかに関心がある場合は、デルタ法を使用してその仮説をテストします。

# Let's make some fake data where the constrained model is true
n <- 100
b0 <- 2
b1 <- .2
b2 <- -1.3
b3 <- b1 * b2
sigma <- 1

x1 <- rnorm(n)
# make x1 and x2 correlated for giggles
x2 <- x1 + rnorm(n) 
# Generate data according to the model
y <- b0 + b1*x1 + b2*x2 + b3*x1*x2 + rnorm(n, 0, sigma)

# Fit full model y = b0 + b1*x1 + b2*x3 + b3*x1*x2 + error
o <- lm(y ~ x1 + x2 + x1:x2)

# If we want to do a hypothesis test of Ho: b3 = b1*b2
# this is the same as Ho: b3 - b1*b2 = 0
library(msm)
# Get estimate of the difference specified in the null
est <- unname(coef(o)["x1:x2"] - coef(o)["x1"] * coef(o)["x2"])
# Use the delta method to get a standard error for
# this difference
standerr <- deltamethod(~ x4 - x3*x2, coef(o), vcov(o))

# Calculate a test statistic.  We're relying on asymptotic
# arguments here so hopefully we have a decent sample size
z <- est/standerr
# Calculate p-value
pval <- 2 * pnorm(-abs(z))
pval

このブログ投稿では、デルタ メソッドの用途と R での使用方法について説明します。

ブライアンの答えを拡張すると、完全なモデルを制約付きモデルと比較することで、代わりにこれを行うことができます-ただし、モデルを簡単に比較できるようにするには、nls を使用して完全なモデルに適合させる必要があります。

o2 <- nls(y ~ b0 + b1*x1 + b2*x2 + b1*b2*x1*x2, start=list(b0=0, b1=1, b2=1))
o3 <- nls(y ~ b0 + b1*x1 + b2*x2 + b3*x1*x2, start = list(b0 = 0, b1 = 1, b2 = 1, b3 = 1))
anova(o2, o3)
于 2013-10-11T19:21:24.737 に答える
1

あなたが求めていることを実行する方法はありませんしlm、それを実行できる理由もありません。実行lmして、係数の推定値を取得します。係数を推定したくない場合は、モデルに予測子を含めないでください。coef必要な係数を抽出し、後で乗算するために使用できます。

相互作用を除外すると別のモデルになり、別の b1 と b2 が生成されることに注意してください。または、そのままI(x1 * x2)にして係数を使用しないこともできます。

これを行う理由については、制約付きモデルが実際に単純な加法的モデルよりも適切に適合するという先験的な正当化はありません。より自由なパラメーターを持つことは、必然的にモデルの適合性が向上することを意味しますが、それを追加していないのは、現実の世界では適合性を悪化させる可能性のある制約を追加したためです。その場合、相互作用を含むモデルと比較するためのより良い「ベースライン」と考えていただけますか?

于 2013-10-11T12:52:20.780 に答える