如何使用PCA的加载因子来计算可应用于R中数据帧中每个个体的索引?

时间:2019-05-29 19:53:38

标签: r pca

我正在使用基于约30个变量的主成分分析(PCA)来构成一个将R中3个不同类别(顶部,中间,底部)中的个人分类的索引。

我有一个〜2000个人的数据框,其中包含28个二进制和2个连续变量。

现在,我想使用PC1中的加载因子来构造一个 该索引将我的2000个个体分为3个不同的组,对这30个变量进行了分类。

问题:尽管进行了广泛的研究,但我仍然找不到如何从PCA_loadings中提取负载因子,给每个人一个分数(基于30个变量的负载),随后我可以对每个人进行排名(对于进一步分类)。在图形中显示加载因子是否有意义?

  1. 我已经执行了以下步骤:

a)使用PCA_outan来运行PCA <-prcomp(na.omit(df1),scale = T)

b)使用PCA_loadings <-PCA_outcome $ rotation

提取载荷

c)删除了所有加载因子接近0的变量。

  1. 我考虑过创建30个新变量,每个加载因子一个,每个二进制变量== 1,我将对其求和(尽管我不确定如何继续使用连续变量)。因此,我将为每个人分配一个分数。但是,我不知道如何将加载因子中的30个值汇总为每个人的得分。

R代码

df1 <- read.table(text=" 
          educ     call      house  merge_id    school  members       
A           1        0          1      12_3        0      0.9
B           0        0          0      13_3        1      0.8
C           1        1          1      14_3        0      1.1
D           0        0          0      15_3        1      0.8 
E           1        1          1      16_3        3      3.2", header=T)


## Run PCA
PCA_outcome <- prcomp(na.omit(df1), scale = T)

## Extract loadings
PCA_loadings <- PCA_outcome$rotation


## Explanation: A-E are 5 of the 2000 individuals and the variables (education, call, house, school, members) represent my 30 variables (binary and continuous).

预期结果: -获得每个人的排名分数 -随后,为每个人分配1-3类。

1 个答案:

答案 0 :(得分:0)

我不确定您要问的是什么,但不是100%肯定,但这是我认为您要问的问题的答案。

首先,PCA的PC1不一定会为您提供社会经济地位指数。如here所述,PC1只是“尽可能多地考虑数据的可变性”。 PC1可能很好地衡量了数据集的社会经济状况,但是您必须认真检查负载,看看这是否有意义。根据负载的迹象,可能是非常负的PC1对应非常积极的社会经济状况。正如我所说:用批判的眼光看待结果。可以here找到有关如何计算PC分数的说明。无论如何,这是属于Cross Validated的讨论,所以让我们看一下代码。

听起来您想执行PCA,拔出PC1,并将其与原始数据帧(和merge_id)相关联。如果那是您的目标,这是一个解决方案。

# Create data frame
df <- read.table(text = "educ     call      house  merge_id    school  members       
A           1        0          1      12_3        0      0.9
B           0        0          0      13_3        1      0.8
C           1        1          1      14_3        0      1.1
D           0        0          0      15_3        1      0.8 
E           1        1          1      16_3        3      3.2", header = TRUE)

# Perform PCA
PCA <- prcomp(df[, names(df) != "merge_id"], scale = TRUE, center = TRUE)

# Add PC1
df$PC1 <- PCA$x[, 1]

# Look at new data frame
print(df)
#>   educ call house merge_id school members        PC1
#> A    1    0     1     12_3      0     0.9  0.1000145
#> B    0    0     0     13_3      1     0.8  1.6610864
#> C    1    1     1     14_3      0     1.1 -0.8882381
#> D    0    0     0     15_3      1     0.8  1.6610864
#> E    1    1     1     16_3      3     3.2 -2.5339491

reprex package(v0.2.1.9000)于2019-05-30创建

正如您所说的必须使用PCA,我假设这是一个家庭作业问题,因此,我建议您阅读PCA,以便您了解其功能,并有什么用。