【问题标题】:Plotting More than 2 Factors绘制超过 2 个因子
【发布时间】:2011-07-27 19:00:52
【问题描述】:

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

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

X 和 y 轴是 2 个因素。

问候, 阿里

【问题讨论】:

  • 我无法访问您提到的这本书的副本。能给我们提供一张照片吗?
  • 您为什么不向我们提供 a) 一种重现一些示例数据的方法(尝试dput),以及 b) 您目前工作的代码,以便我们可以有一个希望解决您的问题?请阅读此stackoverflow.com/questions/5963269/… 谢谢。
  • 我没有放代码或数据,因为问题太笼统了。假设有人进行因子分析并找到 5 个完美反映下划线变量的因子。现在他想使用图表将其可视化(例如,想将其呈现给新手。)。我只想知道如何使用 5 个因素创建图表。
  • 我不明白为什么有人对我的问题投反对票!!!这个人甚至懒得澄清它:x(
  • 我没有否决它,但我认为您应该添加一个简短的代码 sn-p--特别是因为您说“我可以使用 2 个因素”。可重复性非常重要。您找到一个对因子分析非常了解的人,可以让您在他们的脑海中快速完成工作代码的可能性非常小。但是这里有很多人精通 R,并且可以很快地利用这些知识提出答案。要求他们花时间提出样本数据并重现您已经完成的工作,只是为了将其扩展到更多因素,然而,这有点牵强。

标签: r


【解决方案1】:

注意:不是您要找的答案,也可能不正确,这是我的主观想法。

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

在 3 维图表中显示 3 个因素的负载将很难清楚,更不用说考虑更多因素了。


更新:我有一个梦想是尝试更贴近主题:)

正如@joran 指出的那样,您可以轻松地显示每个pairs 因素的预测(我在这里不处理轮换):

f <- factanal(mtcars, factors=3)
pairs(f$loadings)

这样你可以显示更多的因素,也可以调整情节,例如:

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")

当然,您也可以通过自定义下部三角形,或在上部三角形中显示并在右侧/下方附加图例等方式添加旋转矢量。

或者,如果您的因子不超过 3 个,则只需将变量指向 3D 散点图:

library(scatterplot3d)
f <- factanal(mtcars, factors=3)
scatterplot3d(as.data.frame(unclass(f$loadings)), main="3D factor loadings", color=1:ncol(mtcars), pch=20)

注意:变量名称不应该作为标签放在图上,但在我看来可能会成为一个独特的传说,特别是对于 3D 图。

【讨论】:

  • 感谢 Darcozig!事实上,人们并不总是理解数字。但是,如果您将它们显示在图表中,事情就会变得容易得多。这就是为什么在图表中绘制因子。我仍然不确定这是否真的能解决我的问题或增加我的问题:) 但让我们看看!
  • @user697363:你是对的!昨晚我在想这个问题,后来 Joran 的回答给我带来了一些启发:嗯,它可以通过某种方式完成。我更新了我的答案,希望你能找到一些有用的东西。
  • @darcozig:感谢您的回答。很高兴听到我启发了某人去思考。所有的答案都很有趣。这个问题对我来说是一个很好的学习。
【解决方案2】:

看起来有一个包: http://factominer.free.fr/advanced-methods/multiple-factor-analysis.html

附带示例代码和多个因素。加载FactoMineR 包并玩转。

这里有很好的概述: http://factominer.free.fr/docs/article_FactoMineR.pdf

他们网页上的图表:


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

【讨论】:

  • 感谢 gsk3 向我推荐新包!我不知道它。也为答案。
  • 我不确定:在我看来,仍然显示了 2 个因素,尽管情节看起来非常好。
  • @daroczig 我认为你是对的。留下答案,因为包本身看起来有用于多因素分析的有用功能。
【解决方案3】:

正如 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)
}

这对我来说导致了以下情节:

请注意,我必须稍微调整一下 x 和 y 限制,以及其他各种复杂的位。您的数据会有所不同,需要进行不同的调整。此外,用五个因子绘制每对因子载荷会产生相当繁忙的散点图集合。

【讨论】:

  • 谢谢乔兰!你的回答真的很有帮助。你是对的,绘制 5 个因素可能没有意义。但让我试试我的数据集并查看结果。
猜你喜欢
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多