Comment puis-je vérifier si mes données correspondent à une distribution exponentielle?


22

Comment puis-je vérifier si mes données, par exemple le salaire, proviennent d'une distribution exponentielle continue dans R?

Voici l'histogramme de mon échantillon:

entrez la description de l'image ici

. Toute aide sera fortement appréciée!


1
votre variable est-elle discrète ou continue? La distribution exponentielle est définie comme continue .
Curieux

continu. Je me demande s'il y a un test dans R pour vérifier cela
stjudent

1
Bienvenue. Recherchez la fonction fitdistrdans R. Elle ajuste les fonctions de densité de probabilité (pdfs) en fonction de la méthode d'estimation du maximum de vraisemblance (MLE). Recherchez également dans ce site des termes tels que pdf, fitdistr, mle et des questions similaires. Gardez à l'esprit que des questions comme celle-ci nécessitent presque un exemple reproductible pour recueillir de bonnes réponses. En outre, cela aide si la question ne concerne pas uniquement la programmation (ce qui pourrait entraîner sa mise en attente comme hors sujet).
Andre Silva

8
Une distribution exponentielle sera tracée en ligne droite contre position de traçage) où la position de traçage est (rang , le rang est pour la valeur la plus basse, est la taille de l'échantillon, et choix populaires pour inclus . Cela donne un test informel qui peut être aussi utile ou plus utile que n'importe quel test formel. - a ) / ( n - 2 a + 1 ) 1 n un 1 / 2ln(1a)/(n2a+1)1na1/2
Nick Cox

@Berkan a développé l'idée de l'intrigue quantile dans son article.
Nick Cox

Réponses:


29

Je le ferais en estimant d'abord le seul paramètre de distribution à l' rateaide de fitdistr. Cela ne vous dira pas si la distribution convient ou non, vous devez donc utiliser le test d' adéquation . Pour cela, vous pouvez utiliser ks.test:

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

entrez la description de l'image ici

D'après mon expérience personnelle (bien que je ne l'ai jamais trouvée officiellement nulle part, veuillez me confirmer ou corriger), ks.testne fonctionnera que si vous fournissez d'abord l'estimation du paramètre. Vous ne pouvez pas le laisser estimer les paramètres automatiquement comme par exemple goodfit. C'est pourquoi vous avez besoin de cette procédure en deux étapes fitdistr.

Pour plus d' informations suivre le excellent guide de Ricci: MISE EN PLACE AVEC DISTRIBUTIONS R .


2
+1. Le test ks.test est-il le meilleur test pour tester la qualité de l'ajustement dans de telles situations? Je pense que vous avez également répondu à l'une de mes questions .
Andre Silva

4
juste un avertissement, vous devez être prudent si vous estimez les paramètres à partir des données elles-mêmes. Dans ce cas, un test comme anderson darling pourrait être le meilleur, car il est robuste contre de telles situations.
JPC

Sur le test d'exponentialité KS lorsque le paramètre de débit est estimé à partir des données: voir Une question naïve sur le test de Kolmogorov Smirnov .
Scortchi - Réintégrer Monica

8

Bien que je recommande normalement de vérifier l'exponentialité en utilisant des tracés de diagnostic (tels que les tracés QQ), je vais discuter des tests, car les gens en veulent souvent:

Comme le suggère Tomas, le test de Kolmogorov-Smirnov ne convient pas pour tester l'exponentialité avec un paramètre non spécifié.

Cependant, si vous ajustez les tables pour l'estimation des paramètres, vous obtenez le test de Lilliefors pour la distribution exponentielle.

Lilliefors, H. (1969), "Sur le test de Kolmogorov – Smirnov pour la distribution exponentielle à moyenne inconnue", Journal de l'American Statistical Association , Vol. 64. pp. 387–389.

L'utilisation de ce test est discutée dans Conover's Practical Nonparametric Statistics .

Cependant, dans D'Agostino & Stephens ' Goodness of Fit Techniques , ils discutent d'une modification similaire du test d'Anderson-Darling (un peu obliquement si je me souviens bien, mais je pense que toutes les informations requises sur la façon de l'aborder pour le cas exponentiel sont se trouve dans le livre), et c'est presque certain d'avoir plus de pouvoir contre des alternatives intéressantes.

De même, on pourrait estimer quelque chose comme un test de Shapiro-Francia (semblable mais plus simple que le Shapiro-Wilk), en basant un test sur où est la corrélation entre les statistiques de commande et les scores exponentiels ( statistiques d'ordre exponentiel attendu). Cela correspond à tester la corrélation dans le tracé QQ.rn(1r2)r

Enfin, on pourrait adopter l' approche du test en douceur , comme dans le livre de Rayner & Best ( Smooth Tests of Goodness of Fit , 1990 - bien que je pense qu'il y en ait une plus récente, avec Thas et " in R " ajoutés au titre). Le cas exponentiel est également couvert par:

JCW Rayner et DJ Best (1990), "Des tests en douceur de la qualité de l'ajustement: un aperçu", Revue statistique internationale , vol. 58, n ° 1 (avril 1990), p. 9-17

Cosma Shalizi discute également des tests en douceur dans un chapitre de ses notes de cours sur l' analyse avancée des données de premier cycle , ou consultez le chapitre 15 de son livre Advanced Data Analysis from an Elementary Point of View .

Pour certains des éléments ci-dessus, vous devrez peut-être simuler la distribution de la statistique de test; pour d'autres, des tableaux sont disponibles (mais dans certains de ces cas, il peut être plus facile de simuler de toute façon, ou encore plus précis de se simuler, comme avec le test de Lilliefors, en raison de la taille de simulation limitée dans l'original).

De tous ceux-là, je pencherais pour faire celui qui est l'équivalent exponentiel de Shapiro-Francia (c'est-à-dire que je testerais la corrélation dans le tracé QQ [ou si je faisais des tableaux, j'utiliserais peut-être , qui rejettera les mêmes cas] - il devrait être assez puissant pour être compétitif avec les meilleurs tests, mais est très facile à faire, et a la correspondance agréable avec l'apparence visuelle de l'intrigue QQ (on pourrait même choisissez d'ajouter la corrélation et la valeur de p au tracé, si vous le souhaitez).n(1r2)


5

Vous pouvez utiliser un qq-plot , qui est une méthode graphique pour comparer deux distributions de probabilité en traçant leurs quantiles l'un contre l'autre.

Dans R, il n'y a pas de fonction qq-plot prête à l'emploi pour la distribution exponentielle spécifiquement (au moins parmi les fonctions de base). Cependant, vous pouvez utiliser ceci:

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

Lors de l'interprétation de vos résultats: si les deux distributions comparées sont similaires, les points du tracé qq se situeront approximativement sur la ligne y = x. Si les distributions sont liées linéairement, les points du tracé qq se situeront approximativement sur une ligne, mais pas nécessairement sur la ligne y = x.


2
Dans Stata, qexpde SSC est une implémentation en conserve.
Nick Cox
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.