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
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: 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
 
 спасибо)))
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей

