Если вы вычислили socialcapital.pca
как
socialcapital.pca <- prcomp(standardisedconcentrations)
и что standardisedconcentrations
равно стандартизированным переменным анализа в том же порядке, в котором они появляются в наборе данных анализа , тогда вы можете просто прикрепить коды FIPS (как другой столбец или как имена строк) к выходной вектор ПК, созданный функцией calcpc()
, поскольку порядок строк в оценках основного компонента совпадает с порядком строк в исходных данных.
Также обратите внимание на две вещи:
- Вы можете избежать двух циклов внутри функции
calcpc()
и ускорить процесс, вычислив вектор ПК с использованием следующего матричного вычисления:
pc <- variables %*% loadings
при условии, что вы вызываете функцию calcpc()
как:
calcpc(standardisedconcentrations, socialcapital.pca$rotation[,1,drop=FALSE])
где я добавил drop=FALSE
, чтобы убедиться, что первый столбец атрибута rotation
сохранен как матрица с одним столбцом.
- Если вы вызовете функцию
princomp()
вместо функции prcomp()
для запуска анализа главных компонентов, вы получите главные компоненты или оценки непосредственно как часть выходного объекта (в атрибуте scores
).
Вам просто нужно знать о различиях в работе PCA с использованием princomp()
по сравнению с prcomp()
, в основном, цитируя документацию:
princomp:"Обратите внимание, что при расчете по умолчанию для ковариационной матрицы используется делитель N."
prcomp:"В отличие от princomp, дисперсии вычисляются с помощью обычного делителя N - 1."
РЕДАКТИРОВАТЬ: Как указано в моем комментарии ниже, вы также можете установить для атрибута rownames матрицы анализа или фрейма данных переменную FIPS
в ваших данных и результаты анализа, выполненного princomp()
или prcomp()
будут содержать эти идентификаторы в качестве имен строк.
Пример:
Использование princomp()
:
rownames(standardisedconcentrations) <- FIPS
socialcapital.pca <- princomp(standardisedconcentrations)
Тогда имена строк матрицы главных компонентов socialcapital.pca$scores
будут содержать коды FIPS
.
Или используя prcomp()
:
rownames(standardisedconcentrations) <- FIPS
socialcapital.pca <- prcomp(standardisedconcentrations)
pc1 <- standardisedconcentrations %*% socialcapital.pca$rotation[,1]
Тогда имена строк pc1
будут содержать коды FIPS
.