Обзор
Я пытаюсь сделать PCA некоторых данных об остановке сердца.Используя функцию «PCA» из пакета FactoMineR, я создал график PCA, который выглядел великолепно, но у меня возникли проблемы при попытке воспроизвести его с помощью базовой функции R «prcomp».Когда я использую функцию «apply» для корреляции («cor») результатов prcomp на зависимую переменную из данных, я получаю сообщение об ошибке: «Ошибка в FUN (newX [, i], ...): несовместимые измерения».
Данные получены из: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0204169
Общие изменения, внесенные в данные
Перед загрузкой в RI добавлен новый столбец в excel (RESP_s), в котором то, что R считал как символьную переменную («RESPTIME» в формате чч: мм: сс), превратилось в числовую переменную (и).
Я назвал набор данных "ohca.data".
В R мне нужно было преобразовать данные о выживании ("HOSPDISCHARGE") в числовые данные.
ohca.data$survival.recode <- dplyr::recode(HOSPDISCHARGE, "Discharge alive" = "1", "Dead" = "0")
ohca.data$survival.n <- as.numeric(ohca.data$survival.recode)
PCA
Фон для PCA
Квыполнить PCA Сначала я преобразовал интересующие меня переменные (GENDER, AGE, RHYTHM, LOCATION, WITNESSED и т. д.) в факторные переменные.
gender.factor <- as.factor(ohca.data$GENDER)
age.factor <- as.factor(ohca.data$AGE)
и т. Д.
Затем я создал таблицу факторизованных переменных.
ohca.factor.vars <- cbind(gender.factor, age.factor, rhythm.factor, location.factor, witnessed.factor, aed.factor, cpr.factor, responsetime.factor, shock.factor, stemi.factor, intubation.factor, vasc.factor, adrenaline.factor, atropine.factor, amiod.factor, aspirin.factor, heparine.factor, bicarb.factor, calcium.factor, mag.factor, glucose.factor)
FactoMineR PCA
Используя пакет FactoMineR, я провел PCA.
ohca.pca <- PCA(ohca.factor.vars, graph = TRUE, scale.unit = TRUE)
ohca.pca.ind = ohca.pca$ind
ohca.pca.coord = ohca.pca.ind$coord
apply(ohca.pca.coord, 2, cor, ohca.data$survival.n, use = 'complete')
plot(ohca.pca.coord[,1:2], col = ohca.data$survival.n+1)
Это дало мне очень полезный график, но я не уверен, что он точный, поэтому я пытаюсьвоссоздать его с помощью функции "prcomp" из базы R.
Base R ("prcomp") PCA
Я не могзаставить работать функцию "prcomp", если я не пропустил отсутствующие данные.Это не работа:
ohca.pca2 <- prcomp(ohca.factor.vars), scale = TRUE)
Это работа работа:
ohca.pca2 <- prcomp(na.omit(ohca.factor.vars), scale = TRUE)
Когда я строю это, я получаю совершенно другой сюжеттот, который я получил с помощью FactoMineR.Это код:
plot(ohca.pca2.x[,1:2], col = ohca.data$survival.n+1)
Я понял, что, возможно, придется сопоставлять данные, которые я пытался сделать так же, как я использовал FactoMineR.
Вот где я застрял:
Когда я пытаюсь использовать «применить», как я сделал для FactoMineR PCA этодает мне сообщение об ошибке.Этот код:
apply(ohca.pca2, 2, cor, ohca.data$survival.n, use = 'complete')
Выдает это сообщение об ошибке:
Ошибка в применении (ohca.pca2, 2, cor, ohca.data $ Survival.n, использовать= "complete"): dim (X) должен иметь положительную длину
Я понял, что может потребоваться определить, какой столбец использовать, поэтому я назвал столбец 'x', который работал нормально.
ohca.pca2.x <- ohca.pca2$x
Но когда я пытаюсь использовать функцию применения, она все равно не работает.Этот код:
apply(ohca.pca2.x, 2, cor, ohca.data$survival.n, use = 'complete')
Выдает это сообщение об ошибке:
Ошибка в FUN (newX [, i], ...): несовместимые размеры
Я думаю, что проблема связана с размерами данных о выживании (ohca.data $ Survival.n), но я не уверен, как это исправить.Я попытался:
apply(ohca.pca2.x, 2, cor, na.omit(ohca.data$survival.n), use = 'complete')
Но он выдал мне то же сообщение об ошибке, что и выше:
Ошибка в FUN (newX [, i], ...):несовместимые размеры
Спасибо и извините, что так долго.
РЕДАКТИРОВАТЬ:
Я создал новую переменную «выживания», которая имеет тот же размер, что и переменная prcomp PCA:
survival.pca = na.omit(ohca.factor.vars)
А потом я попробовал применить ту же функцию:
apply(ohca.pca2.x, 2, cor, survival.pca, use = 'complete')
Это сработало, но результаты значительно отличаются от результатов FactoMineR PCA.
Переменная «координировать» PCA FactoMineR имела значения (ish), аналогичные переменной «x» prcomp для первых двух столбцов:
- FactoMineR Dim 1: 3.38884511, 1.36743431, 0.29676353 и т. Д.
- prcomp PC1: -3.39904449, -1.36232104, -0.30795451 и т. Д.
- FactoMineR Dim 2: 2.63463285, -0.42530854 и т. Д.
- prcomp PC2: 2.66826115, -0.38316068 и т. Д.
Но к тому времени, как он дошел до третьего столбца, значения стали различаться больше:
- FactoMineR Dim 3: -0,94716531, 0,40635923 и т. Д.
- prcomp PC3: -1.03680925, 0.44565319 и т. Д.
Как только я использую функцию «Применить», результаты начинают различаться еще больше:
- FactoMineR Dim 1: -0,304215583
- prcomp PC1: 0.248941121, -0.004299167 и т. Д.
Кроме того, данные prcomp по-прежнему являются списком, тогда как данные FactoMineR имеют только 1 значение для каждого измерения.
Понятия не имею, почему они разные. Они рассчитывают PCA по-другому? "Dim" в PCA FactoMineR - это то же самое, что "PC" в prcomp?
Еще раз спасибо.