Z 标准化使得 PC1 和 PC2 在此 PCA 分析中完全相同:为什么?
Z-standardization makes PC1 and PC2 exactly the same in this PCA analysis: Why?
我正在尝试使用 R 中的 psych 包执行 PCA 分析。
我有两个变量,我想将它们组合成一个显示生活水平的组件:
- slvpen:养老金领取者的生活水平:0 = 极差,10 = 极好。
- slvuemp:失业者的生活水平:0 = 极差,10 = 极好。
slvpens:
Min. 1st Qu. Median Mean 3rd Qu. Max. Standard Deviation
0.000 3.000 5.000 4.587 6.000 10.000 2.28857
slvuemp:
Min. 1st Qu. Median Mean 3rd Qu. Max. Standard Deviation
0.000 3.000 4.000 4.095 5.000 10.000 2.099822
使用 phych-package,我进行了分析:
(slv_pca <- ESS %>% prcomp(
formula = ~ slvpens + slvuemp, # Selecting variables
data = ., na.action = na.exclude)) # Exclude NAs
结果如下:
Standard deviations (1, .., p=2):
[1] 2.651352 1.611470
Rotation (n x k) = (2 x 2):
PC1 PC2
slvpens -0.7699869 0.6380597
slvuemp -0.6380597 -0.7699869
一切都很好。但是,如果我对变量进行 z 标准化:
(slv_pca <- ESS %>% prcomp(
formula = ~ slvpens + slvuemp, # Selecting variables
data = ., na.action = na.exclude, # Exclude NAs
center = TRUE, scale = TRUE)) # Z-standardize
图片变了,PC1和PC2相等了。另外,我的两个组件的贡献完全一样?
Standard deviations (1, .., p=2):
[1] 1.2058739 0.7388289
Rotation (n x k) = (2 x 2):
PC1 PC2
slvpens -0.7071068 0.7071068
slvuemp -0.7071068 -0.7071068
这是怎么回事?
在 PCA 之前缩放/居中的目的是确保您为变量赋予相同的权重,并使您的 PC 分数居中,查看更多 here。现在你有两个已经在同一尺度上的变量。
你不需要缩放,看我下面的例子:
# here i convert the iris columns into 1:10 ranks
scale_iris =apply(iris[,1:4],2,function(i)as.numeric(cut(i,10,labels=1:10)))
par(mfrow=c(1,2))
plot(prcomp(iris[,1:4],scale=TRUE,center=TRUE)$x[,1:2],
col=factor(iris$Species),main="Actual iris PCA")
plot(prcomp(scale_iris,center=TRUE)$x[,1:2],
col=factor(iris$Species),main="Scale iris PCA")
如果序数变量中有信息,并且它们在同一尺度上,则会被PCA捕获。
另外值得注意的是,默认情况下 prcomp()
将数据居中(应该如此)并且除非指定否则不会缩放。
我正在尝试使用 R 中的 psych 包执行 PCA 分析。
我有两个变量,我想将它们组合成一个显示生活水平的组件:
- slvpen:养老金领取者的生活水平:0 = 极差,10 = 极好。
- slvuemp:失业者的生活水平:0 = 极差,10 = 极好。
slvpens:
Min. 1st Qu. Median Mean 3rd Qu. Max. Standard Deviation
0.000 3.000 5.000 4.587 6.000 10.000 2.28857
slvuemp:
Min. 1st Qu. Median Mean 3rd Qu. Max. Standard Deviation
0.000 3.000 4.000 4.095 5.000 10.000 2.099822
使用 phych-package,我进行了分析:
(slv_pca <- ESS %>% prcomp(
formula = ~ slvpens + slvuemp, # Selecting variables
data = ., na.action = na.exclude)) # Exclude NAs
结果如下:
Standard deviations (1, .., p=2):
[1] 2.651352 1.611470
Rotation (n x k) = (2 x 2):
PC1 PC2
slvpens -0.7699869 0.6380597
slvuemp -0.6380597 -0.7699869
一切都很好。但是,如果我对变量进行 z 标准化:
(slv_pca <- ESS %>% prcomp(
formula = ~ slvpens + slvuemp, # Selecting variables
data = ., na.action = na.exclude, # Exclude NAs
center = TRUE, scale = TRUE)) # Z-standardize
图片变了,PC1和PC2相等了。另外,我的两个组件的贡献完全一样?
Standard deviations (1, .., p=2):
[1] 1.2058739 0.7388289
Rotation (n x k) = (2 x 2):
PC1 PC2
slvpens -0.7071068 0.7071068
slvuemp -0.7071068 -0.7071068
这是怎么回事?
在 PCA 之前缩放/居中的目的是确保您为变量赋予相同的权重,并使您的 PC 分数居中,查看更多 here。现在你有两个已经在同一尺度上的变量。
你不需要缩放,看我下面的例子:
# here i convert the iris columns into 1:10 ranks
scale_iris =apply(iris[,1:4],2,function(i)as.numeric(cut(i,10,labels=1:10)))
par(mfrow=c(1,2))
plot(prcomp(iris[,1:4],scale=TRUE,center=TRUE)$x[,1:2],
col=factor(iris$Species),main="Actual iris PCA")
plot(prcomp(scale_iris,center=TRUE)$x[,1:2],
col=factor(iris$Species),main="Scale iris PCA")
如果序数变量中有信息,并且它们在同一尺度上,则会被PCA捕获。
另外值得注意的是,默认情况下 prcomp()
将数据居中(应该如此)并且除非指定否则不会缩放。