Bonjour,
je reprends l'exemple du Doubs de la fonction niche:
Tout d'abord, dans R il assez simple de calculer les profils des especes:
> poiprof=(sweep(doubs$poi,2,apply(doubs$poi,2,sum),"/"))
Ce tableau va etre utile dans le reste des calculs.
L'inertie de l'espece :
> moy2=t(poiprof)%*%as.matrix(dudi1$tab)^2
> apply(moy2,1,sum) #Iner0
CHA TRU VAI LOC OMB BLA HOT
TOX VAN CHE
5.592708 9.365634 7.383686 7.302860 6.189998 5.781321 6.459330
4.791591 8.398481 9.047967
BAR SPI GOU BRO PER BOU PSO
ROT CAR TAN
6.869906 7.323117 9.894373 9.938425 7.714630 8.698681 8.905122
12.235545 9.149580 7.790130
BCO PCH GRE GAR BBO ABL ANG
9.531568 12.076075 11.084037 8.519888 9.545674 12.048146 9.645091
Cette inertie se decompose en trois parties:
marginalite
Tolerance
Tolerance residuelle
La Marginalite est le carre de la distance entre le barycentre d'une
esepece et l'origine
> moy=t(poiprof)%*%as.matrix(dudi1$tab) #moyenne par espece des variables
de milieu
> apply((t(moy)-apply(dudi1$tab,2,mean))^2,2,sum) #OMI
CHA TRU VAI LOC OMB BLA HOT
TOX VAN CHE
2.6560006 3.5242789 2.0454327 1.3244021 2.6687690 2.0966432 3.0036630
2.0228932 0.5832650 0.6959801
BAR SPI GOU BRO PER BOU PSO
ROT CAR TAN
2.8240029 3.6481419 2.2051499 1.5285287 1.4293101 4.9065929 4.8252988
4.2331196 5.2211179 1.8106553
BCO PCH GRE GAR BBO ABL ANG
5.8043296 8.4683537 5.7953055 1.9475787 5.6984685 4.9846448 5.7954132
Pour la Tolerance marginale c'est un peu plus complique. Il faut tout
d'abor calculer les mi qui sont les projections des sites sur l'axe de
marginalite. Dans le cas present, le milieu a subi une ACP norme, on peut
donc calculer les coordonnees de ces points par simple regression:
Pour l'espece 1:
> mi=apply(dudi1$tab,1,function(x) predict(lm(x~(moy[1,])-1)))
On calcule alors les distances au carre entre le barycentre et les mi et on
pondere par la distribution de l'espece:
> sum(apply((mi-moy[1,])^2,2,sum)*poiprof[,1])
[1] 0.8167845
Pour le faire pour toutes les especes:
> mylist=split(1:ncol(doubs$poi),1:ncol(doubs$poi))
> res=lapply(mylist,function(y)
apply(dudi1$tab,1,function(x) predict(lm(x~(moy[y,])-1))))
apply(as.matrix(1:ncol(doubs$poi)),1,function(x)
sum(apply((res[[x]]-moy[x,])^2,2,sum)*poiprof[,x]))
[1] 0.8167845 1.6636579 1.4133937 1.9888040 0.5632649 1.0009551 0.9205975
0.7891362 3.0201993 3.4093956 1.1654461
[12] 1.5108744 2.8315484 4.4766835 3.8431119 1.3761486 1.3311280 3.1770688
1.6530441 3.3438706 1.3360409 1.1244446
[23] 1.1416389 2.8232349 1.1892862 1.7027475 1.3592329
On y arrive mais c'est pas tres simple, et ca marche que dans le cas ou le
tableau de milieu a subi une ACP norme (etape de regression pose probleme
sinon).
Le plus simple serait d'integrer cela sous la forme d'une fonction.
Pour le calcul du barycentre, c'est juste un calcule de moyenne pondere (cf
calcul de moy)
Cordialement.
At 08:47 27/07/2004, you wrote:
>Bonjour,
>
>Je vous avais demandé il y a quelques jours comment faire, dans une
>analyse de niche sous R, pour avoir les valeurs des OMI et des tolérances
>(comme ce que l'on a lorsque l'on fait niche -> link triplet-table sous
>ADE4)...et je n'ai pas eu de réponses mais je ne trouve toujours pas la
>solution qui me donnerait ces valeurs! Pourraiez-vous m'aider s'il vous plait!
>Sinon, je souhaiterais savoir, sous ade4 et sous R, comment avoir le
>barycentre d'un nuage de points que je trace (avec le module scatters).
>Comment trouver la valeur de ce barycentre?
>
>Merci par avance pour vos réponses.
>
>Cordialement,
>
> Karine Jacquet
>
>Karine Jacquet
>E.P.H.E (Ecole Pratique des Hautes Etudes)
>Laboratoire "Biogéographie et Ecologie des Vertébrés",
>Université Montpellier-2
>Case courrier 94
>Place Eugène Bataillon
>F- 34095 MONTPELLIER cedex 5
>***********************
>Phone: 04.67.14.32.90
>
>E-mail: kjacquet@univ-montp2.fr
>
>
>
Stéphane DRAY
--------------------------------------------------------------------------------------------------
Département des Sciences Biologiques
Université de Montréal, C.P. 6128, succursale centre-ville
Montréal, Québec H3C 3J7, Canada
Tel : (514) 343-6111 poste 1233 Fax : (514) 343-2293
E-mail : stephane.dray@umontreal.ca
--------------------------------------------------------------------------------------------------
Web http://www.steph280.freesurf.fr/
--------------------------------------------------------------------------------------------------
This archive was generated by hypermail 2b30 : Tue Sep 07 2004 - 13:30:57 MEST