PCA в R
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
PCA в R
Казалось бы тривиальная задачка - посчитать PCA. Набор данных выглядит следующим образом:
species id, var_1,var_2,var_n...
1,12,119,-6
1,14,117,-3
1,11,116,-2
2,12,105,-6
2,18,115,-4
3,11,125,-3
4,20,115,-6
то есть множественные наблюдения для каждого вида + много видов.
Как это сделать в R? кроме ade4 есть варианты?
species id, var_1,var_2,var_n...
1,12,119,-6
1,14,117,-3
1,11,116,-2
2,12,105,-6
2,18,115,-4
3,11,125,-3
4,20,115,-6
то есть множественные наблюдения для каждого вида + много видов.
Как это сделать в R? кроме ade4 есть варианты?
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: PCA в R
В R есть родная функция princomp(), подробнее можно посмотреть здесь http://www.inp.nsk.su/~baldin/DataAnaly ... mining.pdf
Помимо ade4 настоятельно рекомендую vegan - там и многомерный анализ, и видовое разнообразие и всякие индексы (брей-кертис, шеннон итд)
http://cran.r-project.org/web/packages/vegan/vegan.pdf
http://cran.r-project.org/web/packages/ ... -vegan.pdf
http://cran.r-project.org/web/packages/ ... -vegan.pdf
http://cran.r-project.org/web/packages/ ... -vegan.pdf
http://cc.oulu.fi/~jarioksa/opetus/meto ... ntutor.pdf
(английский)
Удачи :о)|||
Помимо ade4 настоятельно рекомендую vegan - там и многомерный анализ, и видовое разнообразие и всякие индексы (брей-кертис, шеннон итд)
http://cran.r-project.org/web/packages/vegan/vegan.pdf
http://cran.r-project.org/web/packages/ ... -vegan.pdf
http://cran.r-project.org/web/packages/ ... -vegan.pdf
http://cran.r-project.org/web/packages/ ... -vegan.pdf
http://cc.oulu.fi/~jarioksa/opetus/meto ... ntutor.pdf
(английский)
Удачи :о)|||
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: PCA в R
спасибо Игорь.
да вот в том-то и дело, не нравится мне ни веган, ни ade:) объясню почему. Оба пакета заточены под обработку данных для community ecology и оперируют понятием plot (площадка)
То есть переводя на их язык приведенная мной табличка с данными должна быть разбита на две и выглядеть следующим образом:
1. таблица один - переменные + площадка
plot_id, var1, var2,var3
1,12,119,-6
2,14,117,-3
3,11,116,-2
4,12,105,-6
5,18,115,-4
6,11,125,-3
7,20,115,-6
2.таблица два - площадка + виды (presence/absence для каждой площадки)
plot_id, sp1,sp2,sp3,sp4
1,1,0,0,0
2,1,0,0,0
3,1,0,0,0
4,0,1,0,0
5,0,1,0,0
6,0,0,1,0
7,0,0,0,1
не могу поверить, что нет пакета который напрямую работает с табличкой, которую я привела как исходную
да вот в том-то и дело, не нравится мне ни веган, ни ade:) объясню почему. Оба пакета заточены под обработку данных для community ecology и оперируют понятием plot (площадка)
То есть переводя на их язык приведенная мной табличка с данными должна быть разбита на две и выглядеть следующим образом:
1. таблица один - переменные + площадка
plot_id, var1, var2,var3
1,12,119,-6
2,14,117,-3
3,11,116,-2
4,12,105,-6
5,18,115,-4
6,11,125,-3
7,20,115,-6
2.таблица два - площадка + виды (presence/absence для каждой площадки)
plot_id, sp1,sp2,sp3,sp4
1,1,0,0,0
2,1,0,0,0
3,1,0,0,0
4,0,1,0,0
5,0,1,0,0
6,0,0,1,0
7,0,0,0,1
не могу поверить, что нет пакета который напрямую работает с табличкой, которую я привела как исходную
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: PCA в R
ну собственно, если нет, то тогда я переформулирую вопрос:)
как получить из таблицы:
id, sp
1,sp1
2,sp1
3,sp1
4,sp2
5,sp2
6,sp3
7,sp4
таблицу вида:
id, sp1,sp2,sp3,sp4
1,1,0,0,0
2,1,0,0,0
3,1,0,0,0
4,0,1,0,0
5,0,1,0,0
6,0,0,1,0
7,0,0,0,1
как получить из таблицы:
id, sp
1,sp1
2,sp1
3,sp1
4,sp2
5,sp2
6,sp3
7,sp4
таблицу вида:
id, sp1,sp2,sp3,sp4
1,1,0,0,0
2,1,0,0,0
3,1,0,0,0
4,0,1,0,0
5,0,1,0,0
6,0,0,1,0
7,0,0,0,1
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: PCA в R
если вдруг кто-то видел функцию - напишите, пожалуйста.
а пока вот такой вот очень неэффективный вариант:
а пока вот такой вот очень неэффективный вариант:
Код: Выделить всё
m<-matrix(nrow=10,ncol=2)
m[,1]<-c(1:10)
m[,2]<-c(2,2,1,2,1,3,3,3,3,4)
colnames(m)<-c("plot","sp")
#convert occurrences into binary presence absence table
#takes species in order of species table: e.g. if species in column of species names are not alphabetically sorted, it will not sort PA table either
pres_abs_binary<-function(species_table,plot_col=1,sp_col=2){
if ( (length(unique(species_table[,plot_col]))) != (nrow(species_table))){
stop("Sorry! exiting script because plot ids in your occurrences table are not unique.")
}
else{
#get unique species list from input table
species<-unique(species_table[,sp_col])
#create empty matrix to store result: number of rows equals to total number of observations in species table, number of columns equals to number of unique species names
com<-matrix(nrow=nrow(species_table),ncol=(length(species))+1)
#assing columns names
colnames(com)<- c("id",species)
#for each species
for (i in 1:length(species)) {
#for each row in species table
for (j in 1:nrow(m3)){
if(species_table[j,2]==species[i]){ #check if species names in there
com[j,i+1] =1 #if yes, put 1
}
else{
com[j,i+1] =0 #if not, put 0
}
}
}
com[,1]<-species_table[,plot_col]
return(com)
}
}
pres_abs_binary(m,1,2)
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: PCA в R
Код: Выделить всё
> d
id sp
1 1 sp1
2 2 sp1
3 3 sp1
4 4 sp2
5 5 sp2
6 6 sp3
7 7 sp4
> table(d)
sp
id sp1 sp2 sp3 sp4
1 1 0 0 0
2 1 0 0 0
3 1 0 0 0
4 0 1 0 0
5 0 1 0 0
6 0 0 1 0
7 0 0 0 1
>
пристегивайтесь, турбулентность прямо по курсу
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: PCA в R
спасибо)))
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей