Utilisation des fonctions ENFA du package adehabitatHS

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

Jérémie Habasque
Messages : 62
Enregistré le : 05 Oct 2011, 11:54

Utilisation des fonctions ENFA du package adehabitatHS

Messagepar Jérémie Habasque » 14 Oct 2014, 10:02

Bonjour,

Je souhaite utiliser les fonctions d'ENFA du package 'adehabitatHS'.
Une erreur apparaît avec la fonction dudi.pca concernant la présence de NA. Cf. le code ci-dessous:

Code : Tout sélectionner

predictors_enfa <- stack(raster(sst_climato),raster(chloro_climato))
predictors_enfa <- as(predictors_enfa,'SpatialPixelsDataFrame')
names(predictors_enfa)=c("SST","CHL")
pr <- slot(count.points(Species, predictors_enfa), "data")[,1]
Warning message:
In count.points(Species, predictors_enfa) :
  several columns in the SpatialPointsDataFrame, no id considered
predictors_enfa <- na.omit(predictors_enfa)
pc <- dudi.pca(slot(predictors_enfa, "data"), scannf=FALSE)
Error in dudi.pca(slot(predictors_enfa, "data"), scannf = FALSE) :
  na entries in table


Merci d'avance pour vos suggestions !

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 14 Oct 2014, 16:29

Il nous faudrait un exemple reproductible. Que donne la commande:

Code : Tout sélectionner

class(slot(predictors_enfa, "data"))

et

Code : Tout sélectionner

str(slot(predictors_enfa, "data"))

Il faudrait que ce soit un data.frame avec des colonnes sans données manquantes pour que ce soit accepté par dudi.pca
Renaud

Jérémie Habasque
Messages : 62
Enregistré le : 05 Oct 2011, 11:54

Messagepar Jérémie Habasque » 15 Oct 2014, 07:39

Bonjour,

En effet, il y a des NA en entrée de la fonction dudi.pca:

Code : Tout sélectionner

> str(predictors_enfa)
Formal class 'SpatialPixelsDataFrame' [package "sp"] with 7 slots
  ..@ data       :'data.frame':   39642 obs. of  2 variables:
  .. ..$ SST: num [1:39642] NA NA NA NA NA NA NA NA NA NA ...
  .. ..$ CHL: num [1:39642] 0.295 0.266 0.248 0.285 0.285 ...


Comment faire pour supprimer les NA de mon objet SpatialPixelsDataFrame ?

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 15 Oct 2014, 08:32

En principe l'objet devrait pouvoir s'indexer comme un data.frame. Qquechose comme

Code : Tout sélectionner

Data <- predictors_enfa[!is.na(predictors_enfa$SST), ]
Renaud

Jérémie Habasque
Messages : 62
Enregistré le : 05 Oct 2011, 11:54

Messagepar Jérémie Habasque » 15 Oct 2014, 13:54

Bonjour,

Merci en effet, maintenant la fonction dudi.pca fonctionne !

Code : Tout sélectionner

predictors_enfa <- stack(raster(sst_climato),raster(chloro_climato))
names(predictors_enfa)=c("SST","CHL")
predictors_enfa <- as(predictors_enfa,'SpatialPixelsDataFrame')
predictors_enfa <- predictors_enfa[!is.na(predictors_enfa$SST), ]
predictors_enfa <- predictors_enfa[!is.na(predictors_enfa$CHL), ]
pr <- slot(count.points(Species, predictors_enfa), "data")[,1]
pc <- dudi.pca(slot(predictors_enfa, "data"), scannf=FALSE)
enfa <- enfa(pc,pr, scannf = FALSE)
pred <- predict.enfa(enfa, predictors_enfa)


Le package adehabitat permettait de récupérer un objet de class "mapattr" (avec les dimensions de la grille spatiale) via la fonction data2enfa. Cet objet pouvait ensuite être utilisé comme paramètre de la fonction predict.
Plus maintenant !

Jérémie Habasque
Messages : 62
Enregistré le : 05 Oct 2011, 11:54

Messagepar Jérémie Habasque » 24 Oct 2014, 13:34

Un petit up sur le sujet.

Avec la fonction predict du package adehabitat, je pouvais remettre les 34310 observations sur une grille de dimension 360*180

Code : Tout sélectionner

sst_asc <-­ asc.from.raster(raster(sst_climato))
chl_asc <­- asc.from.raster(raster(chloro_climato))
predictors_enfa <­- as.kasc(list(SST = sst_asc, CHL =chl_asc))
enfa_data <­- data2enfa(predictors_enfa, Species@coords)
pc <­- dudi.pca(enfa_data$tab, scannf = FALSE)
enfa <­- enfa(pc, enfa_data$pr, scannf = FALSE)
pred <-­ predict(enfa, enfa_data$index,enfa_data$attr)
pred <-­ as.SpatialGridDataFrame.im(asc2im(pred))


Maintenant, avec le package adehabitatHS, je reste avec un objet SpatialPixelsDataFrame avec 34310 observations.

Code : Tout sélectionner

predictors_enfa <­- stack(raster(sst_climato),raster(chloro_climato))
names(predictors_enfa)=c("SST","CHL")
predictors_enfa <­- as(predictors_enfa,'SpatialPixelsDataFrame')
predictors_enfa <-­ predictors_enfa[!is.na(predictors_enfa$SST), ]
predictors_enfa <-­ predictors_enfa[!is.na(predictors_enfa$CHL), ]
pr <­- slot(count.points(Species, predictors_enfa), "data")[,1]
pc <-­ dudi.pca(slot(predictors_enfa, "data"), scannf=FALSE)
enfa <-­ enfa(pc,pr, scannf = FALSE)
pred <­- predict.enfa(enfa, predictors_enfa)

Comment puis-je repasser sur ma grille de dimension 360*180 ?

Merci d'avance,
Cdt.

dicko ahmadou
Messages : 444
Enregistré le : 21 Nov 2009, 20:15

Messagepar dicko ahmadou » 25 Oct 2014, 13:40

Bonjour,

predict.enfa retourne un SpatialPixelsDataFrame donc tu as les informations sur la structure de ta grille en faisant:

Code : Tout sélectionner

## Check the grid size and origin
pred@grid


Donc tu peux utiliser la fonction raster directement sur le résultat ("pred"), il va utiliser l'origine et la dimension pour le transformer automatiquement:

Code : Tout sélectionner

## From SpatialPixelsDataFrame to raster
pred_grid <- raster(pred)
dim(pred_grid)
The best thing about being a statistician is that you get to play in everyone's backyard.
John Tukey


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités