Answers:
我想澄清我在@ Peter-Flom的回答下留下的评论,但可能值得在答案中写。通过在接近正交的数据上运行PCA,可以在多大程度上减小尺寸?答案是“取决于” 是对相关矩阵还是协方差矩阵执行PCA。
如果在相关矩阵上使用PCA,则由于它与单位矩阵仅稍有不同,因此存在球形对称性,使所有方向“具有同等的信息性”。在数学上等价的方法上,将变量的方差重新缩放为PCA之前的值,将产生相同的结果。虽然PCA输出将识别出某些方差比其他方差略低的成分,但是这可以归因于(如果我们假设总体中的相关性为零)仅不过是样本中的机会方差,因此这不是抛弃这些成分的好理由组件。实际上,随着样本数量的增加,组件标准偏差之间的差异应会减小。我们可以在仿真中确认这一点。
set.seed(123)
princompn <- function(n, sd1=1, sd2=1, sd3=1, sd4=1, cor=TRUE) {
x1 <- rnorm(n, mean=0, sd=sd1)
x2 <- rnorm(n, mean=0, sd=sd2)
x3 <- rnorm(n, mean=0, sd=sd3)
x4 <- rnorm(n, mean=0, sd=sd4)
prcomp(cbind(x1,x2,x3,x4), scale.=cor)
}
输出:
> pc100 <- princompn(100)
> summary(pc100)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0736 1.0243 0.9762 0.9193
Proportion of Variance 0.2882 0.2623 0.2382 0.2113
Cumulative Proportion 0.2882 0.5505 0.7887 1.0000
>
> pc1m <- princompn(1e6)
> summary(pc1m)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0008 1.0004 0.9998 0.9990
Proportion of Variance 0.2504 0.2502 0.2499 0.2495
Cumulative Proportion 0.2504 0.5006 0.7505 1.0000
但是,如果您使用协方差矩阵而不是相关矩阵来进行PCA (等效地:如果在应用PCA之前我们不将标准偏差缩放为1),那么答案取决于变量的范围。如果您的变量具有相同的方差,那么我们仍然具有球对称性,因此就没有“特权方向”,并且无法实现尺寸缩减。
> pcEqual <- princompn(n=1e6, sd1=4, sd2=4, sd3=4, sd4=4, cor=FALSE)
> summary(pcEqual)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0056 4.0010 3.9986 3.9936
Proportion of Variance 0.2507 0.2502 0.2499 0.2492
Cumulative Proportion 0.2507 0.5009 0.7508 1.0000
但是,由于混合了高方差变量和低方差变量,所以对称性更像是椭圆形,其中一些宽轴而另一些细。在这种情况下,高方差变量(椭圆形较宽)上将加载高方差分量,而低方差变量(椭圆体的方向较窄)上将加载低方差分量。
> pcHiLo <- princompn(n=1e6, sd1=4, sd2=4, sd3=1, sd4=1, cor=FALSE)
> summary(pcHiLo)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0018 3.9985 1.0016 1.00005
Proportion of Variance 0.4709 0.4702 0.0295 0.02941
Cumulative Proportion 0.4709 0.9411 0.9706 1.00000
> round(pcHiLo$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.460 0.888 0.000 0.000
x2 -0.888 0.460 0.000 0.000
x3 0.000 0.000 -0.747 -0.664
x4 0.000 0.000 0.664 -0.747
如果变量具有非常不同的方差(在几何上又是椭圆形,但所有轴都不同),则正交性将使第一台PC在最大方差变量上加载非常重的负载,依此类推。
> pc1234 <- princompn(n=1e6, sd1=1, sd2=2, sd3=3, sd4=4, cor=FALSE)
> summary(pc1234)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 3.9981 3.0031 1.9993 1.00033
Proportion of Variance 0.5328 0.3006 0.1332 0.03335
Cumulative Proportion 0.5328 0.8334 0.9667 1.00000
> round(pc1234$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.000 0.000 -0.001 1.000
x2 0.001 -0.001 1.000 0.001
x3 0.003 -1.000 -0.001 0.000
x4 1.000 0.003 -0.001 0.000
在后两种情况下,您可以考虑丢弃低方差分量以实现降维,但这完全等同于首先丢弃最低方差变量。本质上,正交性允许您使用低方差变量来识别低方差分量,因此,如果您打算以这种方式降低维数,则不清楚使用PCA这样做是否会受益。
注意:讨论变量未按比例缩放到单位方差的情况(即使用协方差而不是相关矩阵)所花费的时间长度,不应被视为表明该方法在某种程度上更重要,当然也不是它更好”。情况的对称性更加微妙,因此需要更长的讨论时间。
如果所有N个变量都大致正交,则尺寸缩小将做得很少。例如R
set.seed(123)
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
x4 <- rnorm(100)
x5 <- rnorm(100)
x6 <- rnorm(100)
x7 <- rnorm(100)
x8 <- rnorm(100)
x9 <- rnorm(100)
x10 <- rnorm(100)
df1 <- cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)
pcsol <- princomp(df1)
loadings(pcsol)
本质上,“正交”意味着“已经达到最小尺寸”。
x1<-rnorm(100, sd=0.1)
并且pcsol <- princomp(df1, cor=FALSE)
存在差异,特别是如果我们查看summary(pcsol)
。(我并不是说cov是比cor更好的方法,只是它有可能。)