R 绘制2个以上的因子

R 绘制2个以上的因子,r,R,假设我进行了因子分析,得到了5个相关因子。现在,我想用图形表示这些因素在变量上的加载。谁能告诉我怎么做吗。我可以用两个因素来做。但当因子数超过2时,无法执行 “带S的现代应用统计学”中给出了2因素图,图11.13。我想创建类似的图,但有两个以上的因素。请找到上面提到的图的快照: X和y轴是两个因素 问候,, Ari小心:这不是你想要的答案,也可能是不正确的,这是我的主观想法 我认为您遇到了在二维屏幕/图纸上绘制多个尺寸的问题。 我想说,绘制更多的因子或PC载荷是没有意义的,但如果你真的坚持:显

假设我进行了因子分析,得到了5个相关因子。现在,我想用图形表示这些因素在变量上的加载。谁能告诉我怎么做吗。我可以用两个因素来做。但当因子数超过2时,无法执行

“带S的现代应用统计学”中给出了2因素图,图11.13。我想创建类似的图,但有两个以上的因素。请找到上面提到的图的快照:

X和y轴是两个因素

问候,,
Ari

小心:这不是你想要的答案,也可能是不正确的,这是我的主观想法

我认为您遇到了在二维屏幕/图纸上绘制多个尺寸的问题。 我想说,绘制更多的因子或PC载荷是没有意义的,但如果你真的坚持:显示前两个(基于特征值)或只创建两个因子。或者您也可以通过其他方法(例如MDS)减少维度

在三维图形中显示3个因素的负荷几乎不清楚,更不用说考虑更多的因素了


更新:我有一个梦想,那就是试着变得更加个人化:)

您可以很容易地显示@joran指出的每个
因子对的投影,如(我这里不讨论旋转):


f看起来有一个软件包:

附带示例代码和多个因素。加载
FactoMineR
软件包并进行播放

这里有很好的概述:

他们网页上的图表:



您还可以查看因子分析对象,查看是否无法提取值并使用
ggplot2
或基本图形手动绘制它们。

正如daroczig所述,每组因子加载都有自己的维度。因此,在五个维度上进行绘图不仅困难,而且往往是不可取的

不过,您可以使用散点图矩阵来显示每对因子载荷。使用您从Venables&Ripley引用的示例:

#Reproducing factor analysis from Venables & Ripley
#Note I'm only doing three factors, not five
data(ability.cov)
ability.FA <- factanal(covmat = ability.cov,factor = 3, rotation = "promax")
load <- loadings(ability.FA)
rot <- ability.FA$rot

#Pairs of factor loadings to plot
ind <- combn(1:3,2)
par(mfrow = c(2,2))
nms <- row.names(load)
#Loop over pairs of factors and draw each plot
for (i in 1:3){
    eqscplot(load[,ind[1,i]],load[,ind[2,i]],xlim = c(-1,1),
        ylim = c(-0.5,1.5),type = "n",
        xlab = paste("Factor",as.character(ind[1,i])),
        ylab = paste("Factor",as.character(ind[2,i])))
    text(load[,ind[1,i]],load[,ind[2,i]],labels = nms)

    arrows(c(0,0),c(0,0),rot[ind[,i],ind[,i]][,1],
        rot[ind[,i],ind[,i]][,2],length = 0.1)
}
#再现Venables&Ripley的因子分析
#注意,我只做了三个因素,而不是五个
数据(ability.cov)

我没有你提到的那本书的副本。你能给我们提供一张图片吗?为什么不给我们提供a)一种复制一些样本数据的方法(尝试
dput
),以及b)到目前为止你一直在工作的代码,以便我们有希望解决你的问题?请阅读这个谢谢。我没有把代码或数据,因为问题太普遍了。假设有人进行因子分析&找出5个完全反映下划线变量的因子。现在,他想用一个图表将其可视化(例如,想将其呈现给新手)。我只想知道如何用5个因素来创建图表。我不明白为什么有人对我的问题投反对票!!!这个人甚至懒得澄清它:x(我没有投反对票,但我确实认为你应该添加一个简短的代码片段——特别是因为你说“我可以使用2个因素来完成。”可再现性非常重要。你找到一个对因子分析非常熟悉的人来给你提供他们头脑中的工作代码的可能性非常小。但这里有很多人精通R,可以很快利用这些知识得出答案。请他们花时间来提出样本data和复制您已经完成的工作,只是为了将其扩展到更多的因素,然而,这有点牵强。谢谢Joran!您的回答真的很有帮助。您是对的,绘制5个因素mght没有意义。但是让我试试我的数据集并查看结果。感谢gsk3向我推荐新的包!我不知道。还有答案。我不确定:在我看来,仍然显示了两个因素,尽管情节看起来很好。@daroczig我认为你是对的。保留答案是因为软件包本身看起来有多因素分析的有用功能。谢谢Darcozig!事实上人们并不总是理解数字。但是如果你用图表显示它们,事情就变得简单了更简单。这就是为什么在图形中绘制因子。我仍然不确定这是否真的能解决我的问题,还是会增加我的问题:)但让我看看@用户697363:你说得对!昨晚我在想这个问题,后来Joran的回答让我明白了:嗯,这是可以通过某种方式实现的。我更新了我的答案,希望你能找到一些有用的东西。@darcozig:谢谢你的回答。很高兴听到我启发别人思考。所有的答案都很有趣。这个问题对我来说是一个很好的学习。
f <- factanal(mtcars, factors=5)
pairs(f$loadings, col=1:ncol(mtcars), upper.panel=NULL, main="Factor loadings")
par(xpd=TRUE) 
legend('topright', bty='n', pch='o', col=1:ncol(mtcars), attr(f$loadings, 'dimnames')[[1]], title="Variables")
library(scatterplot3d)
f <- factanal(mtcars, factors=3)
scatterplot3d(as.data.frame(unclass(f$loadings)), main="3D factor loadings", color=1:ncol(mtcars), pch=20)
#Reproducing factor analysis from Venables & Ripley
#Note I'm only doing three factors, not five
data(ability.cov)
ability.FA <- factanal(covmat = ability.cov,factor = 3, rotation = "promax")
load <- loadings(ability.FA)
rot <- ability.FA$rot

#Pairs of factor loadings to plot
ind <- combn(1:3,2)
par(mfrow = c(2,2))
nms <- row.names(load)
#Loop over pairs of factors and draw each plot
for (i in 1:3){
    eqscplot(load[,ind[1,i]],load[,ind[2,i]],xlim = c(-1,1),
        ylim = c(-0.5,1.5),type = "n",
        xlab = paste("Factor",as.character(ind[1,i])),
        ylab = paste("Factor",as.character(ind[2,i])))
    text(load[,ind[1,i]],load[,ind[2,i]],labels = nms)

    arrows(c(0,0),c(0,0),rot[ind[,i],ind[,i]][,1],
        rot[ind[,i],ind[,i]][,2],length = 0.1)
}