#1です。
データが1~6の非負の離散値ということが少し気になったので、
おせっかいですがコメントさせて下さい。
もしかして、アンケート結果を解析しようとしてみえますか。
すると、結果が思わしくないと思います。
なぜなら、人による採点の「甘・辛」(バイアス)や
同内容の設問間の「自己相関」が出て、
主成分分析には適さないデータになっているからです。
バイアスを取るには、行が「被験者」なら、行間を中心化します。
自己相関を取るには、列が「設問」なら、列間を中心化します。
これを「二重中心化」といいます。
スクリプトをのせておきます。
走らせてみると、因子負荷量の矢印が四方八方に広がるのが分かると思います。
第1、第2主成分を取り除いた感じです。
第1主成分のサイズファクター(甘いか辛いか)と
第2主成分のシェイプファクター(設問に対する反応の凹凸)を
取り除き偏りが取れて広がるのです。
「コレスポンデンス分析」の結果に近いと思って下さい。
ただ、相対評価(主観的回答)以外のデータには適用しないで下さい。
# テストデータによる主成分分析
par(mfrow=c(1,1))
dat <- data.frame(
matrix(c(
3,4,1,4,1,4,1,1,2,2,4,2,2,
3,3,3,3,3,3,3,1,3,3,3,3,3,
1,4,5,3,1,1,1,1,1,1,1,1,1,
3,1,3,1,1,2,2,2,4,4,3,4,2,
3,3,3,4,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,
4,4,4,4,4,4,3,3,2,2,2,2,2,
4,3,4,3,2,2,2,2,3,3,2,2,2,
3,4,4,4,1,3,3,2,2,2,2,3,3,
3,3,3,3,3,3,4,3,2,2,2,3,3,
3,3,2,4,4,3,2,2,3,2,2,2,2,
3,2,3,3,3,2,3,3,4,3,3,2,3,
4,4,4,4,4,3,3,3,2,2,2,2,2,
3,4,4,4,2,3,3,3,3,3,2,2,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,
3,4,4,3,3,3,3,3,3,3,3,3,3,
3,4,4,4,4,4,3,3,3,3,3,3,4,
3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,4,3,3,3,2,1,2,2,2,2,2,
3,5,1,5,1,5,1,1,1,1,1,1,1,
3,3,2,2,2,2,2,2,2,2,4,2,4)
,ncol=13,nrow=21,byrow=T)
)
names(dat)=c("F","G","H","I","J","K","L","M","N","O","P","Q","R")
dat
xs <- dat
dat <- sweep(dat,2,apply(xs,2,mean)) # 列平均を引く
dat <- sweep(dat,1,apply(xs,1,mean)) # 行平均を引く
dat <- sweep(dat,c(1,2),mean(colMeans(xs)),FUN="+") # 全平均を足す
#
result1 <- prcomp(dat)
biplot(result1)
par(ask=TRUE)
#
result1$rotation
p <- result1$rotation[,1:2]
p1 <- p[order(-abs(p[,1])),1]
p2 <- p[order(-abs(p[,2])),2]
par(mfrow=c(1,2))
barplot(p1,horiz=T,names.arg=rownames(p1),las=1,cex.names=0.8)
barplot(p2,horiz=T,names.arg=rownames(p2),las=1,cex.names=0.8)
#
お礼
ご回答いただきありがとうございます。 動作確認いたしましたところ、無事にバイプロットを出力することができました。 大変図々しいこととは承知しておりますが2点質問させてください。 1.このプログラムは相関行列を用いた主成分分析なのでしょうか。私の説明が不十分だったのですが、用いるデータファイルは最小値が1、最大値が6であり、単位の揃ったものです。(正確には単位はありません。)なので今回は分散共分散行列を用いるのが好ましいのではないかと考えております。 2.バイプロットと一緒に、各主成分に対する主成分負荷量の図も出力したいのですが、コードを教えていただませんでしょうか。 専攻は建築系なもので、勉強不足な点が多々ございますが、 何卒よろしくお願いいたします。