カウント回帰の診断プロット


88

結果がカウント変数である回帰の場合、どの診断プロット(およびおそらく正式なテスト)が最も有益だと思いますか?

特に、ポアソンモデルと負の二項モデル、およびそれぞれのゼロ膨張モデルとハードルモデルに興味があります。私が見つけた情報源のほとんどは、これらのプロットがどのように「見える」べきかについての議論なしに、単純に残差対適合値をプロットします。

知恵と参考文献は大歓迎です。関連する場合、なぜこれを尋ねているのかについてのバックストーリーは、私の別の質問です。

関連する議論:

回答:


101

これが私が普段やりたいことです(例として、私は、学校にいなかった生徒の日々の過剰に分散した非常に簡単にモデル化されていないクインデータを使用しますMASS):

  1. 観測周波数と近似周波数(Friendlyの第2章を参照)をプロットすることにより、元のカウントデータをテストおよびグラフ化します。これは、vcdパッケージのR大部分でサポートされています。たとえば、with goodfitおよびrootogram

    library(MASS)
    library(vcd)
    data(quine) 
    fit <- goodfit(quine$Days) 
    summary(fit) 
    rootogram(fit)

    または、どのカウントデータモデルが基になっているのかを特定するのに役立つOrdプロットを使用します(たとえば、ここで、勾配は正で、切片は正であり、負の二項分布を示します)。

    Ord_plot(quine$Days)

    または、XXXXXが選択の分布である「XXXXXXness」プロットを使用して、ポアソンのプロット(ポアソンに反する、また試してみてくださいtype="nbinom"):

    distplot(quine$Days, type="poisson")
  2. 通常の適合度の尺度を調べます(尤度比統計とヌルモデルなど):

    mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
    summary(mod1)
    anova(mod1, test="Chisq")
  3. 正式なテスト統計を確認するかこの統計を見て、過剰/過少分散を確認しくださいresidual deviance/df(例:この回答を参照)。ここでは明らかに過分散しています。

    library(AER)
    deviance(mod1)/mod1$df.residual
    dispersiontest(mod1)
  4. チェック影響力とレバレッジの点で、例えば、influencePlotcarパッケージ。もちろん、ポアソンは悪いモデルであるため、ここでは多くのポイントが非常に影響力があります。

    library(car)
    influencePlot(mod1)
  5. カウントデータモデルとそのゼロインフレーション /ハードル対応物をフィッティングしてゼロインフレーションをチェックし、それらを比較します(通常はAICと)。ここで、ゼロ膨張モデルは、単純なポアソンよりもうまく適合します(これもおそらく過分散による)。

    library(pscl)
    mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
    AIC(mod1, mod2)
  6. y軸に残差(生、逸脱、またはスケーリング)とx軸に(ログ)予測値(または線形予測子)をプロットします。ここで、いくつかの非常に大きな残差と、標準からの逸脱残差のかなりの逸脱が見られます(ポアソンに反して。

    res <- residuals(mod1, type="deviance")
    plot(log(predict(mod1)), res)
    abline(h=0, lty=2)
    qqnorm(res)
    qqline(res)
  7. 興味がある場合、順序付けられた絶対残差対期待される正常値Atkinson(1981)をプロットすることにより、残差の半正規確率プロットをプロットします。特別な機能は、シミュレートされた/ブートストラップされた信頼区間を使用して、参照「ライン」とエンベロープをシミュレートすることです(ただし表示されません)。

    library(faraway)
    halfnorm(residuals(mod1))
  8. ±

    plot(Days~Age, data=quine) 
    prs  <- predict(mod1, type="response", se.fit=TRUE)
    pris <- data.frame("pest"=prs[[1]], "lwr"=prs[[1]]-prs[[2]], "upr"=prs[[1]]+prs[[2]])
    points(pris$pest ~ quine$Age, col="red")
    points(pris$lwr  ~ quine$Age, col="pink", pch=19)
    points(pris$upr  ~ quine$Age, col="pink", pch=19)

これにより、分析に関する有用な情報の多くが得られ、ほとんどのステップはすべての標準カウントデータ分布(ポアソン、負の二項、COMポアソン、べき法則など)で機能します。


6
すばらしい徹底的な答え!また、ポアソンでシミュレートされたデータを使用してこれらの診断を実行し、プロットがどのように見えるかで目を訓練することも役に立ちました。
ハーフパス

プロットが何をするのか、もっと詳しく説明した方がいいのでしょうか、それとも大丈夫でしたか?
モモ

2
興味深い副注:NB分布は、GOFテスト、ルートグラム、Ordプロット、およびNB-nessプロットに基づいて、シミュレートされたNBデータにフィットすることはめったにないことがわかりました。例外は、ほぼ対称である非常に「飼いならされた」NBデータであるようです-高ミュー、高シータ。
ハーフパス

1
ええと、引数としてtype = "nbinomial"を使用しますか?例:fm <-glm.nb(Days〜。、data = quine); ダミー<-rnegbin(fitted(fm)、theta = 4.5)は正常に動作します。
モモ

@Momo、ありがとう-私はx = rnegbin(n = 1000、mu = 10、theta = 1); fit = goodfit(x、type = "nbinomial"); サマリー(適合)。theta = 4.5に設定すると適合度は向上しますが、それでもp <0.05であることが多く、ルートグラムはかなり悪く見える場合があります。あなたのシミュレーションでは、ダミーの各値が異なる平均パラメーター(fit(fm)の値)からシミュレートされましたよね?鉱山では、彼らはすべての10を意味している
ハーフパス

14

標準の診断プロットを使用するが、どのように見えるかを知りたいというアプローチについては、私は論文が好きです:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

そこで言及されているアプローチの1つは、対象となる仮定が真であるいくつかのシミュレーションデータセットを作成し、これらのシミュレーションデータセットの診断プロットを作成し、実際のデータの診断プロットも作成することです。これらのすべてのプロットを同時に画面に配置します(実際のデータに基づいてランダムに配置します)。これで、プロットがどのように見えるかを視覚的に参照でき、仮定が実際のデータに当てはまる場合、そのプロットは他のプロットとまったく同じように見えるはずです(実際のデータがどれであるかわからない場合、テストされている仮定は近いでしょうただし、実際のデータプロットが他のプロットと明らかに異なるように見える場合は、少なくとも1つの仮定が成り立たないことを意味します。vis.testRのTeachingDemosパッケージの関数は、これをテストとして実装するのに役立ちます。


6
上記のデータを使用したレコードの例:mod1 <-glm(Days〜Age + Sex、data = quine、family = "poisson"); IF(対話()){vis.test(残差(MOD1、タイプ= "応答")、vt.qqnorm、nrow = 5、をNcoI = 5、NPAGE = 3)}
半パス

13

これは古い質問ですが、私のDHARMa Rパッケージ(CRANから入手可能、こちらを参照)が、@ GregSnowによって提案されたものと同様のシミュレーションアプローチに基づいて、GLMおよびGLMMの標準化された残差を提供することを追加すると便利だと思いました。

パッケージの説明から:

DHARMaパッケージは、シミュレーションベースのアプローチを使用して、近似された一般化線形混合モデルから容易に解釈可能なスケーリングされた残差を作成します。現在サポートされているのは、「lme4」の「merMod」クラス(「lmerMod」、「glmerMod」)、「glm」(「MASS」の「negbin」を含むが、準分布を除く)、および「lm」モデルクラスです。あるいは、外部で作成されたシミュレーション、たとえば「JAGS」、「STAN」、「BUGS」などのベイジアンソフトウェアからの事後予測シミュレーションも処理できます。結果の残差は、0〜1の値に標準化され、線形回帰からの残差として直感的に解釈できます。このパッケージには、典型的なモデルの仕様不適合の問題に対する多くのプロットおよびテスト関数も用意されています。

@Momo-推奨事項6を更新することもできますが、これは誤解を招く恐れがあります。DHARMaビネットまたはここで説明されているように、ポアソンの下では通常、逸脱残差正常性は期待されていません。そしてqqnormプロットの直線異なるseingずれ残差(または任意の他の標準的な残留物)は全然一般ない心配でことです。DHARMaパッケージは、ポアソンまたは他のGLMファミリーからの偏差を診断するのに信頼できるqqプロットを提供します。ここで逸脱残差の問題を示す例を作成しました。


4

関数がありglm.diag.plots、パッケージにbootGLMSのための診断プロットを生成するためには、。それが何をする:

線形予測子に対するジャックナイフ逸脱残差のプロット、標準化された逸脱残差の標準スコアプロット、レバレッジ/(1-レバレッジ)に対するクック統計の近似プロット、およびクック統計のケースプロットを作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.