No.01882 AICがマイナスに・・・・  【t】 2006/12/13(Wed) 06:20

Rを使ってCHOWテストをする際にAICを計算させているのですが,
AICがマイナスに・・・・なってしまうのですがこれはどういうことなのでしょうか?
単純な勘違いだとは思うのですがしばらく考えてみても分かりませんでした・・・
以下にRのアウトプットを添付するのでどなたかコメントしてください
> rm(list=ls(all=TRUE))
>
> ##"chow1.txt"データファイルを"chow"に読み込み
> chow <- matrix(scan("chow.txt"),nrow=39,byrow=TRUE)
Read 195 items
>
> ##データ系列名を記述した"chowname.txt"を"chow.name"に読み込み
> chow.name <- scan("chowname.txt",what="")
Read 5 items
>
> ##"chow"の系列名を"chow.name"で定義
> ##行の名前を付けないことを"NULL""で宣言
> dimnames(chow) <- list(NULL,chow.name)
>
> ##パッケージ"data.frame"を用いて,桁数を縮小しデータスペースを最小化
> chow <- data.frame(chow)
> y <-chow$y
> maei <-chow$maei
> maex <-chow$maex
> atoi <-chow$atoi
> atox <-chow$atox
>
> ols <- lm(y~maei+maex+atoi+atox+0)
> ols.result <- summary(ols)
> #ols.result
>
> deviance <- deviance(ols)
> deviance
[1] 0.5995963
>
> AIC <- AIC(ols)
> AIC
[1] -42.15015

No.01883 Re: AICがマイナスに・・・・  【青木繁伸】 2006/12/13(Wed) 07:26

せっかく実行例を挙げてくれても,chow1.txt がないので,誰も追試できません。
問題を再現できる最小限の環境を提示するのが良いと思います。

まあ,追試しなくても分かる部分はあるでしょうが

AIC のオンラインヘルプはお読みになった上で,問題が解決しないということですね
その中に出てくる関数,extractAIC もご覧になったと。。。

それと,質問とは関係ないですが,
> chow <- data.frame(chow)
> y <-chow$y
> maei <-chow$maei
> maex <-chow$maex
> atoi <-chow$atoi
> atox <-chow$atox
> ols <- lm(y~maei+maex+atoi+atox+0)
としなくても,
> ols <- lm(y~maei+maex+atoi+atox+0, chow)
だけでよいですよ。

No.01884 Re: AICがマイナスに・・・・  【t】 2006/12/13(Wed) 07:49

返信有難う御座います

0.206463919 1 -0.029823558 0 0
0.667750917 1 0.206463919 0 0
0.381725071 1 0.667750917 0 0
0.186747415 1 0.381725071 0 0
-0.147817844 1 0.186747415 0 0
-0.02648574 1 -0.147817844 0 0
0.029830067 1 -0.02648574 0 0
0.240600427 1 0.029830067 0 0
0.157191515 1 0.240600427 0 0
-0.111039481 1 0.157191515 0 0
-0.18678349 1 -0.111039481 0 0
-0.102642978 1 -0.18678349 0 0
-0.09690602 1 -0.102642978 0 0
-0.153360807 1 -0.09690602 0 0
-0.111138571 1 -0.153360807 0 0
0.011758995 1 -0.111138571 0 0
-0.153426843 1 0.011758995 0 0
-0.093571115 1 -0.153426843 0 0
-0.114777076 1 -0.093571115 0 0
-0.074349235 1 -0.114777076 0 0
0.048378912 1 -0.074349235 0 0
-0.053732173 1 0.048378912 0 0
0.037053822 1 -0.053732173 0 0
-0.091014586 0 0 1 0.037053822
0.027895262 0 0 1 -0.091014586
-0.027319298 0 0 1 0.027895262
0.066432865 0 0 1 -0.027319298
-0.031347117 0 0 1 0.066432865
0.026532475 0 0 1 -0.031347117
0.031379921 0 0 1 0.026532475
-0.017753515 0 0 1 0.031379921
0.105861655 0 0 1 -0.017753515
-0.05492415 0 0 1 0.105861655
0.054667086 0 0 1 -0.05492415
0.058861203 0 0 1 0.054667086
0.003255725 0 0 1 0.058861203
0.063476269 0 0 1 0.003255725
0.028866314 0 0 1 0.063476269
0.05329061 0 0 1 0.028866314

chow1.txtの中身はこのように説明変数を二つに分けてありまして,
どこで分断するのが妥当かを検証するためにAICを使おうと思いまして計算しております

一応自分でAICを定義することによりプラスのAICが得られました.
オンラインヘルプも見たのですが,英語力の無さかいまいち根本的な問題が理解できませんでした・・・><

> rm(list=ls(all=TRUE))
>
> ##"chow1.txt"データファイルを"chow"に読み込み
> chow <- matrix(scan("chow.txt"),nrow=39,byrow=TRUE)
Read 195 items
>
> ##データ系列名を記述した"chowname.txt"を"chow.name"に読み込み
> chow.name <- scan("chowname.txt",what="")
Read 5 items
>
> ##"chow"の系列名を"chow.name"で定義
> ##行の名前を付けないことを"NULL""で宣言
> dimnames(chow) <- list(NULL,chow.name)
>
> ##パッケージ"data.frame"を用いて,桁数を縮小しデータスペースを最小化
> chow <- data.frame(chow)
> y <-chow$y
> maei <-chow$maei
> maex <-chow$maex
> atoi <-chow$atoi
> atox <-chow$atox
>
> ols <- lm(y~maei+maex+atoi+atox+0)
> ols.result <- summary(ols)
> #ols.result
>
> deviance <- deviance(ols)
> deviance
[1] 0.6214518
>
> #対数尤度
> ll <- -0.5*log(2*pi)-log(ols.result$sigma)-deviance/(2*ols.result$sigma^2)
>
> AIC <- -2*ll+2*4
> AIC
[1] 40.80683
>
> AICc <- -2*ll+2*4*(39/34)
> AICc
[1] 41.9833
>

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