No.06585 対数線形モデルについて  【TM】 2008/05/19(Mon) 19:23

現在対数線形モデルを勉強中ですが,恥ずかしながらあまり理解できず困っております。お知恵を拝借させて頂きたく,投稿させて下さい。

例として,「性別と知性の高低が選択に及ぼす影響」を検討するため,以下のデータを分析するとします。
  男  知性低 選択肢Aを選んだ人 9人 
         選択肢Bを選んだ人 20人
     知性高 選択肢Aを選んだ人 3人
         選択肢Bを選んだ人 20人
  女  知性低 選択肢Aを選んだ人 8人 
         選択肢Bを選んだ人 12人
     知性高 選択肢Aを選んだ人 11人
         選択肢Bを選んだ人 15人

性 別×知性×選択肢の階層対数線形モデルで分析した結果,最終的に,「選択肢」のみを含むモデルの適合度が高いことが分かりました(G^2=8.08 (df=6), p=.23)。 また偏連合を調べると性別×選択肢の交互作用も有意であり,性別が選択肢に影響していました(partial χ^2=4.18 (df=1), p<.05)。※ただし最終的モデルからはこの交互作用が落ちてしまっていますが・・・。

上と 同じデータを用いた,とある論文での対数線形モデルの結果記述は,「性別の主効果が有意であり(χ^2=4.37, p<.05),女性は男性に比べAの選択率が高い」というものでした。ここの「性別の主効果」が性別×選択肢を指すことは分かるのですが,自分の結 果と照らし合わせた時,このχ^2値がどうやって出てきたのかが分からず困っております。

私の分析法のシンタックスはこちらです。

HILOGLINEAR
性別(1 2) 知性(1 2) 選択肢(1 2) /METHOD=BACKWARD
/CRITERIA MAXSTEPS(10) P(.05) ITERATION(20) DELTA(.5)
/PRINT=FREQ RESID ASSOCIATION ESTIM
/DESIGN .

非常に恐縮ですが,問題点を指摘して頂けると幸いです。宜しくお願いします。

No.06596 Re: 対数線形モデルについて  【竹澤】 2008/05/21(Wed) 14:25

 以下のようなRプログラムを作りました。
function () 
{
xx <- matrix(rep(0,24), ncol=3)
xx[1,] <- c("m","l","a")
xx[2,] <- c("m","l","b")
xx[3,] <- c("m","h","a")
xx[4,] <- c("m","h","b")
xx[5,] <- c("f","l","a")
xx[6,] <- c("f","l","b")
xx[7,] <- c("f","h","a")
xx[8,] <- c("f","h","b")
wt <- c(9,20,3,20,8,12,11,15)
#
print("ポアソン分布を用いた回帰式。リンク関数は対数関数。")
data1 <- data.frame(x1=xx[,1],x2=xx[,2],x3=xx[,3], y=wt)
out1 <- glm(y~x1*x3+x2*x3+x1*x2, data=data1, family=poisson(link="log"))
out2 <- glm(y~x2*x3+x1*x2, data=data1, family=poisson(link="log"))
res1 <- residuals(out1, type="deviance")
res2 <- residuals(out2, type="deviance")
print("尤離度(逸脱度,deviance)の差")
print(sum(res2^2) - sum(res1^2))
#
res1a <- residuals(out1, type="pearson")
res2a <- residuals(out2, type="pearson")
print("カイ2乗値の差")
print(sum(res2a^2) - sum(res1a^2))
#
print("")
print("2項分布を用いた回帰式。リンク関数はロジスティック関数。")
ra <- NULL
ra[1] <- wt[1]/(wt[1]+wt[2])
ra[2] <- wt[3]/(wt[3]+wt[4])
ra[3] <- wt[5]/(wt[5]+wt[6])
ra[4] <- wt[7]/(wt[7]+wt[8])
#
wt2 <- NULL
wt2[1] <- wt[1]+wt[2]
wt2[2] <- wt[3]+wt[4]
wt2[3] <- wt[5]+wt[6]
wt2[4] <- wt[7]+wt[8]
#
xxa1 <- NULL
xxa1[1] <- xx[1,1]
xxa1[2] <- xx[3,1]
xxa1[3] <- xx[5,1]
xxa1[4] <- xx[7,1]
#
xxa2 <- NULL
xxa2[1] <- xx[1,2]
xxa2[2] <- xx[3,2]
xxa2[3] <- xx[5,2]
xxa2[4] <- xx[7,2]
#
data2 <- data.frame(x1=xxa1,x2=xxa2, y=ra)
out3 <- glm(y~x1+x2, data=data2, family=binomial, weights=wt2)
out4 <- glm(y~x2, data=data2, family=binomial, weights=wt2)
res3 <- residuals(out3, type="deviance")
res4 <- residuals(out4, type="deviance")
print("尤離度(逸脱度,deviance)の差")
print(sum(res4^2) - sum(res3^2))
#
qq3 <- fitted(out3)
qq4 <- fitted(out4)
#
res3a <- residuals(out3, type="response")/sqrt(qq3*(1-qq3))
res4a <- residuals(out4, type="response")/sqrt(qq4*(1-qq4))
#
print("カイ2乗値の差")
print(sum(res4a^2*wt2) - sum(res3a^2*wt2))
print("")
print("======================================================")
#
print("")
print("ポアソン分布を用いた回帰式。リンク関数は平方根関数。")
data1 <- data.frame(x1=xx[,1],x2=xx[,2],x3=xx[,3], y=wt)
out5 <- glm(y~x1*x3+x2*x3+x1*x2, data=data1, family=poisson(link="sqrt"))
out6 <- glm(y~x2*x3+x1*x2, data=data1, family=poisson(link="sqrt"))
res5 <- residuals(out5, type="deviance")
res6 <- residuals(out6, type="deviance")
print("尤離度(逸脱度,deviance)の差")
print(sum(res6^2) - sum(res5^2))
#
res5a <- residuals(out5, type="pearson")
res6a <- residuals(out6, type="pearson")
print("カイ2乗値の差")
print(sum(res6a^2) - sum(res5a^2))
}
 以下が結果です。
[1] "ポアソン分布を用いた回帰式。リンク関数は対数関数。"
[1] "尤離度(逸脱度,deviance)の差"
[1] 4.178997
[1] "カイ2乗値の差"
[1] 3.948403
[1] ""
[1] "2項分布を用いた回帰式。リンク関数はロジスティック関数。"
[1] "尤離度(逸脱度,deviance)の差"
[1] 4.178997
[1] "カイ2乗値の差"
[1] 3.948403
[1] ""
[1] "======================================================"
[1] ""
[1] "ポアソン分布を用いた回帰式。リンク関数は平方根関数。"
[1] "尤離度(逸脱度,deviance)の差"
[1] 4.498056
[1] "カイ2乗値の差"
[1] 4.379076
  この結果から考えると,4.18というのは,カイ2乗値の方ではなく尤離度の方ということになります。2項分布を仮定した場合も結果は同じです。しかし, 回帰式の形からすると2項分布を仮定したものの方が率直だと思います。4.37というのは,リンク関数として平方根関数を使ったときのカイ2乗値ではない でしょうか。こうした問題の場合,尤離度を使うかカイ2乗値を使うか,あるいはリンク関数としてどれを使うかによって結果が少しずつ違ってきます。しか し,その違いが大きくなければそれでよい,ということだと思います。

No.06597 Re: 対数線形モデルについて  【TM】 2008/05/22(Thu) 11:12

竹澤先生

お忙しいところ誠に有難うございました。Rのプログラムも紹介頂き大変助かりました(R も勉強中なので)。用いる関数の違いであり,根本的な間違いということではないようなので一応安心しましたが,どのような時にどの分布/関数を用いるか, まだまだ勉強する必要があるようです・・・。ちなみにSPSSでは分布/関数に関するコマンドは無いようです(?)。

他の分析に比べて,対数線形モデル分析の場合,結果を記述する際に用いる統計値が尤度比だったりχ二乗値だったり等,人それぞれであまり結果記述方法が統一されてないような気がします。故に対数線形モデルは余計難しく感じられます。

ともあれ,大変勉強になりました。改めて御礼申し上げます。

No.06598 Re: 対数線形モデルについて  【にゃんちゅう】 2008/05/22(Thu) 20:22

SPSS でも GENLOG を使えば,分布(多項ロジット,多項分布)の指定(/MODEL = MULTINOMIAL),GENLIN(一般化線型モデル)を使えば分布・関数を指定できます( DISTRIBUTION=MULTINOMIAL LINK=LOG など)。
 ほかにもオプションがいろいろあり,どう使うかはよくわからない。

No.06604 Re: 対数線形モデルについて  【TM】 2008/05/23(Fri) 20:13

にゃんちゅう先生

GENLOGは,HILOGLINEARでモデルの適合度を見た後にパラメーター推定値を出す時ぐらいしか用いず,GENLINにいたっては全く使ったこと無かったのですが,今確認したら,確かに仰る通り指定できるみたいです。誠に有難うございました。

● 「統計学関連なんでもあり」の過去ログ--- 041 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る