Я использую анализ основных компонентов (PCA) на основе ~ 30 переменных, чтобы составить индекс, который классифицирует людей по 3 различным категориям (верхняя, средняя, нижняя) в R.
У меня есть фрейм данных из ~ 2000 человек с 28 двоичными и 2 непрерывными переменными.
Теперь я хотел бы использовать коэффициенты нагрузки из ПК1 для построения индекс, который классифицирует мои 2000 человек по этим 30 переменным в 3 разные группы.
Проблема: Несмотря на обширные исследования, я не смог выяснить, как извлечь коэффициенты нагрузки из PCA_loadings, дать каждому человеку оценку (на основе нагрузок 30 переменных), что впоследствии позволило бы мне ранжировать каждого человека (для дальнейшей классификации). . Имеет ли смысл отображать коэффициенты нагрузки на графике?
a) Запустил PCA, используя PCA_outcome <- prcomp(na.omit(df1), scale = T)
б) Извлечены загрузки с помощью PCA_loadings <- PCA_outcome$rotation
в) Удалены все переменные, для которых коэффициенты загрузки были близки к 0.
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 для каждого человека, вы можете использовать PCA_outcome$x[, 1]
.
Большое спасибо за ваш ответ @Lyngbakr. Эквивалентна ли оценка ПК индексу? Если да, то как создается эта партитура для ПК? Просто суммируя коэффициенты нагрузки для всех переменных для каждого человека? У меня проблема в том, что фрейм данных, который я использую для запуска PCA, содержит информацию только о домохозяйствах. Однако мне нужно будет объединить каждое домохозяйство с другим набором данных для отдельных лиц (чтобы ранжировать людей в соответствии с оценками их домохозяйств). Таким образом, мне нужен merge_id в моем фрейме данных PCA. Есть ли способ выполнить PCA, сохраняя merge_id в моем фрейме данных (см. Отредактированный df выше).
«Эквивалентна ли оценка ПК индексу?» - под этим я подразумеваю следующее: если бы переменные, выбранные для PCA, указывали на социально-экономический статус людей, дал бы PC мне ранжирование социально-экономического статуса для каждого человека?
Я не уверен на 100%, что вы спрашиваете, но вот ответ на вопрос, который, я думаю, вы задаете.
Прежде всего, PC1 PCA не обязательно предоставит вам индекс социально-экономического статуса. Как поясняется здесь, PC1 просто «учитывает как можно большую изменчивость данных». PC1 вполне может работать как хороший показатель социально-экономического статуса для вашего набора данных, но вам придется критически изучить нагрузки и посмотреть, имеет ли это смысл. В зависимости от знаков нагрузок может быть так, что очень отрицательному PC1 соответствует очень положительный социально-экономический статус. Как я уже сказал: посмотрите на результаты критически. Объяснение того, как рассчитываются баллы ПК, можно найти здесь. В любом случае, это обсуждение относится к Перекрестная проверка, так что давайте перейдем к коду.
Похоже, вы хотите выполнить PCA, вытащить PC1 и связать его с исходным фреймом данных (и merge_id
s). Если это ваша цель, вот решение.
# 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
Created on 2019-05-30 by the reprex package (v0.2.1.9000)
Поскольку вы говорите, что имеют использовать PCA, я предполагаю, что это вопрос домашнего задания, поэтому я бы порекомендовал прочитать о PCA, чтобы вы поняли, что он делает и для чего он полезен.
Спасибо! Это именно то, что я искал!
Обязательно ли использовать PCA? Если вы хотите разделить своих людей на три группы, почему бы не использовать кластерный подход, например, k-средних с k = 3?