J'ai un jeu de données et j'aimerais savoir quelle distribution correspond le mieux à mes données.
J'ai utilisé le fitdistr()
fonction pour estimer les paramètres nécessaires pour décrire la distribution supposée (c.-à-d. Weibull, Cauchy, Normal). En utilisant ces paramètres, je peux effectuer un test de Kolmogorov-Smirnov pour estimer si les données de mon échantillon proviennent de la même distribution que ma distribution supposée.
Si la valeur p est> 0,05, je peux supposer que les données de l'échantillon proviennent de la même distribution. Mais la valeur p ne fournit aucune information sur la divinité de l'ajustement, n'est-ce pas?
Donc, si la valeur p de mes données d'échantillon est> 0,05 pour une distribution normale ainsi que pour une distribution de Weibull, comment puis-je savoir quelle distribution correspond le mieux à mes données?
C'est fondamentalement ce que j'ai fait:
> mydata
[1] 37.50 46.79 48.30 46.04 43.40 39.25 38.49 49.51 40.38 36.98 40.00
[12] 38.49 37.74 47.92 44.53 44.91 44.91 40.00 41.51 47.92 36.98 43.40
[23] 42.26 41.89 38.87 43.02 39.25 40.38 42.64 36.98 44.15 44.91 43.40
[34] 49.81 38.87 40.00 52.45 53.13 47.92 52.45 44.91 29.54 27.13 35.60
[45] 45.34 43.37 54.15 42.77 42.88 44.26 27.14 39.31 24.80 16.62 30.30
[56] 36.39 28.60 28.53 35.84 31.10 34.55 52.65 48.81 43.42 52.49 38.00
[67] 38.65 34.54 37.70 38.11 43.05 29.95 32.48 24.63 35.33 41.34
# estimate shape and scale to perform KS-test for weibull distribution
> fitdistr(mydata, "weibull")
shape scale
6.4632971 43.2474500
( 0.5800149) ( 0.8073102)
# KS-test for weibull distribution
> ks.test(mydata, "pweibull", scale=43.2474500, shape=6.4632971)
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0686, p-value = 0.8669
alternative hypothesis: two-sided
# KS-test for normal distribution
> ks.test(mydata, "pnorm", mean=mean(mydata), sd=sd(mydata))
One-sample Kolmogorov-Smirnov test
data: mydata
D = 0.0912, p-value = 0.5522
alternative hypothesis: two-sided
Les valeurs de p sont 0,8669 pour la distribution de Weibull et 0,5522 pour la distribution normale. Je peux donc supposer que mes données suivent une distribution de Weibull aussi bien qu'une distribution normale. Mais quelle fonction de distribution décrit le mieux mes données?
En se référant à elevendollar, j'ai trouvé le code suivant, mais je ne sais pas comment interpréter les résultats:
fits <- list(no = fitdistr(mydata, "normal"),
we = fitdistr(mydata, "weibull"))
sapply(fits, function(i) i$loglik)
no we
-259.6540 -257.9268
I used the fitdistr() function
..... Quelle est lafitdistr
fonction? Quelque chose d'Excel? Ou quelque chose que vous avez écrit en C?Réponses:
Tout d'abord, voici quelques commentaires rapides:
Mais faisons de l'exploration. Je vais utiliser l'excellent
fitdistrplus
paquet qui offre quelques fonctions intéressantes pour l'ajustement de la distribution. Nous utiliserons cette fonctiondescdist
pour obtenir des idées sur les distributions de candidats possibles.Maintenant, utilisons
descdist
:Le kurtosis et l'asymétrie au carré de votre échantillon sont représentés par un point bleu appelé "Observation". Il semble que les distributions possibles incluent la distribution de Weibull, Lognormal et éventuellement la distribution Gamma.
Adaptons une distribution de Weibull et une distribution normale:
Maintenant, vérifiez l'ajustement pour la normale:
Et pour la coupe Weibull:
Les deux ont l'air bien, mais à en juger par le QQ-Plot, le Weibull est peut-être un peu mieux, surtout au niveau des queues. De même, l’AIC de l’ajustement de Weibull est inférieur à l’ajustement normal:
Simulation de test de Kolmogorov-Smirnov
Je vais utiliser la procédure de @ Aksakal expliquée ici pour simuler la statistique KS sous le zéro.
Le fichier ECDF des statistiques KS simulées se présente comme suit:
Cela confirme notre conclusion graphique selon laquelle l'échantillon est compatible avec une distribution de Weibull.
Comme expliqué ici , nous pouvons utiliser l’amorçage pour ajouter des intervalles de confiance ponctuels au fichier PDF ou CDF estimé de Weibull:
Raccord de distribution automatique avec GAMLSS
gamlss
R
fitDist
type = "realline"
type = "realsplus"
Selon l'AIC, la distribution de Weibull (plus précisément
WEI2
, une paramétrisation spéciale de celle-ci) correspond le mieux aux données. La paramétrisation exacte de la distributionWEI2
est détaillée dans ce document à la page 279. Inspectons l'ajustement en examinant les résidus dans un graphe de vers (en gros, un graphe QQ hors tension):Nous nous attendons à ce que les résidus soient proches de la ligne horizontale médiane et à 95% d'entre eux se situent entre les courbes pointillées supérieure et inférieure, qui agissent comme des intervalles de confiance ponctuels à 95%. Dans ce cas, le tracé du ver me semble bien indiquer que la distribution de Weibull est un ajustement adéquat.
la source
gofstat
et de l'AIC. Il n'y a pas de consensus sur le meilleur moyen de déterminer la "meilleure" distribution. J'aime les méthodes graphiques et l'AIC.Les graphiques sont généralement un bon moyen d’avoir une meilleure idée de ce à quoi ressemblent vos données. Dans votre cas, je recommanderais de tracer la fonction de distribution cumulative empirique (ecdf) par rapport aux cdfs théoriques avec les paramètres que vous avez obtenus de fitdistr ().
Je l'ai fait une fois pour mes données et j'ai également inclus les intervalles de confiance. Voici l'image que j'ai obtenue en utilisant ggplot2 ().
La ligne noire est la fonction de distribution cumulative empirique et les lignes colorées sont des cdfs de différentes distributions utilisant des paramètres que j'ai obtenus en utilisant la méthode du maximum de vraisemblance. On peut facilement voir que les distributions exponentielle et normale ne correspondent pas aux données, car les lignes ont une forme différente de celle du fichier ecdf et les lignes sont assez éloignées du fichier ecdf. Malheureusement, les autres distributions sont assez proches. Mais je dirais que la ligne logNormal est la plus proche de la ligne noire. En utilisant une mesure de distance (par exemple, MSE), on pourrait valider l'hypothèse.
Si vous ne disposez que de deux distributions concurrentes (par exemple, en choisissant celles qui semblent correspondre le mieux à l'intrigue), vous pouvez utiliser un test de vraisemblance-ratio pour tester les distributions qui conviennent le mieux.
la source