2016-04-26 17 views
0

私は線形回帰から変換された変数の標準誤差を計算したい、つまり2つの変数を除算し、この変数から標準誤差を得る。線形回帰における変換された変数の標準誤差の導出

msmパッケージのdeltamethod機能を使用しますが、正確な標準エラーが発生しません。例えば

:データの

シミュレーション:

set.seed(123) 
nobs = 1000 
data <- data.table(
    x1 = rnorm(nobs), 
    x2 = rnorm(nobs), 
    x3 = rnorm(nobs), 
    x4 = rnorm(nobs), 
    y = rnorm(nobs)) 

線形回帰:

reg2 <- lm(y~x1+x2+x3+x4, data=data) 

はCOEFとvcovを取得します(ここで私はmissingsを取り除く必要があり、いくつかのように私の実際のデータの係数はNAであり、ループ内で多くの回帰を計算します)

vcov_reg <- vcov(reg2) 

coef_reg <- coef(reg2) 
coef_reg <- na.omit(coef_reg) 
coef_reg <- as.numeric(coef_reg) 

Deltamethod、X3で割った変数X1のために(私はMSMパッケージによるとX2とX4を使用する必要があります意味する):

deltamethod(~ x2/x4, coef_reg, vcov_reg) 

これは私に変換変数の標準誤差を与える(X1/X3) 3.21であり、この回帰からのすべての標準誤差は約0.03である。

どのようなアイデアの理由/何が間違っていますか? それを計算するための他の提案も歓迎します。

+1

答えはどうなっていると思いますか? – MrFlick

答えて

1

結果に間違いはありません。あなたの例では、データの中心が0になっているので、大きな分散/標準誤差で終わるデータで割ると驚くべきではありません。

x3の推定係数は-0.017408626なので、標準誤差約0.03の場合、この係数のCIは0になります。これで分けていきます。うまくいけば、標準エラーが爆発的に見える理由について、あなたにいくらかの直感を与えるでしょう。これが本当に問題の一部である証拠については、代わりにx1/x2を考慮する。

分母の推定係数は、この場合に大きいので、(0.09)

はるかに小さいですが、本当にあなたのコードと間違って何もありません

> deltamethod(~ x2/x3, coef_reg, vcov_reg) 
[1] 0.3752063 

。あなたの直感は間違っていました。あなたが望むものを見積もる別の方法は、ブートストラップするか、ベイジアン回帰を使用して、変換の事後分布を見ることです。

関連する問題