1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

因子分析の結果は、すべてRが表にまとめてくれた-ポケモンのデータを例に-

Last updated at Posted at 2024-01-15

 因子分析を行い、その結果を報告する際に、因子負荷量や因子間相関を表にする場合があります。しかし、手作業でやると、ミスにつながりやすく、何より面倒です。そのような作業はRにやってもらいましょう。
 主に使用するRのパッケージはsJPlot version 2.8.15になります。回帰分析系の結果の出力でよく使っていましたが、因子分析の結果の出力にも大変役に立ちました。

データの用意

 まずはデモで使うポケモンのデータを読み込みます。こちらのサイトで紹介されているデータ(ポケモンで学ぶデータ分析|データの中身を知ろう)を使用しました。今回は、表にする方法のデモが目的であり、因子分析のやり方の解説ではありません。ですので、結果を表示しやすいように一部の変数のみを読み込んでいます。また、一つ目のシートを使用しています。

library(openxlsx)
data <- read.xlsx("pokemon_data.xlsx", 
                  sheet = 1)[,-c(1, 4, 7, 8, 9, 14, 15, 16, 17, 18, 19)]

データの中身

  • 名前:ポケモンの名前。
  • タイプ1:ポケモンに設定されている属性のようなもの。複数のタイプを持つポケモンがいるので、タイプ1となっています。
  • 高さ:身長のようなもの。
  • 重さ:体重のようなもの。
  • こうげき:物理技の攻撃力。
  • ぼうぎょ:物理技の防御力。
  • とくこう:特殊技の攻撃力。
  • とくぼう:特殊技の防御力。

image.png

分析開始

 パッケージを読み込みます。

library(sjPlot)

 view_df関数を使うと、変数名と、連続値のデータの範囲を示しす。

sjPlot::view_df(data)

image.png

変数間の相関行列

 tab_corr関数で、指定した変数間の相関行列を表示できます。後述しますが、HTMLファイルにエクスポートできるので、Wordに結果を張り付けることも可能です。

sjPlot::tab_corr(data[,-c(1,2)],
         corr.method = "pearson",
         title = NULL,
         show.p = TRUE,            #Falseでアスタリスクを削除できます。
         triangle = "lower",       #表を数値でどう埋めるかの引数です。upper、bothも指定可能。
         digits = 3,
         encoding = "UTF-8"
       ) 

image.png

探索的因子分析

 次に、探索的因子分析を行い、因子負荷量を表にします。因子数はなんとなく2を指定しました。

sjPlot::tab_fa(
  data[,-c(1,2)],               #分析したいデータ。名前とタイプ1は除外
  rotation = "promax",          #回転
  method = "ml",                #推定法
  nmbr.fctr = 2,                #推定する因子の数
  fctr.load.tlrn = 0.1,         #ダブルローディングの検出。デフォルトは0.1
  sort = T,                     #F(alse)にすると、変数の順番で結果が表示される
  title = "ポケモンゲットだぜ!",
  show.cronb = T,               #Cronbachα
  show.comm = T,                #T(rue)にすると、共通性の結果も描画する
  digits = 2,                   #表示する小数点の数
  encoding = "UTF-8"
)

image.png

「ぼうぎょ」に塗りつぶし線が引かれています。これは、引数のfctr.load.tlrn = 0.1の設定に対応しています。複数の因子にloadingしていないかを表示する機能です。最も高い値と、二番目に高い値の差が最低でもどの程度必要かを設定します。今回は、0.1以上必要というデフォルトの設定になっていて、Factor 1と2はそれぞれ0.33、0.38で0.1以下の差しかないので塗りつぶし線が描画されています。

 「ぼうぎょ」をぬいて再度分析を行います。これ以降は、簡略化のため、共通性( show.comm =)とクロンバックαshow.cronb =)の結果は非表示にしています。

tab_fa(
  data[,-c(1,2,6)], 
  rotation = "promax",          
  method = "ml",        
  nmbr.fctr = 2,                
  fctr.load.tlrn = 0.1,         
  sort = T,                     
  title = "ポケモンゲットだぜ!",
  show.cronb = F,               
  show.comm = F,                
  digits = 2,                  
  encoding = "UTF-8"
)

今回は、ダブルローディングはないですね。

image.png

因子間相関行列

 因子間相関行列を表にする場合、psychパッケージのfa関数で探索的因子分析を行い結果を保存します。

library(psych)
r.fa <- fa(data[,-c(1,2,6)],
                 nfactors = 2,
                 fm = "ml",
                 rotate = "promax") 

 r.faに結果を保存しているので、そこから因子間相関の結果を取り出します。

r.fa$Phi

image.png

 tab_corr関数を使用します。引数のvar.labelsを指定して、因子に名前をつけています。小数点の表示も3桁に変更しました(引数digits)。

tab_corr(r.fa$Phi,
         corr.method = "pearson",
         title = "因子間相関",
         var.labels = c("体格・攻撃", "特殊" ),  # 因子名
         triangle = "lower",                     
         digits = 3, 
         encoding = "UTF-8"
         ) 

image.png

おまけ(Wordに挿入する方法)

 因子負荷量や因子間相関行列の表をWordに挿入する一例を紹介します。まず、引数にfile = "factorloadings.html"を追加します""の中は、ファイル名を指定してください。これで、出力した表を保存できます。ファイル名の前にパスを入れると、保存場所も指定できます。
 次に、出力したhtmlファイルをWordで開けば(右クリックして「プログラムから開く」でWordを選択)、完成です。注意点として、日本語が含まれているとWordファイルの日本語の部分が文字化けをします。encodingの引数でUTF-8Windows-1252などを指定しても、筆者のPCでは文字化けしました。ですので、変数名は英語に変えてから出力し、Word上で日本語などに適宜変更する方がいいと思います。

tab_fa(
  data[,-c(1,2,6)], 
  rotation = "promax",          
  method = "ml",        
  nmbr.fctr = 2,                
  fctr.load.tlrn = 0.1,         
  sort = T,                     
  title = "Pokemon",
  show.cronb = F,               
  show.comm = F,                
  digits = 2,                  
  file = "factorloadings.html",    #これ!
  encoding = "UTF-8"
)

 以下はWordで開いた際のスクリーンショットです。文字化けしていた日本語の部分はWord上で手で修正しました。

image.png

 細かい表の体裁は、Word上で行うこともできますし、CSSなどを事前に設定することもできるようです。R上での表の詳細なカスタマイズは、こちらに例があります(Customizing HTML tables)。

おすすめの記事

 英語ですが、因子分析をRで行う際に参考になる記事がありました。探索的因子分析だけでなく、確証的因子分析もあります。

参考記事

1
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?