Ошибка в R: Несовместимые измерения Использование «apply (data, 2, cor, na.omit (data $ зависимый. Переменная), use = 'complete')" - PullRequest
0 голосов
/ 03 апреля 2019

Обзор

Я пытаюсь сделать 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?

Еще раз спасибо.

...