[Рис. 4 ниже - это то, что мне понадобится в качестве результата, два других рисунка показывают, что я получаю из своих данных: PCA по данным об окружающей среде или по данным о численности ggplot2
Он одновременно обрабатывает данные о численности и окружающей среде в PCA, работая с двумя разными фреймами данных: Мне сказали, что это будет работать таким образом, что из PCA1 вы получите координаты вида, а затем с помощью второй команды вы наложите на векторы координат видов не из PCA 1, а из другого набора данных, который имеет те же сайты, что и первый не численность, а данные об окружающей среде.
Мой профессор провел PCA по избыток и экологическим данным 10 лет назад. Он наложил результаты анализа основных компонентов (PCA) данных о численности видов с корреляциями между оценками PCA и факторами окружающей среды, потенциально влияющими на распределения инфузория. Как я могу сделать это в R, когда у меня есть один фрейм данных, в котором указана численность каждого вида на 33 участках, и один фрейм данных, в котором перечислены 12 различных параметров окружающей среды из 33 участков? Так, например, со следующими данными
#Create random dataframe of abundance data, I am sure this can be done simpler and more elegant than this ;)
species<-c("spec1", "spec2", "spec3", "spec 4", "spec 5", "spec 6", "spec7")
site1<-c(2,4,19,34,3,6,9)
site2<-c(5,8,9,12,0,1,1)
site3<-c(23,56,7,1,1,1,2)
site4<-c(4,6,2,8,5,1,7)
abundance<-data.frame(species,site1,site2,site3,site4)
rownames(abundance)<-abundance$species
abundance<-abundance[,-1]
#Create random dataframe of abundance data
#environmental parameters of the sites
X<-c("site1","site2","site3","site4")
Temp<-c(24,24.5,23.5,25)
Chla<-c(2.2,1.5,2.0,3.4)
Salinity<-c(24,25,26,23)
Depth<-c(200,400,600,200)
environment<-data.frame(X,Temp,Chla,Salinity,Depth)
rownames(environment)<-environment$X
environment<-environment[,-1]
###PCA on abundance data
#hellinger pre-transformation of abundance data
??decostand
library(vegan)
abu.h<-decostand(abundance,"hellinger")
abu.h.pca<-prcomp(abu.h)
biplot(abu.h.pca)
##and now I would need to discard the sites vectors and overlay it with
#the environmental sites factors, due to my prof?
?prcomp
envir.PCA<-prcomp(environment,scale = TRUE)
biplot(envir.PCA)
?biplot
Кроме того, отличается ли это от общего случая двух графиков PCA и наложения данных? Если нет, то в StackOverflow уже есть несколько ответов.
Возможный дубликат R - как сделать биплот PCA более читаемым
Возможный дубликат Построение двумерного графика pca с помощью ggplot2
Большое спасибо за вашу помощь и редактирование! Жалко, но это не дубликат упомянутых выше тем. Все они работают с одним набором данных! У меня два разных набора данных.
@TaAni Я пытаюсь понять, чего ты хочешь. Вы имеете в виду следующее: «извлечь переменные главных компонентов для набора данных abundance, а затем сопоставить их с набором данных environment»? ИЛИ "" извлеките переменные главного компонента (ПК) для наборов данных abundance, environment и СОЕДИНИТЕ компьютер вместе "?
@TaAni, вы меня спрашиваете: «Верно ли, что переменные - это векторы?»
@Ashish: Извините, у меня проблема с формулировкой. Нет. Я отредактировал свой вопрос и надеюсь, что теперь он стал более конкретным.
@TaAni, без проблем. После нескольких перечитываний я понял, что вам нужно. Это что-то вроде: «Сначала извлеките основные компоненты для набора данных abundance. Затем соедините их с параметрами среды в фрейме данных environment. Я правильно понимаю?
@Ashish: Да, спасибо, что попробовали и перечитали!
@TaAni вообще никаких проблем. Как говорится, «на Танго надо вдвоем» :) Продолжая дальше, предлагаю прочитать ответ пользователя j-con на этот Почта. Идея состоит в том, чтобы определить основные компоненты в заданном наборе данных.
@TaAni, так что вы можете сделать следующее, factoextra::fviz_screeplot(abu.h.pca, addlabels = TRUE, barfill = "gray", barcolor = "black", ylim = c(0, 50), xlab = "Principal Component", ylab = "Percentage of explained variance", main = "Principal Component (PC) for abundance dataset"). А потом f<-factoextra::fviz_contrib(abu.h.pca, choice = "var", axes = c(1), top = 10, sort.val = c("desc"))
@TaAni, а затем #save data from contribution plot dat<-f$data dat #filter out ID's that are higher than, say, 10 r<-rownames(dat[dat$contrib>10,]) new<- abundance[r] new. Вы увидите, что фрейм данных new определил, что site1 и site2 являются основными столбцами.
@TaAni Затем вы можете объединить два фрейма данных вместе, например, > newdf<-merge(new, environment, all = TRUE) и > newdf. Сообщите мне, если это поможет, если да, то я отправлю его в качестве ответа.
@ Ашиш Я не уверен. Я думаю, что это теряет людей, и они - самая важная вещь в сюжете, потому что я хочу объяснить, как люди группируются (по глубине и / или доступности еды ...).
Могу ли я извлечь координаты для отдельных лиц (get_pca_ind и ind $ Coord) и для переменных и сделать биплот (x, y)?
@TaAni, если вы сделаете это factoextra::fviz_screeplot(abu.h.pca, addlabels = TRUE, barfill = "gray", barcolor = "black", xlab = "Principal Component", ylab = "Percentage of explained variance", main = "Principal Component (PC) for abundance dataset") На этом графике вы увидите, что первый PC1 вносит вклад в 68.3%, а второй PC2 вносит вклад в вариацию 29.3% в данных.
@TaAni, после этого, чтобы увидеть вклад этих двух компьютеров, вы можете выполнить factoextra::fviz_contrib(abu.h.pca, choice = "var", axes = c(1,2), top = 10, sort.val = c("desc")), и вы увидите, что переменные site3 и site1 являются наиболее важными участниками.
@TaAni можно выложить код для расчета ind?
@Ashish, извините, я пока не спешу удалять свои комментарии. # График лиц fviz_pca_ind (abu.h.pca) ## получить координаты ind <-get_pca_ind (abu.h.pca) head (ind $ Coord) #x в биплоте ind <-ind $ Coord ind <-ind [, 1 : 2] ind #y variables # Извлеките результаты только для переменных var <-get_pca_var (envir.PCA) var <-vari $ordin var <-var [, 1: 2] var biplot (ind, var, var.axes = ИСТИНА) С этим я получаю график, который хотел бы иметь, я просто думаю, что он не "правильный", потому что я ничего не связывал, просто наложил 2 матрицы из двух столбцов ...
@TaAni, хорошо, попробуйте изменить следующий код vari<-get_pca_var(envir.PCA) на vari<-get_pca_var(abu.h.pca). В остальном все ок.
@Ashish: но чем я снова оказался в начале, потому что я получил неправильные переменные для своих людей. Мне нужен график, который выглядит точно так же, как тот, который я создаю с помощью переменной <-get_pca_var (enviro.PCA); (
@Ashish: Помимо основной проблемы, я благодарен приложению, которое вы показали мне, как просматривать данные с помощью factoextra и выяснять, кто из них наиболее важен. Я буду применять это с другим набором данных!
@TaAni, без проблем. Попробуйте vari<- get_pca_var(envir.PCA). В моем предыдущем комментарии я подумал, что envir.PCA был опечаткой, т.е. почему я предложил использовать abu.h.pca. Я попробовал следующий код envir.PCA<- prcomp(environment, scale. = TRUE) vari<- get_pca_var(envir.PCA) var<-vari$coord var<-var[,1:2] var biplot(ind, var, var.axes = TRUE). Думаю, так и должно быть.
@TaAni после этого вы можете сделать f<-factoextra::fviz_contrib(envir.PCA, choice = "var", axes = c(1,2), top = 10, sort.val = c("desc")) для построения вкладов. Затем сохраните данные из графика вкладов dat<-f$data. Затем извлеките названия строк этих вкладов r<-rownames(dat[dat$contrib>10,]). И, наконец, сопоставьте вклады с переменной environment, например new.df<- environment[r]. Посмотрите на new.df, вы увидите вывод типа head(new, 2) `Temp Chla Plo Plo2 site1 24.0 2.2 1000 200 site2 24.5 1.5 2000 400`
@Ashish: но мне все равно понадобится фрейм данных, где строки - это не сайты, а виды и столбцы, как в new.df, в котором вы создали параметры окружающей среды. Сюжет «biplot (ind, var, var.axes = TRUE)» был бы идеальным. Но имеет ли смысл накладывать координаты переменных второго PCA на координаты человека из другого PCA. Наборы данных каким-то образом связаны через параметр sites, но я не знаю, достаточно ли этого, и данные остаются интерпретируемыми?





Я нашел решение:
envfit {веганский}
Подбирает экологический вектор или фактор для посвящения
Благодарим вас за использование воспроизводимого примера в своем первом вопросе! Хорошая работа! Одно маленькое предложение - в будущем это может помочь сделать гиперссылку или объяснить слова, относящиеся к вашей области исследования, например, инфузория или (в данном контексте) изобилие. Наконец, это не похоже на проблему, связанную с IDE, поэтому тег
rstudio, вероятно, не подходит.