No.04272 wilks関数  【suzuki】 2007/08/29(Wed) 07:27

http://aoki2.si.gunma-u.ac.jp/R/wilks.html
多変量に拡張された平均値の差の検定(ウィルクスのΛ)
の関数wilksにおいて
}
else
は,"エラー:syntax error"になりますので,
} else
のように修正をお願い致します。

【修正前】
        }
else if (k == 2) { # 2 群の場合
f <- (1-LAMBDA)*(n-k-nv+1)/LAMBDA/nv
p <- pf(f, nv, df2 <- n-k-nv+1, lower.tail=FALSE)
result <- c("F value"=f, "df1"=nv, "df2"=df2, "P value"=p)
}
else if (k == 3) { # 3 群の場合
f <- (1-sl)*(n-k-nv+1)/sl/nv
p <- pf(f, df1 <- 2*nv, df2 <- 2*(n-k-nv+1), lower.tail=FALSE)
result <- c("F value"=f, "df1"=nv, "df2"=df2, "P value"=p)
}
else {
【修正案】

} else if (k == 2) { # 2 群の場合
f <- (1-LAMBDA)*(n-k-nv+1)/LAMBDA/nv
p <- pf(f, nv, df2 <- n-k-nv+1, lower.tail=FALSE)
result <- c("F value"=f, "df1"=nv, "df2"=df2, "P value"=p)
} else if (k == 3) { # 3 群の場合
f <- (1-sl)*(n-k-nv+1)/sl/nv
p <- pf(f, df1 <- 2*nv, df2 <- 2*(n-k-nv+1), lower.tail=FALSE)
result <- c("F value"=f, "df1"=nv, "df2"=df2, "P value"=p)
} else {

No.04273 Re: wilks関数  【青木繁伸】 2007/08/29(Wed) 08:03

おかしいですね。私の環境ではエラーは出ません。
以下のようなものをコンソールから入れて,エラーが出ますか?
バージョンは幾つなんでしょう。OS はなんでしょうか。
当方は Mac OS X 10.4.10, R 2.5.1 です。
> a <- function(x) {
+ if (x < 0) {
+ print(x)
+ }
+ else if(x < 5) {
+ print(x)
+ }
+ else {
+ print(x)
+ }
+ }
> a(3)
[1] 3

No.04274 Re: wilks関数  【青木繁伸】 2007/08/29(Wed) 08:09

} else {
という,記述は私は嫌いなんです(^_^;)

No.04285 Re: wilks関数  【suzuki】 2007/08/29(Wed) 13:36

すいません。私の勉強不足でした。

{}内では,
}
else {
という記述ができるんですね。

NaN (非数)が出力された原因究明のため,{}内のコマンドを実行していました。
> wilks(dat, g)
F value df1 df2 P value
NaN 403 -353 NaN

> LAMBDA
[1] NaN
> det(w)/det(b+w)
[1] NaN
> det(w)
[1] 0
> det(b+w)
[1] 0

No.04286 Re: wilks関数  【青木繁伸】 2007/08/29(Wed) 15:25

> NaN (非数)が出力された原因究明のため

それで,原因は分かりましたか?
dat, g がどうだったか,書いてもらうと私もチェックできますが

No.04287 Re: wilks関数  【青木繁伸】 2007/08/29(Wed) 15:56

データ数(サンプルサイズ)より変数の個数が多いようなテストデータを作りませんでしたか?
> x <- matrix(rnorm(1000), 20, 50)
> y <- rep(1:2, each=10)
> wilks(x, y)
F value df1 df2 P value
NaN 50 -31 NaN
データチェックをして,そのようなデータを分析しないようにしないといけないとお思いかも知れませんが,そのような場合は生じさせてはならないのです

No.04288 Re: wilks関数  【suzuki】 2007/08/29(Wed) 16:13

アドバイスありがとうございます。ご指摘の通り,行数よりも列数が多いデータを使用していました。
dim(dat)
[1] 51 403
行数よりも列数が多い多変量データについて差の検定を行うにはどうすればよろしいでしょうか?
例えば,主成分分析などにより変数を減らして(行数よりも列数を少なくして)から,その合成変数(主成分)についてウィルクスのΛを適用することは妥当でしょうか?

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