Chr*_*gel 27 statistics r princomp
我想知道测量/参数对计算出的主要成分之一的贡献程度.
现实世界的描述:
问题:如何获得每台PC的贡献百分比(每个参数)?
我的期望:PC1由参数1的30%,参数2的50%,参数3的20%,参数4的0%和参数5的0%组成.PC2由...组成
一个有5个虚拟参数的例子:
a <- rnorm(10, 50, 20)
b <- seq(10, 100, 10)
c <- seq(88, 10, -8)
d <- rep(seq(3, 16, 3), 2)
e <- rnorm(10, 61, 27)
my_table <- data.frame(a, b, c, d, e)
pca <- princomp(my_table, cor=T)
biplot(pca) # same: plot(pca$scores[,1], pca$scores[,2])
pca
summary(pca)
Run Code Online (Sandbox Code Playgroud)
我的信息隐藏在哪里?
Rei*_*son 47
您想要$loadings返回对象的组件:
R> class(pca$loadings)
[1] "loadings"
R> pca$loadings
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
a -0.198 0.713 -0.671
b 0.600 0.334 -0.170 0.707
c -0.600 -0.334 0.170 0.707
d 0.439 -0.880 -0.180
e 0.221 0.701 0.678
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
SS loadings 1.0 1.0 1.0 1.0 1.0
Proportion Var 0.2 0.2 0.2 0.2 0.2
Cumulative Var 0.2 0.4 0.6 0.8 1.0
Run Code Online (Sandbox Code Playgroud)
请注意,这有一种特殊print()方法可以抑制小负载的打印.
如果您希望将其作为相对贡献,则将每列的加载量相加并将每个加载值表示为列(加载)总和的比例,注意使用绝对值来计算负载.
R> load <- with(pca, unclass(loadings))
R> load
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
a -0.1980087 0.712680378 0.04606100 -0.6713848 0.000000e+00
b 0.5997346 -0.014945831 0.33353047 -0.1698602 7.071068e-01
c -0.5997346 0.014945831 -0.33353047 0.1698602 7.071068e-01
d 0.4389388 0.009625746 -0.88032515 -0.1796321 5.273559e-16
e 0.2208215 0.701104321 -0.02051507 0.6776944 -1.110223e-16
Run Code Online (Sandbox Code Playgroud)
然后,最后一步产生对每个主成分的比例贡献
R> aload <- abs(load) ## save absolute values
R> sweep(aload, 2, colSums(aload), "/")
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
a 0.09624979 0.490386943 0.02853908 0.35933068 0.000000e+00
b 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
c 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
d 0.21336314 0.006623362 0.54544349 0.09614059 3.728970e-16
e 0.10733880 0.482421595 0.01271100 0.36270762 7.850462e-17
R> colSums(sweep(aload, 2, colSums(aload), "/"))
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
如果使用首选项,prcomp()则相关的加载项在$rotation组件中:
R> pca2 <- prcomp(my_table, scale = TRUE)
R> pca2$rotation
PC1 PC2 PC3 PC4 PC5
a -0.1980087 0.712680378 -0.04606100 -0.6713848 0.000000e+00
b 0.5997346 -0.014945831 -0.33353047 -0.1698602 -7.071068e-01
c -0.5997346 0.014945831 0.33353047 0.1698602 -7.071068e-01
d 0.4389388 0.009625746 0.88032515 -0.1796321 -3.386180e-15
e 0.2208215 0.701104321 0.02051507 0.6776944 5.551115e-17
Run Code Online (Sandbox Code Playgroud)
相关的咒语现在是:
R> aload <- abs(pca2$rotation)
R> sweep(aload, 2, colSums(aload), "/")
PC1 PC2 PC3 PC4 PC5
a 0.09624979 0.490386943 0.02853908 0.35933068 0.000000e+00
b 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
c 0.29152414 0.010284050 0.20665322 0.09091055 5.000000e-01
d 0.21336314 0.006623362 0.54544349 0.09614059 2.394391e-15
e 0.10733880 0.482421595 0.01271100 0.36270762 3.925231e-17
Run Code Online (Sandbox Code Playgroud)