Appliquer la fonction ICE selon une variable.

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Manon Jean
Messages : 14
Enregistré le : 04 Mai 2017, 15:08

Appliquer la fonction ICE selon une variable.

Messagepar Manon Jean » 15 Mai 2017, 09:05

Je dispose d'un data.frame de ce type (j'ai enlevé des lignes entre les deux communes), et j'ai 106 communes comme ça

Code : Tout sélectionner

> inf2013
                      COMMUNE                 Nomespece X5 X10 X15 X20 X25 X30
1        ANCTOVILLE-SUR-BOSCQ                 Pouledeau  0   0   1   0   0   0
2        ANCTOVILLE-SUR-BOSCQ            Goelandargente  0   1   0   0   0   0
3        ANCTOVILLE-SUR-BOSCQ              Pigeonramier  0   1   1   1   1   1
[...]
24                    ANGIENS            Goelandargente  0   0   0   1   1   0
25                    ANGIENS            Pigeoncolombin  0   0   1   0   0 
etc

en voici la structure :

Code : Tout sélectionner

> str(inf2013)
'data.frame':   2886 obs. of  8 variables:
 $ COMMUNE  : Factor w/ 106 levels "ANCTOVILLE-SUR-BOSCQ",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Nomespece: Factor w/ 99 levels "Accenteurmouchet",..: 83 37 75 70 48 98 1 87 56 45 ...
 $ X5       : int  0 0 0 1 0 0 1 1 1 1 ...
 $ X10      : int  0 1 1 0 0 1 0 1 1 0 ...
 $ X15      : int  1 0 1 0 0 0 0 1 1 0 ...
 $ X20      : int  0 0 1 0 1 1 0 1 0 1 ...
 $ X25      : int  0 0 1 0 0 0 0 0 1 1 ...
 $ X30      : int  0 0 1 0 0 1 0 1 0 1 ...


A partir de ce tableau je voudrais calculer l'ICE (un estimateur de biodiversité) qui se fait avec la fonction ICE, pour chaque commune.
Mais pour exécuter la fonction il faut des tableaux avec en première colonne les espèces et les autres colonnes les unités d'échantillonnage (ici de X5 à X30).

Je n'arrive pas à savoir comment faire ma boucle pour que R me crée un tableau ICEtest avec le ICE pour chaque commune. J'ai fait ça pour l'instant :

Code : Tout sélectionner

ICEtest=data.frame(1:106,1:106)
ICEtest[,1]=levels(unique(inf2013[,1]))
for (i in 1:nrow(inf2013)){
  for(j in 1:nrow(ICEtest)){
  if (inf2013[i+1,1]!=inf2013[i,1])
    ICE[j,2]=ICE(inf2013[i,2:8], taxa.row=T)
  }}

j'ai donc créé un data.frame où mettre mes ICE calculés puis j'ai tenté deux boucles.
Evidemment ça ne marche pas.
Sauriez-vous comment me dépatouiller de ça ?
Merci,
Manon.

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Appliquer la fonction ICE selon une variable.

Messagepar Gabriel Terraz » 15 Mai 2017, 09:21

Salut,

Peut-être que quelque chose dans le style :

Code : Tout sélectionner

by(inf2013[,-1], inf2013$COMMUNE, ICE)


Difficile d'aider plus car je ne connais pas cette fonction

Manon Jean
Messages : 14
Enregistré le : 04 Mai 2017, 15:08

Re: Appliquer la fonction ICE selon une variable.

Messagepar Manon Jean » 15 Mai 2017, 09:32

c'est pas mal, je connaissais pas by. Le problème c'est que si je fais une commune toute seule, par exemple anctoville, j'obtiens 29.9, pas 23 obtenu avec by.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Appliquer la fonction ICE selon une variable.

Messagepar Pierre-Yves Berrard » 15 Mai 2017, 10:29

Pouvez-vous donner le code qui donne 29.9 comme résultat ?
PY

Manon Jean
Messages : 14
Enregistré le : 04 Mai 2017, 15:08

Re: Appliquer la fonction ICE selon une variable.

Messagepar Manon Jean » 15 Mai 2017, 10:36

oui voici le code :

Code : Tout sélectionner

> ICE(inf2013, taxa.row=T)
[1] 29.9
attr(,"method")
[1] "ICE"


Avec un tableau que j'ai fait pour la commune anctoville qui est de ce type :

Code : Tout sélectionner

                     X5 X10 X15 X20 X25 X30
Pouledeau             0   0   1   0   0   0
Goelandargente        0   1   0   0   0   0
Pigeonramier          0   1   1   1   1   1
Picvert               1   0   0   0   0   0
Hirondelledecheminee  0   0   0   1   0   0
etc


sa structure :

Code : Tout sélectionner

> str(inf2013)
'data.frame':   23 obs. of  6 variables:
 $ X5 : int  0 0 0 1 0 0 1 1 1 1 ...
 $ X10: int  0 1 1 0 0 1 0 1 1 0 ...
 $ X15: int  1 0 1 0 0 0 0 1 1 0 ...
 $ X20: int  0 0 1 0 1 1 0 1 0 1 ...
 $ X25: int  0 0 1 0 0 0 0 0 1 1 ...
 $ X30: int  0 0 1 0 0 1 0 1 0 1 ...

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Appliquer la fonction ICE selon une variable.

Messagepar Pierre-Yves Berrard » 15 Mai 2017, 10:40

Il faut aussi retirer les noms d'espèces de l'analyse, visiblement.

Code : Tout sélectionner

by(inf2013[ , -(1:2)], inf2013$COMMUNE, ICE)
PY

Manon Jean
Messages : 14
Enregistré le : 04 Mai 2017, 15:08

Re: Appliquer la fonction ICE selon une variable.

Messagepar Manon Jean » 15 Mai 2017, 12:06

oui c'est parfait ! J'ai compris comment ça marche, merci à vous !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité