No.17485 確認的因子分析のための相関行列  【コロン】 2012/10/03(Wed) 12:38

いつもお世話になっております。

青木先生が作成されましたR関数「検証的因子分析」を用いて,練習として,ある統計の教科書のデータを分析したいと思っております。

国語 社会 数学 理科 英語
52 58 62 36 31
49 69 83 51 45
47 71 76 62 41
53 56 66 50 28
44 52 72 60 38
39 69 54 50 34
50 67 66 45 31
53 75 81 62 56
41 54 51 48 54
63 53 55 44 35
39 39 71 59 42
55 47 82 55 51
53 64 69 57 40
78 79 66 58 54
56 62 89 67 38
37 61 69 58 53
60 55 85 48 45
46 49 60 47 31
37 59 69 32 23
39 51 62 53 24

データフレームのまま分析を行うことはできますでしょうか?使用例の最初の行に示されている r <- structure(c(.... の入力の手間を省けないかと,考えておりました。

相関行列を使わなければならない場合,cor() で行うと,縦横,変数名が表示されてしまい,そのまま利用することができませんでした。

このあたり,ご教授頂ければ幸いに存じます。

No.17486 Re: 確認的因子分析のための相関行列  【青木繁伸】 2012/10/03(Wed) 13:00

structure は 相関係数行列を定義するためだけに使われているので,相関係数行列を別の方法で用意する(データから cor により計算するなど)場合は,置き換え可能ですよ(ちなみに,structure は汎用の関数なので,相関係数行列を定義するなら matrix で充分です)。
データが d にあるとして,以下のようにすればちゃんと動きますが。
> d
国語 社会 数学 理科 英語
1 52 58 62 36 31
2 49 69 83 51 45
3 47 71 76 62 41
4 53 56 66 50 28
5 44 52 72 60 38
6 39 69 54 50 34
7 50 67 66 45 31
8 53 75 81 62 56
9 41 54 51 48 54
10 63 53 55 44 35
11 39 39 71 59 42
12 55 47 82 55 51
13 53 64 69 57 40
14 78 79 66 58 54
15 56 62 89 67 38
16 37 61 69 58 53
17 60 55 85 48 45
18 46 49 60 47 31
19 37 59 69 32 23
20 39 51 62 53 24

> r <- cor(d)
> r
国語 社会 数学 理科 英語
国語 1.0000000 0.3614638 0.2216866 0.1353083 0.3003663
社会 0.3614638 1.0000000 0.1426084 0.1835042 0.2715576
数学 0.2216866 0.1426084 1.0000000 0.4800570 0.3062217
理科 0.1353083 0.1835042 0.4800570 1.0000000 0.5268520
英語 0.3003663 0.2715576 0.3062217 0.5268520 1.0000000

> n <- nrow(d)
> loc <- c(1,1,2,2,2) # 取りあえずこのようにしておきます

> cfa(r, n, loc)
$loadings
[,1] [,2]
[1,] 0.5994594 0.0000000
[2,] 0.6029841 0.0000000
[3,] 0.0000000 0.5655322
[4,] 0.0000000 0.7948993
[5,] 0.0000000 0.6582699

$fac.cor
[,1] [,2]
[1,] 1.0000000 0.4665425
[2,] 0.4665425 1.0000000

$chisq
[1] 1.615696

$P
[1] 0.8059684

$df
[1] 4

$GFI
[1] 0.9697333

$AGFI
[1] 0.8864998

$SRMR
[1] 0.05149172

$RMSEA
[1] 0

No.17487 Re: 確認的因子分析のための相関行列  【コロン】 2012/10/04(Thu) 08:24

青木先生

早速のご回答,ありがとうございました。スペルミスなどしていないはずなのですが,なぜか動かなかったので質問させていただきました。

関連事項でもう2つ質問をさせていただけますでしょうか?

分析いただきましたデータですが,英語が第二因子だけに属するような形だと思います。これを第一因子・第二因子両方に属するようにするためにはどのようにすればよろしいでしょうか?

それからRMSEAが0となっておりますが,これは計算されないと言うことなのでしょうか?それとも0に非常に近いので0と表現されているのでしょうか?

よろしくお願いいたします。

No.17488 Re: 確認的因子分析のための相関行列  【青木繁伸】 2012/10/04(Thu) 09:21

> 第一因子・第二因子両方に属するようにするためにはどのように

使用例にもありますが,,,
> d<-rfb()
> r <- cor(d)
> n <- nrow(d)
> loc <- matrix(c(
+ 0,1,
+ 0,1,
+ 1,0,
+ 1,0,
+ 1,1), byrow=TRUE, nc=2)
> cfa(r, n, loc)
$loadings
[,1] [,2]
[1,] 0.0000000 0.6270787
[2,] 0.0000000 0.5764602
[3,] 0.5332199 0.0000000
[4,] 0.9003528 0.0000000
[5,] 0.4825734 0.3242229

$fac.cor
[,1] [,2]
[1,] 1.0000000 0.3135714
[2,] 0.3135714 1.0000000

$chisq
[1] 0.6121434

$P
[1] 0.8936469

$df
[1] 3

$GFI
[1] 0.9874752

$AGFI
[1] 0.9373759

$SRMR
[1] 0.03464103

$RMSEA
[1] 0
> RMSEAが0となっておりますが,これは計算されないと言うことなのでしょうか?それとも0に非常に近いので0と表現されているのでしょうか?

プログラムを読めばわかりますが,(chisq-df) という部分があり, chisq < df の場合は,定義できないので 0 を表示するようになっています。(NA の方がよいかな?) 

No.17489 Re: 確認的因子分析のための相関行列  【コロン】 2012/10/04(Thu) 10:11

青木先生

ありがとうございました。私の質問の仕方が悪く,ご迷惑をおかけいたしました。二つの因 子にまたがる場合ですが,loc<-c(1,1,2,2,2)....この表現の応用でできるかどうかをお伺いしたかったのです。失礼いたしまし た。よく考えてみたら,設定のしようがないような気がします。先生が提示されていらっしゃる使用例で行きたいと思います。

またRMSEAの件ですが,了解いたしました。

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