制限付き線形回帰モデルを推定しています
lm(TC~Q+PL+PK+PF)
線形制限の下では、
PL+PK+PF
和の係数は 1 になります。回帰係数と標準誤差の両方が必要です。Rでこれを達成するにはどうすればよいですか?
制限付き線形回帰モデルを推定しています
lm(TC~Q+PL+PK+PF)
線形制限の下では、
PL+PK+PF
和の係数は 1 になります。回帰係数と標準誤差の両方が必要です。Rでこれを達成するにはどうすればよいですか?
推定値の合計が1になる必要があるという唯一の制約がある場合は、モデルを書き直すことで、これをかなり簡単に構築できます。3つの予測子X1、X2、X3があり、モデルを近似するとします。
y = B0 + B1*X1 + B2*X2 + B3*X3 + error
次に、B1 + B2 + B3 = 1という制限がある場合、B3=1-B1-B2と書き換えることができることに注意してください。その場合、私たちのモデルは
y = B0 + B1*X1 + B2*X2 + (1 - B1 - B2)*X3 + error
= B0 + B1*(X1 - X3) + B2*(X2 - X3) + X3 + error
= B0 + B1*P1 + B2*P2 + X3 + error
ここで、2つの新しい変数P1=X1-X3およびP2=X2-X3を定義しました。
したがって、そのモデルに適合できる場合は、ビジネスを行っています。変数P1の推定パラメーターはB1の推定値になり、変数P2の推定パラメーターはB2の推定値になることに注意してください。B3の推定値を直接取得することはありませんが、B3はB1とB2の関数にすぎないため、問題ありません。
それでは、いくつかのデータを生成してモデルを適合させましょう...
# Generate fake data and fix some parameters
set.seed(123412)
n <- 100
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)
b0 <- 2
b1 <- .2
b2 <- .5
b3 <- 1 - b1 - b2 # so that b1 + b2 + b3 = 1
e <- rnorm(n)
y <- b0 + b1*x1 + b2*x2 + b3*x3 + e
p1 <- x1 - x3
p2 <- x2 - x3
o <- lm(y ~ offset(x3) + p1 + p2)
これで、パラメータの推定値を簡単に取得できます
b1hat <- coef(o)[2]
b2hat <- coef(o)[3]
b3hat <- 1 - b1hat - b2hat
標準誤差が必要な場合は、要約の出力から最初の2つのパラメーターのSEを取得できます(またはの出力の対角線の平方根を取得することによりvcov(o)
)
# Get standard errors for B1 and B2
summary(o)
sqrt(diag(vcov(o)))
# Get a standard error for B3 - which is just
# a linear combination of B1 and B2
D <- c(0, -1, -1)
b3hat.se <- sqrt( t(D) %*% vcov(o) %*% D)