0

線形回帰から変換された変数の標準誤差を計算したいと思います。つまり、2 つの変数を除算し、この変数から標準誤差を取得します。

deltamethodパッケージの関数を使用していmsmますが、正確な標準誤差を取得できません。

例えば:

データのシミュレーション:

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 を取得します (ここでは、実際のデータの一部の係数が NA であり、ループで多くの回帰を計算するため、欠落を取り除く必要があります)

vcov_reg <- vcov(reg2)

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

変数 x1 を x3 で割った Deltamethod (つまり、msm パッケージに従って x2 と x4 を使用する必要があります):

deltamethod(~ x2/x4, coef_reg, vcov_reg)

これにより、変換された変数 (x1/x3) の標準誤差は 3.21 になりますが、この回帰によるすべての標準誤差は約 0.03 です。

ここでなぜ/何が間違っているのですか?それを計算するための他の提案も大歓迎です。

4

1 に答える 1

1

結果に問題はありません。あなたの例では、データは0を中心にしているため、データで割ると大きな分散/標準誤差になることは驚くべきことではありません。

x3 の推定係数は -0.017408626 であるため、約 0.03 の標準誤差で、この係数の CI は 0 を超えることに注意してください。うまくいけば、標準誤差が爆発するように見える理由についての直感が得られることを願っています. これが実際に問題の一部であることを示すいくつかの証拠については、代わりに x1/x2 を検討してください。

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

この場合、分母の推定係数が大きいため (0.09)、これははるかに小さくなります。

しかし、実際にはコードに問題はありません。あなたの直感が間違っていただけです。必要なものを推定する別の方法は、ブートストラップするか、ベイジアン回帰を使用して変換の事後分布を調べることです。

于 2016-04-26T19:41:53.263 に答える