結果がカウント変数である回帰の場合、どの診断プロット(およびおそらく正式なテスト)が最も有益だと思いますか?
特に、ポアソンモデルと負の二項モデル、およびそれぞれのゼロ膨張モデルとハードルモデルに興味があります。私が見つけた情報源のほとんどは、これらのプロットがどのように「見える」べきかについての議論なしに、単純に残差対適合値をプロットします。
知恵と参考文献は大歓迎です。関連する場合、なぜこれを尋ねているのかについてのバックストーリーは、私の別の質問です。
関連する議論:
結果がカウント変数である回帰の場合、どの診断プロット(およびおそらく正式なテスト)が最も有益だと思いますか?
特に、ポアソンモデルと負の二項モデル、およびそれぞれのゼロ膨張モデルとハードルモデルに興味があります。私が見つけた情報源のほとんどは、これらのプロットがどのように「見える」べきかについての議論なしに、単純に残差対適合値をプロットします。
知恵と参考文献は大歓迎です。関連する場合、なぜこれを尋ねているのかについてのバックストーリーは、私の別の質問です。
関連する議論:
回答:
これが私が普段やりたいことです(例として、私は、学校にいなかった生徒の日々の過剰に分散した非常に簡単にモデル化されていないクインデータを使用しますMASS
):
観測周波数と近似周波数(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")
通常の適合度の尺度を調べます(尤度比統計とヌルモデルなど):
mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
summary(mod1)
anova(mod1, test="Chisq")
正式なテスト統計を確認するか、この統計を見て、過剰/過少分散を確認してくださいresidual deviance/df
(例:この回答を参照)。ここでは明らかに過分散しています。
library(AER)
deviance(mod1)/mod1$df.residual
dispersiontest(mod1)
チェック影響力とレバレッジの点で、例えば、influencePlot
内car
パッケージ。もちろん、ポアソンは悪いモデルであるため、ここでは多くのポイントが非常に影響力があります。
library(car)
influencePlot(mod1)
カウントデータモデルとそのゼロインフレーション /ハードル対応物をフィッティングしてゼロインフレーションをチェックし、それらを比較します(通常はAICと)。ここで、ゼロ膨張モデルは、単純なポアソンよりもうまく適合します(これもおそらく過分散による)。
library(pscl)
mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
AIC(mod1, mod2)
y軸に残差(生、逸脱、またはスケーリング)とx軸に(ログ)予測値(または線形予測子)をプロットします。ここで、いくつかの非常に大きな残差と、標準からの逸脱残差のかなりの逸脱が見られます(ポアソンに反して。
res <- residuals(mod1, type="deviance")
plot(log(predict(mod1)), res)
abline(h=0, lty=2)
qqnorm(res)
qqline(res)
興味がある場合、順序付けられた絶対残差対期待される正常値Atkinson(1981)をプロットすることにより、残差の半正規確率プロットをプロットします。特別な機能は、シミュレートされた/ブートストラップされた信頼区間を使用して、参照「ライン」とエンベロープをシミュレートすることです(ただし表示されません)。
library(faraway)
halfnorm(residuals(mod1))
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ポアソン、べき法則など)で機能します。
標準の診断プロットを使用するが、どのように見えるかを知りたいというアプローチについては、私は論文が好きです:
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.test
RのTeachingDemosパッケージの関数は、これをテストとして実装するのに役立ちます。
これは古い質問ですが、私の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プロットを提供します。ここで逸脱残差の問題を示す例を作成しました。