No.03110 因子分析で表示がされない  【tajima】 2007/04/03(Tue) 11:53

青木先生が作成された因子分析のプログラムの結果を使おうと思い,色々なデータセットで試しております。因子負荷量がどれ くらいか見てみようと思い,$loadings で取り出してプリントしてみました。すると,3番目のファクターローディングが表示されないことがしばしばあります。
他のデータセットでは上手く 行く例もあり,プログラムミスかとも思い,色々な箇所で使われていた _ を . に直したり,= を <- に直したり(今までこの辺が非常に曖昧に使っていました・・・)してみましたが,結果は変わりませんでした。因子分析(またはそれに限らず),「表示がさ れない」という経験がある方はいらっしゃるでしょうか? または因子分析自体が上手くいっていない証拠なのでしょうか? 毎回初心者クラスの質問で恐縮で すが,アドバイス頂けると幸いです。宜しくお願いします。
y <- data
z <- factanal2(y,factors=1,rotation="varimax",scores="Bartlett",verbose=FALSE)
zloadings <- z$loadings
print(zloadings)

<実行結果>

Loadings:
Factor1
変数1    0.247
変数2    -0.720
変数3   
変数4      0.690

Factor1
SS loadings 1.330
Proportion Var 0.333

No.03111 Re: 因子分析で表示がされない  【青木繁伸】 2007/04/03(Tue) 13:49

factanal2 は verbose=TRUE がデフォルトで,そのときには,結果は関数内部の cat により,整形出力されます。

verbose=FALSE では結果は自動的に表示されず,付値した変数の $* によって自分で出力しなければなりません。

しかし,注意しなければならないのは,factanal2 が返すオブジェクトは factanal と同じクラスを持つので,print すると,そのクラスに対応するメソッドが適用されます。

たとえば z$loadings は loading クラスをもつので,普通に print(z$loadings) を行うと実際には print.loadings(z$loadings) となります。

print.loadings は,デフォルトでは,絶対値が 0.1 未満の因子負荷量は表示しません(空白を表示します)。全ての因子負荷量が 0.1 未満なら(そのようなことは,非常にまれでしょうが),その因子には何も表示されないことになります。

print.loadings は,
> stats:::print.loadings
function (x, digits = 3, cutoff = 0.1, sort = FALSE, ...)
のような引数を持ちます(? print.loadings 参照)

print(x, cutoff=0) とすれば,全ての因子負荷量が表示できるでしょう。
注:print.loadings(x, cugoff=0) としないこと!

結構複雑な説明をしなくてはいけないので,verbose=TRUE をデフォルトにしてあるんです。

なお,R にあまりなじみがない場合には,プログラムを試行錯誤でいじらない方が良いと思います。うまく動いたように見えても,間違った答えを出すようにいじり壊すことがあるかもしれませんから。

No.03112 Re: 因子分析で表示がされない  【tajima】 2007/04/03(Tue) 14:32

青木先生,丁寧なご回答ありがとうございました。やはりまだ初心者で先生のプログラムの意味も分からずにいじるの は無理があったようです。少しずつでも頑張って勉強していきます。どうもありがとうございました。今後は試行錯誤ではやらずに「理解して」プログラムを組 んでいきたいです。

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