Уменьшение размерности при повторных измерениях: PCA? MFA? (FactoMineR)

#r #dimensionality-reduction #longitudinal #factominer

#r #уменьшение размерности #продольный #factominer

Вопрос:

У меня есть выборка повторных измерений, где каждого участника попросили пройти обследование сна в течение 5 лет (базовый уровень, хотя 4 год наблюдения). Каждый элемент опроса достаточно коррелирован (например, когда вы ложитесь спать, коррелирует с вашей продолжительностью сна), и поэтому мы заинтересованы в применении подхода, подобного PCA, и используем нагрузки на каждом компьютере для создания изменяющейся во времени сводной оценки (например, сводная оценка, основанная на этих гипотетических «нагрузках» на ПК для каждого момента времени). Затем мы хотим использовать изменяющуюся во времени составную меру каждого участника в смешанной модели, чтобы предсказать интересующий нас долгосрочный результат.

Первоначально мы выполнили PCA для всех данных (всех участников и во все моменты времени), но здесь есть несколько допущений. Но, после дальнейших размышлений, я начал сомневаться, способен ли PCA различать изменчивость, зависящую от участников или от времени. Итак, я ищу способ выполнить аналогичный подход к уменьшению размерности для выборки с повторными измерениями.

Основываясь на некоторых предыдущих вопросах о стеке, которые я нашел, похоже, что MFA может быть хорошим вариантом. Но все примеры, которые я вижу онлайн, не включают продольный анализ.

1. Кажется ли MFA правильным подходом?

2. И если да, корректен ли следующий код для library(FactoMineR)

Ниже приведен пример набора данных, иллюстрирующий структуру и код, которые, я думаю, я бы запустил:

 library(FactoMineR)
set.seed(123)
ex_dat <- data.frame(ID = rep(1:4, each=4),
                     visit = rep(c("baseline", "y1", "y2", "y3"), 4),
                     var1 = rnorm(16),
                     var2 = rnorm(16)^2,
                     var3 = log(rnorm(16, mean=3, sd=1)))
dat <- ex_dat %>% pivot_wider(id_cols = ID, 
                                 names_from = visit,
                                 values_from = c("var1", "var2", "var3")) %>% data.frame()
> dat
  ID var1_baseline    var1_y1    var1_y2     var1_y3 var2_baseline    var2_y1   var2_y2    var2_y3 var3_baseline   var3_y1   var3_y2   var3_y3
1  1    -0.5604756 -0.2301775  1.5587083  0.07050839     0.2478551 3.86758304 0.4919001 0.22353172     1.3597259 1.3553540 1.3406642 1.3052579
2  2     0.1292877  1.7150650  0.4609162 -1.26506123     1.1402475 0.04751306 1.0526851 0.53128242     1.2680506 1.0777591 0.9910409 0.9629945
3  3    -0.6868529 -0.4456620  1.2240818  0.35981383     0.3906741 2.84493432 0.7018871 0.02352331     0.8352078 1.0267878 0.5507789 1.6426707
4  4     0.4007715  0.1106827 -0.5558411  1.78691314     1.2953557 1.57205186 0.1818717 0.08706718     1.4369784 0.6296169 0.9544013 0.9295404
  

Итак, для каждого участника у меня есть несколько измерений переменных с 1 по 3.

Моя догадка, основанная на руководстве по MFA, заключалась бы в том, чтобы запустить подобный код для выполнения MFA. Я предполагаю, что это предполагает, что все var1 , var2 var3 переменные находятся в их собственной «группе».

 # MFA Analysis
res_MFA <- MFA(dat[, -1], group=rep(4, 3), type=rep("s", 3))
  

И, наконец … res_MFA$ind$coord дает ли мне эквивалент «загрузки» для каждого измерения?

Комментарии:

1. Было бы полезно использовать библиотеку, которая может создавать составную оценку PCA? Вы можете построить криволинейный график, чтобы проверить, сколько отклонений фиксируется компьютерами, а затем продолжить.

2. @DeathMetal спасибо за ваш комментарий! Я выполнил PCA для наборов данных в длинной форме (поместив всех участников и все временные точки в PCA) и посмотрел на локоть — к сожалению, нет большого перегиба. Но меня больше всего беспокоит, должен ли я беспокоиться о том факте, что для каждого участника имеется несколько строк). Я определенно заинтересован в составном показателе PCA, но просто хочу убедиться, что изменчивость, которая точно учитывает проблему псевдо-репликации, с которой я сталкиваюсь здесь.

3. Понятно; нам нужна библиотека, которая создает составной PCA для повторов. Существует библиотека R, которая создает составную оценку PCA. Не уверен, что разрешение воспроизводит часть проблемы, с которой вы сталкиваетесь. Во-вторых, для излома в PCs, я думаю, вы можете использовать PCS до тех пор, пока уменьшение дисперсии не станет насыщенным. Нет вреда в захвате N числа КОМПЬЮТЕРОВ, если учитывается отклонение.

4. @DeathMetal хорошее замечание! 🙂 Спасибо за ваш вклад!