У меня есть набор данных с несколькими видами и около 400 переменных. Я хотел бы провести анализ компонентов (PCA) по каждому отдельному виду и вернуть переменную с наивысшим значением нагрузки для каждого вида.Многофакторный анализ PCA, извлекающий максимальные значения нагрузки
Чтобы сделать REPLICATE манекен набор моих данных:
set.seed(45)
pcadata <- data.frame(matrix(sample(10, 26746*400, TRUE), ncol=400))
cbind(pcadata,"Species")
Одна из проблем, я столкнулся это с различными размерами выборки для данного вида. Так, например, у меня могло бы быть 250 образцов видов A и 520 видов B. Поэтому я должен использовать функцию prcomp
, потому что у меня больше переменных, чем у образцов. Поэтому, если виды А (SPA) были в data.frame, я бы сначала подмножество данных:
pcadata.s<-pcadata[,2:401]
pca<-prcomp(pcadata.s,cor=T,scale=T)
al<-abs(pca$rotation) #Absolute value of the loading value
loads<-sweep(al,2,colSums(al),"/") #Percentage contribution
loads.mtx<-as.data.frame(loads)
rownames(loads.mtx)[apply(loads.mtx,2,which.max)] #Return the Column-name with the max value
Я хотел бы, без необходимости подвыборки каждый раз, получить имена столбцов на каждый Виды группировок, например:
Species PC1 PC2 PC3 PC4 PC5
spA V3 V100 V287 V2 V65
spB V78 V197 V310 V23 V333
........
Просто понял: мне нужно выбрать компоненты Я заинтересован в, предпочтительно 95% объясненной дисперсии, и, возможно, я буду стараться на 99% тоже ... но у меня будет чтобы включить код для этого.
Любые предложения будут оценены.
Мой совет будет заключаться в том, чтобы ваш фиктивный набор немного меньше людей мог проверить проблему, не имея дело с вычислительной нагрузкой. Также 'cbind (pcadata,« Species »)' ничего не принесет, а вашим столбцам не будет имени вида. –
@Manetheran, спасибо. Я хотел включить группировку видов только в качестве ссылки. Я не хотел отклоняться от основной проблемы, которая у меня есть, которая пытается получить требуемый вывод без необходимости подмножества вручную для каждой группы видов. Я опробовал свой код на очень маленьком фиктивном наборе, но я полностью понимаю ваши комментарии о том, как сохранить макет. Спасибо, очень признателен. – user2507608