No.09119 y=x^3の関係をGLMで解析  【RとGLMで悶々】 2009/02/04(Wed) 23:54

R2.7.0を用いて,GLMについて勉強中です。周囲にGLMに詳しい人がおらず,インターネットで検索を散々やったの ですが,よくわからなかったので質問させていただきました。ある生物の「全長(x)」と「体重(y)」の間には一般的にy=x^3の関係があります。この 生物の全長に対する体重が,複数の場所間で異なるか調べたいと思っています。場所をカテゴリーデータでzとして,以下の2つの解析を行いました。1は生の データのまま,ガンマ分布を想定したもので,2は共分散分析を意図したものです。3は思いつきです。どれが適切でしょうか。あるいは間違いがありましたら ご教授をお願いいたします。
1. glm(y~x+z, family=Gamma(log))
2. glm(log(y)~log(x)+z, family=gaussian)
3. glm(y~x^3+z, family=gaussian)
結果は以下の通りです。
1: Null deviance: 767.183 on 450 degrees of freedom
Residual deviance: 57.439 on 443 degrees of freedom
AIC: -89.959
2: Null deviance: 1211.4117 on 450 degrees of freedom
Residual deviance: 7.5217 on 443 degrees of freedom
AIC: -548.37
3: Null deviance: 750.16 on 450 degrees of freedom
Residual deviance: 82.60 on 443 degrees of freedom
AIC: 532.33

この結果から,2は過分散のため1を採択するのがよいと考えましたがいかがでしょうか。また,1も2もAICが負の値ですが,おかしくないのでしょうか。勉強不足で申し訳ありません。よろしくお願い申し上げます。

No.09121 訂正 y=ax^3の関係をGLMで解析  【RとGLMで悶々】 2009/02/05(Thu) 08:19

すみません,y=ax^3(aは定数)でした。

No.09125 Re: y=x^3の関係をGLMで解析  【青木繁伸】 2009/02/05(Thu) 10:02

y = ax^3 は,単なる多項式回帰ですよね。glm をやるまでもないでしょう。
y = ax^3+bz で,z がダミー変数でも同じ。

ついでですが,

glm(y~x^3+z, family=gaussian)



glm(y~I(x^3)+z, family=gaussian)

は別物だというのは,了解済みですか?

No.09129 Re: y=ax^3の関係をGLMで解析  【RとGLMで悶々】 2009/02/05(Thu) 13:49

青木先生,ご教示いただきありがとうございます。最後に示していただいた二つについては存じ上げませんでした。差し支えなければ後学のためにどのような場面で使い分けるのか教えていただければ幸いです。

質問の説明不足でしたので,追加で質問させて下さい。
Q1 体重と全長の3乗が比例関係であっても,y = ax^3+bz で回帰してよいのでしょうか。
Q2  体重以外の項目(ある体の一部分の重さあるいは長さ)で,全長とはアロメトリーの関係にありますが,成長によって発達してくるために必ずしも全長の3乗 に比例しない場合があります(例えば y=ax^1.5)。この項目を場所間で比較するときには,最初の質問で挙げた2つの方法(ガンマ分布を仮定した生データでのGLM,対数変換したデータ でのGLM)が良いと思ったのですが,どちらも不適切でしょうか。

たびたび質問して申し訳ありませんが,ご教授のほどよろしくお願いいたします。

No.09130 Re: y=x^3の関係をGLMで解析  【青木繁伸】 2009/02/05(Thu) 14:48

> 差し支えなければ後学のためにどのような場面で使い分けるのか教えていただければ幸いです。

? formula 及び,? I で詳細な説明が得られます

> Q1 体重と全長の3乗が比例関係であっても,y = ax^3+bz で回帰してよいのでしょうか。

(x^3) を前もって計算しておいて,例えばそれを w に付値しておけば,y = ax^3+bz は,y = aw+bz と同じでしょう?

> Q2 体重以外の項目(ある体の一部分の重さあるいは長さ)で,全長とはアロメトリーの関係にありますが,成長によって発達してくるために必ずしも全長の3乗に比例しない場合があります(例えば y=ax^1.5)

私は glm で family=Gamma(log) とすることのメリットがわかりません(評価する能力がありません)
xの3乗とは限らないということなら,y = ax^b+cz として,何乗になるかも求めればよいのではないかとも思います
なお,すでにご存じとは思いますが,北大のkuboさんのページなども役に立つのではないかと思います。
http://hosho.ees.hokudai.ac.jp/~kubo/ce/FrontPage.html

No.09131 ありがとうございました  【RとGLMで悶々】 2009/02/05(Thu) 15:05

青木先生,貴重なご回答ありがとうございました。何乗になるかも求めることができる,という発想がありませんでし た。やってみます。基本的なことが理解できていないことを痛感しました。Rのヘルプをちゃんと勉強するようにいたします。北大の久保先生のページも一通り 拝見しましたが,理解不足でしたので再勉強したいと思います。このたびはありがとうございました。

No.09132 Re: y=x^3の関係をGLMで解析  【青木繁伸】 2009/02/05(Thu) 15:51

glm(y~x, d, family=Gamma(log)) と lm(y~I(x^3), d)
の比較をしてみました。glm(y~x, d, family=Gamma(log)) が,実際は何をしているか,ちょっと調べないとわかりませんが。
set.seed(1234)
x <- rnorm(100, mean=60, sd=10)
y <- jitter(x^3/50^3, amount=0.2)
d <- data.frame(x=x, y=y)
ans.lm <- lm(y~I(x^3), d)
summary(ans.lm)
plot(y~x)
x2 <- seq(min(d$x), max(d$x), length=1000)
d2 <- data.frame(x=x2)
y2 <- predict(ans.lm, newdata=d2)
lines(x2, y2, col="red")
points(fitted.values(ans.lm)~d$x, pch=19, cex=0.4, col="red")
strings <- capture.output(ans.lm)
text(34, seq(4.9, 2.9, by=-0.18)[1:7], strings, pos=4)
#
ans.glm <- glm(y~x, d, family=Gamma(log))
summary(ans.glm)
plot(y~x)
x2 <- seq(min(d$x), max(d$x), length=1000)
d2 <- data.frame(x=x2)
y2 <- predict(ans.glm, newdata=d2)
lines(x2, exp(y2), col="blue")
points(fitted.values(ans.glm)~d$x, pch=19, cex=0.4, col="blue")
strings <- capture.output(ans.glm)
text(34, seq(4.9, 2.9, by=-0.18)[1:10], strings, pos=4)
図をクリックすると,原寸で表示します


No.09133 ありがとうございます  【RとGLMで悶々】 2009/02/05(Thu) 16:38

青木先生,比較までしていただいてありがとうございました。図を見比べると,やはり lm(y~I(x^3), d) の方がよく当てはまっているようです。大変勉強になりました。ありがとうございました。

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