No.02988 因子分析の変数の数:R  【tajima】 2007/03/13(Tue) 12:55

超初心者レベルの質問で申し訳ありません。質問は「因子分析の変数の数は2では計算できないのか?」というものです。今因子分析の勉強をしていて,青木先生の
http://aoki2.si.gunma-u.ac.jp/R/factanal2.html
を参考にさせて頂いて,faictanal2で色々勉強させていただいています。その中で,変数の数が3つ,4つのときは因子分析が上手くできたのですが,ためしに変数を2にしてみたら以下のようなエラーが出ました(標本は1,000程度あります)

『以下にエラーfactanal(dat, factors = factors, rotation = rotation, scores = scores) :
因子分析法は少なくとも 3 つの変数を必要とします』

質問事項は:「因子分析では変数の数が3以上必要なのでしょうか?』というものです。ちなみに,主成分分析では変数が2でも計算はされました。非常に稚拙な質問かとは思いますが,アドバイスを頂けると幸いです。宜しくお願いします。

No.02990 Re: 因子分析の変数の数:R  【青木繁伸】 2007/03/13(Tue) 14:37

factanal のプログラムを見ると分かりますが,「変数が3以上」という制限は,因子数が適切かどうか(モデルの当てはまり具合)の検定をするときに,変数が2であっ ては,たとえ因子数が1であっても,カイ二乗値の自由度が0以下(-1)になってしまう(変数が3で,因子数が1でも,自由度は0になるんだけどなあ?い いのかなあ?)。
71~73 の3行をコメントアウトしてやると,変数が2で因子数を1にしたときも,解を求めることができます。

No.02991 Re: 因子分析の変数の数:R  【tajima】 2007/03/13(Tue) 15:17

アドバイスどうもありがとうございます。2変数では数学的に問題があるということが理解できました。ただ,今は色 々試行錯誤で勉強しているので,「ソースを書き換える」(コメントアウトするだけですが・・・)という自分にとっては初の試みをやってみました。先生の仰 られた行数とズレているかと思い,色々ためしてみました。ここで,(私の)71行目〜73行目をコメントアウトすると,「factor analysis requires at least three variables」と出てしまうため,試しに68行目と69行目をコメントアウトしてみたところ,「1 factors is too many for 2 variables」という答えが返って止まりました。ソースの意味も正確に分からずに質問させていただくのは非常に心苦しいのですが,どの部分のコメン トアウトが間違っていたのかご指摘頂けると幸いです。宜しくお願いします。
#    if (p < 3)                                                           # 68行目
# stop("factor analysis requires at least three variables") # 69行目
# dof <- 0.5 * ((p - factors)^2 - p - factors) # 70行目
# if (dof < 0) # 71行目
# stop(gettextf("%d factors is too many for %d variables", # 72行目
# factors, p), domain = NA) # 73行目

No.02992 Re: 因子分析の変数の数:R  【青木繁伸】 2007/03/13(Tue) 19:28

失礼しました68行目の定数3を2に変更していたのを忘れていました。

No. 2990 のようにするときには,70行目だけは活かさないといけません。
また,factanal を直接いじるよりは,別の変数に付値してそちらをいじった方が良いですね。
> a <- factanal
> a <- edit(factanal)
   ここで,以下の図のようにコメントアウト(図をクリックすると若干大きくなる)
> a(matrix(rnorm(20),10), factors=1) # 2変数データを分析してみる

fig


No.02994 Re: 因子分析の変数の数:R  【tajima】 2007/03/14(Wed) 11:32

青木先生,お答えいただきありがとうございます。「別の変数に付値してそちらをいじった方が良いですね」とのアド バイスを頂ましたが,その一歩前で,factanal を factanal_x と言う名前で違う関数として定義して同じソースの中に書き込んでやっています(これだと,本物の factanal を壊すことが無いと思ったので・・・・)。すると,70行目を活かして他をコメントアウトするとその部分は上手く通り,問題は解決したかと思われたのです が,

エラー:関数 "factanal.fit.mle" を見つけることができませんでした

と出てしまいました。私の考えでは factanal.fit.mle がRに標準装備されていると思い,そのソースを見ようと思ったので
>factanal.fit.mle
と打ってみると

エラー:オブジェクト "factanal.fit.mle" は存在しません

と 表示されました。勘で,library(stat)とやっても出てこず,私はRの構造というものをまったく理解できていないのだと痛感しております。本当 に稚拙な質問で申し訳ないのですが「factanal.fit.mle」のソースを見るにはどうしたらよろしいでしょうか? それとも,やはり根本的に間 違った使い方をしているのでしょうか? 最初の質問から完全に外れてしまって申し訳ありません。宜しくお願いします。

No.02995 Re: 因子分析の変数の数:R  【takahashi】 2007/03/14(Wed) 11:44

>stats:::factanal.fit.mle
で中身を見ることは出来ますが,factanal_xの中のfactanal.fit.mleをstats:::factanal.fit.mleに変えればよいですよ。

他にも同じようなものがあるかもしれません。

No.02997 Re: 因子分析の変数の数:R  【tajima】 2007/03/14(Wed) 13:39

上手く2変数での因子分析ができました。これ自身には意味は無いかもしれませんが,色々付随したご回答を頂く中で少しずつですがRについて分かってきました。今回は超初心者レベルの質問に丁寧にお答え頂きありがとうございました。

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