2008-12-14

ロジスティック回帰3

前回は、残差分析を行うといいつつ、予測値の信頼区間をもとめてしまいました。さて、今回は、前回の課題であった、残差分析を行います

まず、モデルの全体的な当てはまりは、次の式を用いて確認することが出来ます

(1) X^2 = Σ(観測度数 - 当てはめ値)^2 / 当てはめ値

(2) G^2 = 2Σ(観測度数)ln(観測度数 / 当てはめ値)

(1)は、普通のカイ二乗分析と同じです。式を見れば分かるとおり、(1)であらわされるカイ二乗統計量が小さければ小さい程、モデルがデータに良く当てはまってることが分かります。このときの自由度は、

カテゴリー数 - モデルのパラメータ数

で与えられます

(2)は、パラメータを計算する尤度比に基づく方法です。こちらも、カイ二乗分布に従います
ここで重要なことは、(1)も(2)も大標本下で、カイ二乗分布に従うということです。よって、前回計算したように、独立変数が、ほぼ連続変数の場合、この適合度検定は、不適切です。

と言うことで、今回は、独立変数を、カテゴリカルな変数に変換した上で、 モデルを再度当てはめます。その上で、個々のカテゴリーに対して、ピアソン残差を計算し、その結果が、(1)と一致することを確認します。

============================================================
まず最初に、忘却の彼方にあるデータ形式の確認

head(crab.data)
color spine width satell weight satell.flag width.cate
1 3 3 28.3 8 3050 1 28.25-29.25
2 4 3 22.5 0 1550 0 23.24
3 2 1 26.0 9 2300 1 25.25-26.25

そう、こんな感じでしたね。
さて、一番右端の変数ごとに、widthの平均値を取る

> aggregate(crab.data$width,list(y=crab.data$width.cate),mean)
y x
1 23.24 22.69286
2 23.25-24.25 23.84286
3 24.25-25.25 24.77500
4 25.25-26.25 25.83846
5 26.25-27.25 26.79091
6 27.25-28.25 27.73750
7 28.25-29.25 28.66667
8 29.25 30.40714

xが、カテゴリーの平均値です。これを、独立変数にします

NofRec NofSatell SampleRatio width.cate width.mean
23.24 14 5 0.3571429 23.24 22.69286
23.25-24.25 14 4 0.2857143 24.00 23.84286
24.25-25.25 28 17 0.6071429 25.00 24.77500
25.25-26.25 39 21 0.5384615 26.00 25.83846
26.25-27.25 22 15 0.6818182 27.00 26.79091
27.25-28.25 24 20 0.8333333 28.00 27.73750
28.25-29.25 18 15 0.8333333 29.00 28.66667
29.25 14 14 1.0000000 29.25 30.40714

最初のデータから、こんな感じのデータを再作成しておいて、
widht.meanを独立変数、SamplRatioを目的変数とするモデルを当てはめます。ただし、今回は、目的変数に確率を与えるので、ウ エイトにレコード数(=サンプル数)を、当てておきます。でないと、計算してくれません。変数をアタッチしておけば、後が楽ですね

> attach(crab.category)
> glm(SampleRatio~width.mean,weights=NofRec,binomial)

結果は、こんな感じ

Call: glm(formula = SampleRatio ~ width.mean, family = binomial, weights = NofRec)

Coefficients:
(Intercept) width.mean
-11.5330 0.4654

Degrees of Freedom: 7 Total (i.e. Null); 6 Residual
Null Deviance: 34.03
Residual Deviance: 5.956 AIC: 33.14

パラメーターも、前回と殆ど変わりません
良かったですね

さて、ここで、尤度比検定を確認しましょう
ここでは、β=0としたとき尤度比と、そうでない時の尤度比との差を計算することで、当てはまりのよさ、つまり逸脱度(deviance)が検討できます
まず、β=0としたとき尤度比が

Null Deviance: 34.03

です。ちゃんとNullと書いてあります
またβ≠0の時の逸脱度が

Residual Deviance: 5.956

です
つまり2つの差

Null Deviance - Residual Devian

こそが、βの効果と言うわけです
で、この差は、

34.03 - 5.956 = 28.074

は、2つのモデルの自由度の差(7-6=1)のカイ二乗分布に従います
とうぜん、婚だけ大きな数であれば、1%未満で、βは有意です
glmの計算結果を変数に入れておいて、anovaを実行すれば、
引き算するまでもなく、同じ結果を返してくれます

> anova(crab.category.result, test="Chisq")
Analysis of Deviance Table

Model: binomial, link: logit

Response: SampleRatio

Terms added sequentially (first to last)


Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 7 34.034
width.mean 1 28.078 6 5.956 1.165e-07


devianceが28.078で、ちゃんとあってますね
p値もとっても小さいのでOKです
さて、尤度比による全体の当てはまりが確認できました。
当てはまりの確認は、ピアソン残差でも計算できます
ピアソン残差とは、個別のデータに対して計算します

ei = (yi - niπi) / sqrt(ni*πi(1-πi))

そして、

x^2 = Σei^2

となります。
なんだか、わけの分からない式ですね
でも、しょうがないです。あきらめましょう
glmを当てはめたデータの右端に、予測確率のfittedを付けておきました

NofRec NofSatell fitted
23.24 14 5 0.2745370
23.25-24.25 14 4 0.3925719
24.25-25.25 28 17 0.4993264
25.25-26.25 39 21 0.6206342
26.25-27.25 22 15 0.7181918
27.25-28.25 24 20 0.7983565
28.25-29.25 18 15 0.8591791
29.25 14 14 0.9320432


このデータから、ピアソン残差を計算してみます
それが、こんな感じです

peason.resid <- (NofSatell-NofRec*fitted)/sqrt(NofRec*fitted*(1-fitted))

[1] 0.6925753 -0.8187713 1.1410233 -1.0575784 -0.3792288 0.4270668 -0.3152460 1.0103285

つづいて、二乗和を計算します

sum(peason.resid^2)
[1] 5.016797

この値が、式(1)と同じになるはずです
ということで、この値は、カイ二乗分布に従います
今回は、P=0.4位になって、当てはまりはオッケーです

長くなりましたが、こんな感じです。
なお、ピアソン残差に、てこ比を当てた値を標準化残差といいますが、テキストに式が載ってませんでした。なお、標準化残差は、正規分布に従うそうです。でも、今回は、無視ですわ。
AICは、そのうちって感じですかね。

次回は、多重ロジスティック回帰モデルにチャレンジします

=========================================================
カテゴリカルデータ解析入門
Alan Agresti
サイエンティスト社

のp.153~p.163あたりを挑戦

(感想)
(1) X^2 = Σ(観測度数 - 当てはめ値)^2 / 当てはめ値

式の値が合わなくて苦労した
結局、あわずじまい
でも、テキストが間違ってる気がする

というのも、(1)のX^2は、ピアソン残差の2乗和と一致する
実際、ピアソン残差は、x^2と一致した。
で、ピアソン残差の分母は、標本数に、2項分布の標準偏差をかけたものなのに、(1)式の分母は、単なる当てはめ値としか書いてない
だから、計算が合わなかった。

たぶん、(1)の分母は、ピアソン残差の平方根のことだと思う

0 件のコメント:

コメントを投稿