目的 因子分析の適切性を判断する,バートレットの球面性検定を行う psych パッケージの cortest.bartlett も同じ検定を行う 使用法 kmo(x) 引数 x データ行列(行がケース,列が変数) ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/Bartlett.sphericity.test.R", encoding="euc-jp") # バートレットの球面性検定 Bartlett.sphericity.test <- function(x) # データ行列 { method <- "Bartlett's test of sphericity" data.name <- deparse(substitute(x)) x <- subset(x, complete.cases(x)) # 欠損値を持つケースを除く n <- nrow(x) p <- ncol(x) chisq <- (1-n+(2*p+5)/6)*log(det(cor(x))) df <- p*(p-1)/2 p.value <- pchisq(chisq, df, lower.tail=FALSE) names(chisq) <- "X-squared" names(df) <- "df" return(structure(list(statistic=chisq, parameter=df, p.value=p.value, method=method, data.name=data.name), class="htest")) } 使用例 x <- matrix(c( # 5ケース,4変数のデータ行列例(ファイルから読んでも良い) 1, 5, 6, 4, 2, 14, 5, 3, 3, 3, 4, 2, 4, 2, 6, 6, 3, 4, 3, 5 ), ncol=4, byrow=TRUE) Bartlett.sphericity.test(x) Bartlett.sphericity.test(iris[1:4]) 出力結果例 > Bartlett.sphericity.test(x) Bartlett's test of sphericity data: x X-squared = 1.3618, df = 6, p-value = 0.9681 > Bartlett.sphericity.test(iris[1:4]) Bartlett's test of sphericity data: iris[1:4] X-squared = 706.9592, df = 6, p-value < 2.2e-16