屏幕图:米mvs成分/因素米- 1m−1

机器算法验证 主成分分析 因子分析
2022-04-13 13:36:30

@ttnphns在这里评论说

Cattell scree-plot 规则有两种阐述:如果“弯头”是第 m 个特征值,(1)选择提取 m 个分量;或 (2) 选择提取 m-1 个分量。没有人知道哪个更好——因为整个规则非常具有启发性。

尽管很可能在大约 7 年后这个问题仍未得到研究,但我对此事感到好奇。当我在读研究生的时候,我被教导要取分量,但这对我来说直觉上很奇怪,因为我们经常看到如下图m

屏幕绘图示例

由于第四个组件是“瓦砾”,这似乎支持 3 个组件的解决方案,我从该图上获取的 IBM 网站说“碎石图确认了三个组件的选择”。然而,我被教导的规则会说答案应该是四个。

vs的论点是什么,反之亦然?mm1

如果我们使用与因子分析相关的碎石图,答案是否会改变(因为通常使用 PCA 的标准来选择因子分析中的因子数量)?

我知道选择组件/因素的其他方法比碎石图有更好的声誉。但是这个问题似乎仍然很重要,因为碎石地块仍然经常使用。

2个回答

显着特征值

您可以使用某种模拟来计算特征值超过某个限制的概率,并以此为基础进行选择。在 R-packagepsych中,有一个函数可以执行此操作(如下所示)。

如果您假设来自高斯分布总体的样本没有相关性,那么您应该期待一个所有点/特征值都在弱斜率上的碎石图。(我不知道这个斜率的公式,但你可以通过模拟计算它,或者基于下面完成的分布,或者通过某种自举)

应用于你的情节

如果我们松散地应用这个你的情节(我没有数据,但我们可以想象这条线会是怎样的):你的第 4 个特征值在这个弱斜率/线上,并且瓦砾和陡峭之间有明显的区别爬坡道。所以可能第四个特征值不是很有意义(或者方差只是不显着/不明显或适当缩放;解释 PCA 特征值的先决条件是任何潜在的方差来源都将具有相同的比例)。第 4 个组件确实是瓦砾的一部分。第 4 个特征值与第 5 个特征值几乎没有区别。因此,任何包含 4-th 的论点都应该与包含 5-th 一样强大。

然而,意义往往不是问题

m vs. m-1 问题更多是当碎石图不那么明显时的情况。但是,在那种不太清楚的情况下,问题在于组件是否具有(统计)显着高的特征值(更多关于下面的示例)。但相反,关于效应大小是否足够大或占主导地位。

在这种情况下,“诀窍”是寻找最显着的特征值,然后加 1(只是为了确定。我猜。我不太了解这个规则。但无论如何它不是一个非常严格的规则。)。

心理包和手动绘图的示例

下面的 R 代码为Harman 的示例 7.4生成下面的碎石图。

  • 左侧的图是使用包中的单个函数创建fa.Parallelpsych该图给出了碎石图以及一条与模拟的特征值相关的线,其中高斯分布数据具有单位矩阵作为协方差。

  • 右侧的绘图是手动创建的。您可以使用代码(我希望它足够直观)来弄清楚它是如何工作的。

    在这个图中,我对特征值使用了稍微不同的度量。我根据所有较低特征值的平均值对特征值进行了缩放。这样做的原因是由于存在更高的特征值,正在考虑的特征值将相对低于用于比较的没有这些更高特征值的随机高斯数据。

    结果是更多的点在线上并且似乎很重要。那不是很多吗?好吧,也许不是。比较是使用完全球形的数据模型进行的,并且方差在所有方向上都相等。但在实践中,数据在方差/特征值上有一些变化并不奇怪。即使组间不存在导致方差增加的结构、聚类或其他方差,那么人们仍然可能认为所有方向的噪声都不相同。

例子

set.seed(1)
psych::fa.parallel(Harman74.cor$cov, n.obs = 145, fa = "pc",
                   main = "plot using psych package")

### compute eigenvalues for Harman74 data
### A correlation matrix of 24 psychological tests given
### to 145 seventh and eight-grade children in a Chicago
### suburb by Holzinger and Swineford
ev <- eigen(Harman74.cor$cov)$values

### simulate normal distributed data
### and compute the eigen values
sim_eigen <- function(n_var,n_points) {
  x <- matrix(rnorm(n_var*n_points), ncol = n_var)
  m <- cov(x) 
  sim_ev <- eigen(m)$values
  return(sim_ev)
}

### relative numbers 
### compute the eigenvalue relative to the mean of the lower values
f_rel <- function(x_in) {
  l <- length(x_in)
  x_out <- sapply(1:l, FUN = function(k) {
    x_in[k]/mean(x_in[k:l]) 
  })
  return(x_out)
}

### simulate 1000 times
sim <- replicate(1000,f_rel(sim_eigen(24,145)))

### compute mean and upper and lower 90% interval
ev_mu <- rowMeans(sim) ### compute the mean of thousand simulations
ev_up <- sapply(1:length(ev_mu), FUN = function(k) {
  quantile(sim[k,], probs = 0.95)
})
ev_low <- sapply(1:length(ev_mu), FUN = function(k) {
  quantile(sim[k,], probs = 0.05)
})

### plot alternative
plot(f_rel(ev), main = "plot using alternative measure", col = 4, pch = 4, type = "b",
     xlab = "Component Number",
     ylab = "eigen value relative to smaller eigenvalues")
lines(ev_mu)
lines(ev_up, col = 1, lty = 2)
lines(ev_low, col = 1, lty = 2)

下面是我们自己生成数据的模拟。现在我们根据高斯分布生成数据。

x <- MASS::mvrnorm(145, mu = rep(0,24),
                   Sigma = diag(c(8,2,2,1.3,rep(1,20))))
cm <- cov(x)
ev <- eigen(cm)$values

结果是您可以在模拟带宽内更接近地看到特征值。特征值为 8、2、2 的向量被挑选出来。特征值为 1.3 的向量太难了。

更完美的例子


概括

上面的例子表明你可能会得到一个很好的清晰的碎石图,就像最后一个图一样。但是,只有当除了少数向量/分量(您希望检测和探索)之外所有特征值都相同时,才会出现这种情况。

在许多实际情况下,特征值/方差相等的假设在任何情况下都是无效的。碎石地块看起来并不完美,瓦砾和陡峭的山丘之间没有明显的边界。在这种情况下对碎石图的分析并不是要找到具有统计意义的特征值。但相反,碎石图是为了查看不同组件的重要性/方差的分布。

从技术上讲,所有组件都可能很重要。PCA 的重点不是确定哪些是重要的,而是为了数据缩减的目的找到一些务实的临界值。如果清晰,碎石图可以帮助您对不同的组件进行分类,并确定一组不同的大值。

以下模拟表明正确的 Cattell碎石图规则是 "elbow minus one"即选择比“肘”位置对应的数少一的因子数。这里考虑的碎石图是“经典”图——处理非约简相关或协方差矩阵的特征值;也就是说,它是“在因子分析之前完成的初步PCA”输出的特征值。

我正在生成具有相关矩阵基础的因子的随机因子加载矩阵(如@amoeba的“更新 3”的后续 A部分中所述,然后观察它们的特征值碎石图。420x20

模拟是 4 倍的(因此下面有 4 个碎石图)。

扩散因子结构,20 个随机人口矩阵

扩散因子结构是因子载荷分布平稳的地方;没有“高”与“低”负载的双峰。一个因素在项目(变量)中没有“收藏夹”,一个项目可以被一个因素高度、中等或轻微地加载。

20 组随机载荷(加上随机唯一性)相应地产生了 20 个协方差矩阵,每个矩阵都有单位对角线,即相关矩阵。这些被标记为“人口”矩阵,因为每个都基于不同的因子加载矩阵。他们共享的是4相同数量的项目背后的相同数量的因素20叠加在一张图表上的 20 个碎石图:

在此处输入图像描述

我们看到,虽然因子的正确数量是4,但主要(最后发音的)“肘部”几乎总是对应于第 5 个特征值(pr.分量)。该特征值始终低于1,与相关矩阵的凯撒规则一致。

扩散因子结构,20个随机样本矩阵

选择了上述 20 个矩阵中的一个(您可以将其上面的碎石线识别为粗体黑色),并200从 Wishart 分布中产生了在样本大小下的 20 个随机样本实现。每个样本协方差矩阵都被重新标准化为相关矩阵。叠加在一张图表上的 20 个碎石图:

在此处输入图像描述

我们再次看到,肘部与幅度低于 的第 5 个特征值(pr.分量)相反1和以前一样,因子的真实数量是4

清晰的因子结构,20个随机人口矩阵

一个尖锐的因子结构是因子载荷双峰分布的地方:“高”与“低”载荷。在我的模拟设计中,每个因素都高度加载了 5 个项目,并且每个项目仅加载了一个因素。这是一个最“简单的结构”的模拟,您可能会期望对一些已开发和经过因素验证的心理问卷进行因素分析。

20 组随机载荷(加上随机唯一性)相应地产生了 20 个协方差矩阵,每个矩阵都有单位对角线,即相关矩阵。就像在第一部分中一样,这些再次被标记为不同的“人口”矩阵,4对于相同数量的项目共享相同数量的因子2020个碎石地块:

在此处输入图像描述

这张图片与第一张图片的不同之处在于锐化因素的影响:显然4- 不少于 - 强度大致相等的因素,从第 4 位对面的向上肘部的出现可以看出这一点。零件。其余的 - 以及我们感兴趣的 - 仍然与之前的照片相同。

清晰的因子结构,20个随机样本矩阵

从刚刚超过 20 个的矩阵中选择了一个矩阵,在样本量下它的 20 个随机样本实现是200从 Wishart 分布中产生的,并标准化为相关性,一切都与第 2 节类似。碎石图:

在此处输入图像描述

相同的基本发现。

结论

只要完成的模拟是相关的,并且如果在相关矩阵的特征值的碎石图上,您看到与第 m 个分量相对的清晰的“弯头”(向下弯头,然后是一条斜线),请考虑m-1以下因素提取为“卡特尔规则”。

上述这些模拟与相关矩阵(或具有近似相等对角元素的协方差矩阵)的因子分析有关。当具有强烈不平衡方差的协方差矩阵输入到探索性 FA 时,事情可能会复杂化。特别是卡特尔的“肘部”本身几乎可以消失。

添加了人口噪音

有人可能会说,人口相关矩阵(例如第一张和第三张图片)是在没有人口噪声的情况下生成的。也就是说,如果您正确地对矩阵进行 FA,则可以20x4精确地恢复生成它们的载荷(矩阵)。有人可能会说这有点理想化,在实际人口中总是存在公因数,这些公因数比模型中考虑的公因数要弱得多,但可能很多;特别是,这些因素可能导致成对的过剩、部分关联。这些噪声因素会被因子模型忽略,但它们会干扰因子分析。

除了这个推理,我在每个正在创建的人口矩阵的非对角相关性上添加了一个小噪声。(噪声实际上是由单位矩阵的 Wishart 分布产生的,并且随机干扰的大小经过校准,以便矩阵的整体 Kaiser-Meyer-Olkin MSA会从大约下降0.8-0.9到大约,0.6-0.7同时矩阵仍保持其正定性。 MSA 的减少是偏相关加强的一个症状。)因此是一种将被因子模型忽略的人群噪声因子引入的方法。

我想知道添加到矩阵中的噪声是否会影响碎石图的外观,即 Cattell 的“肘部”的位置。

在此处输入图像描述

上图是此答案中第一个的副本。下一个是添加噪音的地方。肘部位置没有变化或移位。它仍然是针对 5 公关。零件。然而,碎石的形状有微小的变化。整个“主食”变得不那么弯曲了:碎石向左陡峭,向右陡峭,比以前更陡峭。因此,肘点有点抬高。这就是我们通过非对角线噪声引入的初级公因子存在的可识别效果。