Distribution des données

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

Christel Anger
Messages : 50
Enregistré le : 12 Mar 2008, 13:57

Distribution des données

Messagepar Christel Anger » 30 Juil 2008, 10:09

Bonjour,

Je cherche à connaître la distribution de mes données mais je ne suis pas très à l'aise dans ce domaine. J'ai pourtant eu quelques idées, mais je ne comprend pas vraiment les résultats que me fournit R.
Mes données (R) correspondent à des effectifs par sites (1040 sites).
L'histogramme correspondant est de la forme suivante :
[img][img]http://img508.imageshack.us/img508/7659/histnb1.th.jpg[/img][/img]

J'ai donc tester dans un premier temps la normalité de mes données grâce à la fonction shapiro.test().

Code : Tout sélectionner

> shapiro.test(R)

        Shapiro-Wilk normality test

data:  R
W = 0.6898, p-value < 2.2e-16


A priori mes données ne sont pas normal, ce qui semble logique vu l'allure de l'histogramme. Cependant, j'ai voulu le tester par une autre méthode : en comparant mes données à des données générées par rnorm() à l'aide d'un test de chi² (chisq.test() ):

Code : Tout sélectionner

norm<-rnorm(1040)
> chisq.test(R,norm)

        Pearson's Chi-squared test

data:  R and norm
X-squared = 953680, df = 952763, p-value = 0.2532

Warning message:
In chisq.test(R, norm) : l'approximation du Chi-2 est peut-être incorrecte

Et là ça colle, les résultats semblent suggérer que R et norm suivent la même loi!??

Pourtant, vu l'allure de l'histogram, j'aurai plutôt pencher pour une distribution exponentielle. Du coup j'ai essayé de tester la normalité de mes données en les transformant par un log :

Code : Tout sélectionner

> logR<-log(R)
> shapiro.test(logR)

        Shapiro-Wilk normality test

data:  logR
W = 0.9784, p-value = 2.588e-11


On se rapproche mais ça n'est pas encore ça... Pourtant, avec chisq.test(), mes données transformées semblent bien être normales :

Code : Tout sélectionner

> chisq.test(log,norm)

        Pearson's Chi-squared test

data:  log and norm
X-squared = 953680, df = 952763, p-value = 0.2532

Warning message:
In chisq.test(log, norm) :
  l'approximation du Chi-2 est peut-être incorrecte


Du coup je ne sais pas quoi penser... D'autant que le chisq.tes() me génère quasi-systématiquement un message d'erreur et que les pvalues sont identiques...
J'ai regardé l'allure du graphe quantile par quantile,
[img][img]http://img508.imageshack.us/img508/1261/qqik8.th.jpg[/img][/img]
et effectivement, les données s'écartent de la droite aux deux extrémités. Il semblerait donc que le test de shapiro a "raison" et que le chisq.tst a "tord"! Mais je ne comprend pas bien pourquoi... Et au delà de ça je m'interroge sur la transformation à effectuer pour que mes données deviennent normales...

Peut-être est-ce tout simplement un problème de connaissances sur les lois de distribution, et à ce moment, je m'excuse d'encombrer le forum, je sais bien qu'il n'a pas pour utilité de donner des informations sur des notions purement statistiques, mais mon résonnement ne me parraît pas trop mauvais, et je me dis que c'est peut-être une erreur de compréhension du fonctionnement des fonctions utilisées... Dans tous les cas merci pour toute l'aide que vous pourrez m'apporter!

Christel

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 30 Juil 2008, 11:01

Le test du Khi-Deux n'est pas du tout conçu pour comparer des distributions comme tu fais. Voir l'aide accessible par la commande

Code : Tout sélectionner

?chisq.test
.

Pour une transformation des données pour s'approcher de la loi normale, je ne m'y connais guère.

Par ailleurs tes données sont des effectifs, donc des nombres entiers ? Tu peux tenter une distribution discrète, comme une loi de Poisson ou une loi binomiale négative.

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 30 Juil 2008, 11:09

Visiblement, apres une transformation log, tu as une variable normale. Donc ta variable suti une loi log-normale, non ?

Christel Anger
Messages : 50
Enregistré le : 12 Mar 2008, 13:57

Messagepar Christel Anger » 30 Juil 2008, 11:19

ok, autant pour moi pour le test de chi², je me suis complètement embrouillé.. En fait, le test qui correspondait plus à ce que je voulais faire était le ks.test() mais il ne marche pas avec des ex-aequos et je n'arrive pas à trouver de solution à ça...

Stéphane : j'avais bien pensé à la loi de poisson mais je ne sais pas trop comment tester tout ça... (ça serait je pense possible avec ks.test() mais toujours ce problèmes d'ex-aequos...)

Christophe : je pense aussi que ma variable suit une loi log-normale le soucis c'est que R n'est pas d'accord avec ça! avec shapiro.test, on voit bien que la transformation par le log ne suffit pas à normaliser les données...

Je vais continuer à chercher une solution dans la doc disponible sur internet, en tout cas merci pour vos réponses, et si vous avez d'autres suggestions elles sont les bienvenues!

Christel

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

Messagepar Logez Maxime » 30 Juil 2008, 11:54

Bonjour,

Pour ce qui est de tester si une distribution suit une loi lognormale avec un test de kolmogorov :

Code : Tout sélectionner

x <- rlnorm(1000)
mn <- mean(log(x))
sd <- sd(log(x))
ks.test(x,"plnorm",mn,sd)
        One-sample Kolmogorov-Smirnov test

data:  x
D = 0.0214, p-value = 0.7504
alternative hypothesis: two-sided


Pour ce qui est des ex-aequos je ne sais pas si le test de Lilliefors ne serait pas plus aproprier.
Pour ce qui est des tests de la normalité ce n'est pas ce qui manque ... Et laisse tomber le chi² c'est une impasse.
De plus ta distribution ne semble pas suivre une loi log-normale. S'il s'agit d'effectifs tu peux peut-être regarder des lois discontinues tel que Poisson, negative binomiale, hypergéométrique ...
La procédure reste la même avec un ks.test.

Maxime

Maxime

Christel Anger
Messages : 50
Enregistré le : 12 Mar 2008, 13:57

Messagepar Christel Anger » 30 Juil 2008, 12:32

Merci pour votre réponse Maxime, mais j'ai encore deux trois petites questions..:
- effectivement lillie.test() permet de tester la normalité sans tenir compte des ex-aequos mais (d'après ce que je sais) elle ne permet pas de tester si mes données suivent une autre loi de distribution, comme le faisait ks.test
- j'ai découvert par hasard que si je transforme mes données de cette façon : log(R)^2, elles suivent alors une loi normale... mais je ne sais pas quoi en conclure...
Encore merci à tous

Christel


Retourner vers « Questions en cours »

Qui est en ligne

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