因子分析の適合度検定 Last modified: Mar 28, 2008
目的
因子分析の結果(因子数,独自性)に対して適合度検定を行う
(最尤法でなければ適合度検定ができないと思っていたが,
必要なのは抽出した因子数と分析結果のうちの独自性ベクトル
だけであるらしい。
ならば,どんな因子分析の結果についてでも適合度の検定を
行うことができる。)
使用法
fa.fit.test <- function(data, factors, uniquenesses)
引数
data データ行列(データフレーム)
factors 抽出した因子数
uniquenesses 独自性ベクトル
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/fa.fit.test.R", encoding="euc-jp")
# 因子分析の適合度検
fa.fit.test <- function(data, # データ行列(データフレーム)
factors, # 抽出した因子数
uniquenesses) # 独自性ベクトル
{
p <- ncol(data) # 変数の個数
n <- nrow(data) # ケース数
r <- cor(data) # 相関係数行列
sc <- diag(1/sqrt(uniquenesses)) #
r <- sc%*%r%*%sc #
e <- eigen(r, symmetric=TRUE, only.values=TRUE) # 固有値だけ求める
e <- e$values[-(1:factors)] # 抽出された因子で説明されない部分
s <- -sum(log(e)-e)+factors-p # 統計量
chisq <- (n-1-(2*p+5)/6-(2*factors)/3)*s # カイ二乗統計量に変換
df <- ((p-factors)^2-p-factors)/2 # 自由度
P <- pchisq(chisq, df, lower.tail=FALSE) # P 値
return(c(Chi.sq.=chisq, df=df, P=P)) # 名前付ベクトルで返す
}
使用例
> dat <- read.table("pfa.data", header=TRUE) # ファイルからデータを読んだ
> dat
var1 var2 var3 var4 var5 var6 var7 var8 var9 var10
1 935 955 926 585 1010 925 1028 807 769 767
2 817 905 901 632 1004 950 957 844 781 738
3 768 825 859 662 893 900 981 759 868 732
4 869 915 856 448 867 874 884 802 804 857
5 787 878 880 592 871 874 884 781 782 807
6 738 848 850 569 814 950 957 700 870 764
7 763 862 839 658 887 900 1005 604 709 753
8 795 890 841 670 853 874 859 701 680 772
9 903 877 919 460 818 849 884 700 718 716
10 761 765 881 485 846 900 981 728 781 714
11 747 792 800 564 796 849 932 682 746 767
12 771 802 840 609 824 874 859 668 704 710
13 785 878 805 527 911 680 884 728 709 747
14 657 773 820 612 810 849 909 698 746 771
15 696 785 791 578 774 725 932 765 706 795
16 724 785 870 509 746 849 807 763 724 760
17 712 829 838 516 875 725 807 754 762 585
18 756 863 815 474 873 725 957 624 655 620
19 622 759 786 619 820 769 807 673 698 695
20 668 753 751 551 834 849 807 601 655 642
> ans <- factanal(dat, 4) # R の関数を使って分析(デフォルトはバリマックス回転)
> ans
Call:
factanal(x = dat, factors = 4)
Uniquenesses: # 必要な情報の一つ $uniquenesses に入っている
var1 var2 var3 var4 var5 var6 var7 var8 var9 var10
0.005 0.187 0.236 0.595 0.005 0.005 0.644 0.005 0.467 0.574
Loadings:
Factor1 Factor2 Factor3 Factor4
var1 0.820 0.200 0.347 -0.402
var2 0.856 0.204 -0.178
var3 0.559 0.454 0.472 -0.151
var4 0.112 0.627
var5 0.891 0.174 -0.151 0.385
var6 0.231 0.169 0.877 0.379
var7 0.500 0.263 0.190
var8 0.284 0.955
var9 0.105 0.580 0.376 0.211
var10 0.452 0.432 -0.188
Factor1 Factor2 Factor3 Factor4
SS loadings 2.907 1.799 1.552 1.021
Proportion Var 0.291 0.180 0.155 0.102
Cumulative Var 0.291 0.471 0.626 0.728
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 15.16 on 11 degrees of freedom.
The p-value is 0.175
> fa.fit.test(dat, 4, ans$uniquenesses) # 適合度の検定だけを行う
Chi.sq. df P # factanal 関数の出力と同じである
15.1635725 11.0000000 0.1751303
直前のページへ戻る
E-mail to Shigenobu AOKI