重みとオフセットは、ポアソン回帰で同様の結果をもたらすことができますか?


8

では、「一般化線形モデルにA実施者のガイド」のパラグラフ1.83でそれがことが述べられています。

「ポアソン乗法GLMの特定のケースでは、エクスポージャーの対数に等しいオフセット項を使用してクレームカウントをモデリングすると、以前の重みが各観測のエクスポージャーと等しくなるように設定されたクレーム頻度のモデリングと同じ結果が生成されたことが示されます。 」

私はこの結果についてこれ以上の参考文献を見つけることができなかったので、ステートメントが正しいことの証拠を見つけることができなかったいくつかの経験的テストを行いました。この結果が正しい/間違っている理由について誰かが洞察を提供できますか?

参考までに、私は次のRコードを使用して仮説をテストしました。この仮説では、上記の2つのケースで同様の結果を得ることができませんでした。

n=1000
m=10

# Generate random data
X = matrix(data = rnorm(n*m)+1, ncol = m, nrow = n)

intercept = 2
coefs = runif(m)
offset = runif(n)
## DGP: exp of Intercept + linear combination X variables + log(offset)
mu = exp(intercept + X%*%coefs + log(offset))
y = rpois(n=n, lambda=mu)

df = data.frame('y'=y, 'X'=X, 'offset' = offset)
formula = paste("y ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))

#First model using log(offset) as offset
fit1  = glm(formula, family = "poisson", df, offset = log(offset))
#Second model using offset as weights for individual observations
fit2 = glm(formula, family = "poisson", df, weights = offset) 
#Third model using poisson model on y/offset as reference
dfNew = df
dfNew$y = dfNew$y/offset
fit3 = glm(formula, family = "poisson", dfNew)

#Combine coefficients with the true coefficients
rbind(fit1$coefficients, fit2$coefficients, fit3$coefficients, c(intercept,coefs))

このコードを実行した結果の係数の推定値を以下に示します。

 >  
    (Intercept)       X.1       X.2       X.3        X.4       X.5       X.6
[1,]    1.998277 0.2923091 0.4586666 0.1802960 0.11688860 0.7997154 0.4786655
[2,]    1.588620 0.2708272 0.4540180 0.1901753 0.07284985 0.7928951 0.5100480
[3,]    1.983903 0.2942196 0.4593369 0.1782187 0.11846876 0.8018315 0.4807802
[4,]    2.000000 0.2909240 0.4576965 0.1807591 0.11658183 0.8005451 0.4780123
              X.7       X.8       X.9      X.10
[1,]  0.005772078 0.9154808 0.9078758 0.3512824
[2,] -0.003705015 0.9117014 0.9063845 0.4155601
[3,]  0.007595660 0.9181014 0.9076908 0.3505173
[4,]  0.005881960 0.9150350 0.9084375 0.3511749
> 

そして、係数が同一ではないことがわかります。


1
rm(list=ls() )ここに投稿するRコードには実際に含めないでください。それは誰かがそれを実行していることに驚き、彼らをあなたに怒らせます。削除しました。また、コードを実行した結果を含めるように編集しました。元々これを行っていた場合、コードを自分で実行する読者はほとんどいないため、おそらくsom応答が速くなったでしょう。
kjetil b halvorsen 2017

1
@kjetilbhalvorsenフィードバックをありがとう、将来的に行います。
BDP1 2017

@ BDP1現状では、Rコードは参照している主張をテストしていません。fit3の加重項を追加し、質問に補遺を直接追加することをお勧めします。
aivanov

回答:


7

(Rコードを使用して、「poisson」を「quasipoisson」に置き換えることで、生成されるすべての警告を回避できます。他のインポートは変更されません。以下の(*)を参照してください)。ログリンクは乗法モデルと考えることができるので、リファレンスでは「乗法glm」という用語を使用しますが、これはログリンク付きのglmを意味すると思います。あなた自身の例は、少なくとも私たちが解釈したように、主張が偽であることを示しています(推定されたパラメーターが等しくないため)。著者を書いて、彼らが何を意味するのか尋ねることができます。以下では、この主張が誤っている理由を論じます。

λiωiηiηi+log(ωi)

f(yi)=eλiλiyi/yi!
=iωieηi+iyiηi+iyilogωiilogyi!
w=iωieηi+iyiωiηiiωilogyi!

(*)Rのglm関数のヘルプからのメモ:

「NULL」以外の「重み」は、異なる観測値に異なる分散があることを示すために使用できます(「重み」の値は分散に反比例します)。または同等に、「重み」の要素が正の整数w_iである場合、各応答y_iはw_i単位重み観測の平均です。二項GLMの場合、応答が成功の割合である場合、試行数を与えるために事前重みが使用されます。ポアソンGLMに使用されることはめったにありません。

ϕ=1ϕ

ここで与えられた答え関連があるかもしれません: ポアソンレート回帰は、対応するオフセット項を持つポアソン回帰とどのように等しいのですか? とても面白いです


答えてくれてありがとう。可能性の寄与が明らかになると、多くのことが明らかになります。あなたの答えに応じてさらに検索したところ、次の質問が見つかりました:stats.stackexchange.com/questions/66791/…元の応答をオフセットで割り、オフセット変数を重みとして設定すると、同様の結果は、ログ(オフセット)が1の一定の係数を有する線形予測に入るベースラインモデルとして得ることができる
BDP1

(yi/wi)!

少なくとも、提供されたRスクリプトの実験では、この主張は正しいと思われます。これは、fit3 = glm(...)行にweights = offset引数を追加することで簡単に確認できます
BDP1

ここであなたの言っていることが理解できません。実験が裏付けられていると思われる場合は、その変更をOPの実験に編集して、主張が裏付けられていると思う理由を説明してください。私はそれが真実ではない理由を説明しようとしましたが、私の議論の何が問題になっていますか?
kjetil b halvorsen 2017

1
Practioner's Guideからの引用は実際には正しく、OPによって正しく実装されていないだけです。これは、ここの別の回答で、私stats.stackexchange.com/questions/430001およびコークスstats.stackexchange.com/questions/264071によって、アランチョークによって指摘されています(ただし、正しい結論は、その答え)。
ゴードンスミス

4

上記のコメントを追加しないで申し訳ありませんが、十分な担当者がいません。

元の主張-少し修正された-は事実上正しいです。

次の2つのモデルは、ログリンクを含むpoisson glmを使用して、Rでまったく同じ答えを出します。

  • モデルy、log(offset)であるオフセットを使用
  • モデルy /オフセット、オフセットに等しい重みを使用

元のコードを調整すると、わずかに同じ答えが表示されます。

n=1000
m=10

# Generate random data
X = matrix(data = rnorm(n*m)+1, ncol = m, nrow = n)

intercept = 2
coefs = runif(m)
offset = runif(n)
## DGP: exp of Intercept + linear combination X variables + log(offset)
mu = exp(intercept + X%*%coefs + log(offset))
y = rpois(n=n, lambda=mu)

df = data.frame('y' = y,
                'y_over_offset' = y/offset,
                'X' = X,
                'offset' = offset)

formula_offset = paste("y ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))
formula_weights = paste("y_over_offset ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))

#First model using log(offset) as offset
fit1  = glm(formula_offset, family = "poisson", df, offset = log(offset))
#Second model using offset as weights for individual observations
fit2 = glm(formula_weights, family = "poisson", df, weights = offset) 


#Combine coefficients with the true coefficients
rbind(fit1$coefficients, fit2$coefficients, c(intercept,coefs))

うまくいけば、それは同じ答えを与えるはずです。

2つのモデルが統計的に同等であることを示すことは可能です(これを示すCASペーパーがどこかにあります-時間がある場合はリンクを投稿します)。

ちなみに、ペナルティ付き回帰を行っている場合、モデルを定義する2つの異なる方法の逸脱をglmnetやH2oなどの異なるパッケージが測定する方法は、異なる結果をもたらす可能性があります。


1
簡単な質問を見ると、fit2ではAICがなく、2つの近似の間のプロットはわずかに異なるplot(fit1);であることがわかります。plot(fit2)-これがなぜ起こるのかも知っていますか?]
チャールフランソワマレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.