No.09943 ネストと交互作用  【Sai】 2009/05/26(Tue) 22:56

いつもお世話になっております。ネストと交互作用の関係について質問させてください。質問は,「ネストを用いるのか交互作用を用いるのかでモデルは違うはずなのに,説明される分散が何故一緒なのか」,という質問です。以下にRによる例を示します。
set.seed(123)
###それぞれのカテゴリー内に含まれる数を設定###
each_number <- 50
category <- 1:4
category_rep <- rep(category, each=each_number)

###値の分散を決定###
variance <- 10
error <- rnorm(4*each_number, 0, variance)

###各カテゴリーの平均値###
each_mean <- c(0, 30, 100, 300)
each_mean_rep <- rep(each_mean, each = each_number)

###反復回数の作成###
times = seq(1, each_number, each = max(category))

###傾きの作成###
b <- 2
times2 <- seq(-each_number/2,each_number/2,len=each_number)
times3 <- rep(times2, 4)
###値の作成###

val <- b*times3 + each_mean_rep + error
D <- data.frame(val=val, category = category_rep, times=times)
D$category <- as.factor(D$category)

###データ概観###
plot(D$times, D$val, col=D$category)
こ のDというデータセットを用いて解析例を示します。categoryは個体を表し(合計4個体分のデータ),timesは各個体から50回づつ反復して データを取ったと解釈してください。すると,この場合,timesはcategoryにネストされていると言えると思います。ですからcategoryと timesは独立ではないはずです。

ですから,モデルにネストを表す項を入れて解析しました。
res_glm_nest <- glm(val ~ category/times, data=D)
summary(res_glm_nest)
beta0 <- coef(res_glm_nest)[2:4]+coef(res_glm_nest)["(Intercept)"]
beta0 <- c(coef(res_glm_nest)["(Intercept)"], beta0)
for (i in 1 : 4) {
points(beta0[i] + #カテゴリー変数と切片
coef(res_glm_nest)[i + 4] * seq(1,50), #傾き
type="l", col="red")
}
しかし,上記のsummaryでもわかるように,出力結果に交互作用項のような表記(A:Bのような)が見受けられます。そこで交互作用だとした場合も解析してみました。
res_test_nest <- glm(val ~ category*times, data=D)
summary(res_test_nest)
beta02 <- coef(res_test_nest)[2:4]+coef(res_glm_nest)["(Intercept)"]
beta02 <- c(coef(res_test_nest)["(Intercept)"], beta02)
alpha <- coef(res_test_nest)[6:8]+coef(res_test_nest)["times"]
alpha <- c(coef(res_test_nest)["times"], alpha)
for (i in 1 : 4) {
points(beta02[i] +
alpha[i] * seq(1,50),
type="l", col="blue")
}
すると,全く同じ解析結果を示し,AICも同じとなります。
ということはネストと交互作用は同じ計算をしているのか?と思ったのですが,分散共分散行列は異なるようでvifの結果も違うようです。
library(DAAG)
vif(res_glm_nest)
vif(res_test_nest)
ネストと交互作用がどういった関係にあるのか調べてみたところ,以下のサイトを見つけました。
http://androids.happy.nu/doc/anova-note
「分 割区画デザイン」という章では,交互作用とネストが関係ありそうなことを書いてあります。ですが,全く解析結果が一緒になってしまうことにどうも合点がい きません。同じ概念に違う名前が付いているとは思えないですし。結果が一緒になる場合もある,ということでしょうか?

何か計算ミス,思い違いをしているのかもしれません。どなたか,分かる方がいましたが,ご教授いただけると幸いです。どうぞよろしくお願い致します。

No.09945 Re: ネストと交互作用  【マスオ】 2009/05/27(Wed) 00:43

times が category 内にネストされた効果は,Rの表記では
times %in% category
これは
times:category
とも書けて,両者の交互作用そのものです(timesは categoryに含まれているわけですから).

val ~ category / times
val ~ category + times %in% category
val ~ category + category:times
は表記が異なるだけで,皆同じ.

一方,フルモデル
val ~ category * times は,
val ~ category + times + category:times

ネストされた効果と交互作用の関係は計画行列を見ればわかりやすいかと思います.
SASの解説ですが参考になるでしょうか(Rとモデル式の表記が似て否なのでかえって混乱するかもしれませんが).
http://support.sas.com/onlinedoc/913/getDoc/en/statug.hlp/glm_sect29.htm

No.09947 Re: ネストと交互作用  【Sai】 2009/05/27(Wed) 11:10

マスオさんありがとうございます。
理解しました!つまり,ネストの項は主効果を含んでいるのですね。

category とtimesは独立ではないため,category+timesとそれぞれ独立変数として扱うのは微妙。そのため,category:timesとすれ ば,交互作用の項になるため新たな独立変数を生成できる。その際,timesはcategoryごとに変化するとデザインしたため,timesの主効果は 存在しない(これがネストの概念)。
それで,
val ~ category + category:timesとなるわけですか。なるほど。

一方,今回はフルモデルも同じ結果となりました。これは,timesという主効果を入れてもなお,category:timesの交互作用項が説明する分散があるのか,ということを見ていたわけです。
ネ ストしたモデルと同じ結果になったのはむしろ当然で,説明される分散は一緒で,その分散を,交互作用のみで説明するのか,主効果と交互作用に分けて説明す るのか,という違いですね。ということは解析者の目的に合わせてネストモデルと交互作用モデルの使い分けを行う必要がありそうですね。

参考URL,とてもわかりやすかったです。私の提示したモデルはそれぞれ,

category/times→Continuous-Nesting-Class Effects
caterogy*times→Continuous-by-Class Effects

ということですね。
今までネストの概念を交互作用とバラバラに考えていましたが,これで合点が行きました。つまり,最初の質問「何故モデルが違うのに説明される分散は一緒なのか」の答えは,「説明される分散は一緒でよい」のですね。どうもありがとうございました。

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