Erreur valeur négative

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

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Erreur valeur négative

Messagepar Cyrielle Jac » 29 Mar 2017, 08:02

Bonjour,

J'ai un tableau contenant en colonne mes espèces et en lignes mes stations et au croisement des deux, les densités. Je dois calculer pour chaque station l'indice de Shannon, de Piélou...
J'ai donc utilisé la fonction diversity du package vegan et jusqu'à aujourd'hui pas de problème ça marchait parfaitement.
Mais depuis ce matin, lorsque je vais tourner le script, une erreur apparait :
Error in diversity(data, index = "shannon") :
input data must be non-negative

Alors que je n'ai aucune données négatives dans mon tableau (j'ai vérifier 3 fois).
J'ai essayer de changer la façon d'importer mes données mais rien ne fonctionne et je ne comprends pas d'où vient l'erreur et pourquoi elle a subitement apparut.

Pouvez-vous m'aider?

cyrielle

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

Re: Erreur valeur négative

Messagepar Gabriel Terraz » 29 Mar 2017, 08:54

Salut,
À mon avis il faudrait vérifier le contenu de tes variables, que donne le résultat de la commande

Code : Tout sélectionner

summary(tondataframe)
?

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Erreur valeur négative

Messagepar Logez Maxime » 29 Mar 2017, 08:56

Bonjour,

A première vue je pense que le problème peut venir des densités nulles qui peuvent être stockées sous forme de -0.000000000000000000000000001 par exemple et générer ton problème. Tu peux identifier quelles sont les valeurs qui posent problème en faisant which(tab < 0, arr.ind = TRUE). Si c'est bien un problème de valeurs nulles alors tu peux faire tab[tab<0] <- 0.

Cordialement,
Maxime

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 30 Mar 2017, 08:40

bonjour,

Merci pour vos réponses. J'ai régler le problème finalement, c'était juste du à une colonne de type facteur qui était prise en compte dans le calcul.

J'ai un nouveau problème par contre concernant une boucle:
J'ai 2 dataframe, le premiers contenant des sp en colonnes et des stations en ligne et au croisement des 2 il y a 0 et 1 en fonction de si l'espèce a été vue ou non à cette station.

stations sp1 sp2
1 1 0
2 0 0
3 1 1

Le second contient en colonne les valeurs des axes (sortit d'une ACP) et en ligne toutes les espèces présentes.

Espèces Axe1 Axe2
sp1 0.24 -0.03
sp2 0.02 0.35
sp3 -0.25 0.006


Je dois donc faire un tableau par station dans lesquelles je dois avoir en colonne les axes et en ligne les espèces présentent dans cette station et au croisement des deux la valeur de l'axe pour l'espèce (sortit du dataframe 2).

J'ai pour cela tenter de faire une boucle :
for(i in 2:ncol(donneef))
for(k in 1:nrow(axes)){
ifelse(donneef[i,]==1,donneef_axes[i,]==axes[,1], donneef[i,] )
}
Mais évidement cela ne fonctionne pas. Je suppose que c'est parce que je lui ai pas dit qu'il doit reconnaitre les espèces présentes non?
Pouvez-vous m'aider?

Cordialement

Cyrielle

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Erreur valeur négative

Messagepar Logez Maxime » 30 Mar 2017, 09:12

Bonjour,

avec tidyr et dplyr :

Code : Tout sélectionner

# tab le tableau des espèces
# tab2 celui avec les valeurs sur les axes
tab %>% gather(Espèces, Occurence, -stations) %>% left_join(tab2, by ="Espèces") %>% filter(Occurence > 0)
Cordialement,
Maxime

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 30 Mar 2017, 11:19

Bonjour,

Merci pour votre réponse. Par contre le premier Espèces correspond à quoi? aux espèces de mon premier tableau? Parce que mes espèces sont en nom de colonne donc cette ligne n'as pas de nom... ,
Du coup quand j'essaye ca ne fonctionne pas :
Error in left_join_impl(x, y, by$x, by$y, suffix$x, suffix$y) :
'especes' column not found in lhs, cannot join

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Erreur valeur négative

Messagepar Logez Maxime » 30 Mar 2017, 12:03

Le premier Espèces correspond au nom de la variable que tu vas crées avec la fonction gather et qui contiendra en ligne dans le tableau en long le nom des colonnes de ton tableau de départ. C'est pour pouvoir ensuite faire la correspondance avec la colonne Espèces du deuxième tableau. Par contre pour que le code fonctionne il faut que les stations du tableau tab et le nom des espèces du tableau tab2 soient des colonnes. Si ce sont des noms de lignes (rownames) alors tu peux aussi faire comme ça avec les packages de base :

Code : Tout sélectionner

tab
  sp1 sp2
1   1   0
2   0   0
3   1   1

class(tab)
[1] "data.frame"

tab2
     Axe1   Axe2
sp1  0.24 -0.030
sp2  0.02  0.350
sp3 -0.25  0.006

class(tab2)
[1] "data.frame"

tab <- as.matrix(tab)
class(tab) <- "table"
tab <- as.data.frame(tab)
tab
  Var1 Var2 Freq
1    1  sp1    1
2    2  sp1    0
3    3  sp1    1
4    1  sp2    0
5    2  sp2    0
6    3  sp2    1

res <- cbind(tab, tab2[tab$Var2,])
res
      Var1 Var2 Freq Axe1  Axe2
sp1      1  sp1    1 0.24 -0.03
sp1.1    2  sp1    0 0.24 -0.03
sp1.2    3  sp1    1 0.24 -0.03
sp2      1  sp2    0 0.02  0.35
sp2.1    2  sp2    0 0.02  0.35
sp2.2    3  sp2    1 0.02  0.35

res <- res[res$Freq>0,]
res
      Var1 Var2 Freq Axe1  Axe2
sp1      1  sp1    1 0.24 -0.03
sp1.2    3  sp1    1 0.24 -0.03
sp2.2    3  sp2    1 0.02  0.35
Cordialement,
Maxime

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 30 Mar 2017, 12:44

Lorsque je tape cela : tab<-as.data.frame(tab)

J'ai une erreur qui apparait :
Error in provideDimnames(x, sep = sep, base = base) :
'dimnames' applied to non-array

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Erreur valeur négative

Messagepar Logez Maxime » 30 Mar 2017, 12:47

Quels sont les classes des objets tab et tab2 ?

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 30 Mar 2017, 12:56

class(tab)
[1] "table"
> class(axes)
[1] "data.frame"

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Erreur valeur négative

Messagepar Logez Maxime » 30 Mar 2017, 13:16

Normalement en partant de la ligne de commande class(tab) <- "table" ça devrait fonctionner.

Cordialement,
Maxime

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 30 Mar 2017, 13:44

hum nouvelle erreur > res <- cbind(tab, axes[tab$Var2,])
Error in tab$Var2 : $ operator is invalid for atomic vectors

mais c'est normal que je n'ai pas tab2 dans cette formule?

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 31 Mar 2017, 05:30

Alors le script fonctionne au final (j'avais oublié une ligne)
Mais mes colonnes sont "décalées" pour le début puisque les fréquence sont remplies avec mes numéros de station, et je veux mes numéros de station pour chaque espèce
Var1 Var2 Freq Axis.1 Axis.2 Axis.3
Diodon_hystrix 7 stations "IR160249" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.1 17 stations "IR160261" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.2 18 stations "IR160262" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.3 19 stations "IR160263" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.4 38 stations "IR160287" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.5 39 stations "IR160289" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.6 40 stations "IR160290" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.7 44 stations "IR160296" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.8 45 stations "IR160297" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.9 50 stations "IR160302" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.10 51 stations "IR160303" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.11 52 stations "IR160304" 0.1489672453 -0.2628127298 0.0370903621
Diodon_hystrix.12 1 stations "IR160235" 0.1489672453


Comment puis-je résoudre ce problème?

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Erreur valeur négative

Messagepar Cyrielle Jac » 31 Mar 2017, 05:53

Enfait c'est lors de la création du tab que il y a un problème puisqu'il ressemble à ca :

Var1 Var2 Freq
1 7 stations IR160249
2 17 stations IR160261
3 18 stations IR160262
4 19 stations IR160263
5 38 stations IR160287
6 39 stations IR160289
7 40 stations IR160290
8 44 stations IR160296
9 45 stations IR160297
10 50 stations IR160302
11 51 stations IR160303
12 52 stations IR160304
13 1 stations IR160235
14 2 stations IR160236
15 3 stations IR160237
16 6 stations IR160243
17 8 stations IR160250
18 9 stations IR160251
19 20 stations IR160265
20 21 stations IR160266
21 22 stations IR160268
22 23 stations IR160270
23 34 stations IR160282
24 7 Acanthurus_dussumieri 0
25 17 Acanthurus_dussumieri 0
26 18 Acanthurus_dussumieri 0
27 19 Acanthurus_dussumieri 0
28 38 Acanthurus_dussumieri 1
29 39 Acanthurus_dussumieri 1
30 40 Acanthurus_dussumieri 0

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Erreur valeur négative

Messagepar Logez Maxime » 31 Mar 2017, 07:53

Bonjour,

est-ce que tu peux faire str(tab), str(axes) qu'on ait une idée de la structure de tes données qu'on puisse te donner un code adapté à la classe de tes objets et à leurs colonnes.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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