Come posso verificare se i miei dati si adattano a una distribuzione esponenziale?


22

Come posso verificare se i miei dati, ad esempio lo stipendio, provengono da una distribuzione esponenziale continua in R?

Ecco l'istogramma del mio campione:

inserisci qui la descrizione dell'immagine

. Qualsiasi aiuto sarà molto apprezzato!


1
la tua variabile è discreta o continua? La distribuzione esponenziale è definita come continua .
Curioso

continuo. Mi chiedo se ci sia qualche prova in R per verificarlo
sconsiderato il

1
Benvenuto. Cerca la funzione fitdistrin R. Regola le funzioni di densità di probabilità (pdf) in base al metodo di stima della massima verosimiglianza (MLE). Cerca anche in questo sito termini come pdf, fitdistr, mle e domande simili verranno fuori. Tenete presente che domande del genere richiedono quasi un esempio riproducibile per raccogliere buone risposte. Inoltre, aiuta se la domanda non riguarda esclusivamente la programmazione (il che potrebbe indurla a essere messa in sospeso come off-topic).
Andre Silva,

8
Una distribuzione esponenziale verrà tracciata come una linea retta contro posizione del diagramma ) in cui la posizione del diagramma è (rango - a ) / ( n - 2 a + 1 ) , il rango è 1 per il valore più basso, n è la dimensione del campione e scelte popolari per un includono 1 / 2 . Ciò fornisce un test informale che può essere utile o più utile di qualsiasi test formale. ln(1a)/(n2a+1)1na1/2
Nick Cox,

@Berkan ha sviluppato l'idea della trama quantile nel suo post.
Nick Cox,

Risposte:


29

Lo farei stimando prima l'unico parametro di distribuzione che rateutilizza fitdistr. Questo non ti dirà se la distribuzione si adatta o meno, quindi è necessario utilizzare il test di bontà di adattamento . Per questo, puoi usare 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)

inserisci qui la descrizione dell'immagine

Dalla mia esperienza personale (anche se non l'ho mai trovata ufficialmente da nessuna parte, per favore confermami o correggimi), ks.testfunzionerà solo se fornisci prima la stima dei parametri. Non è possibile lasciarlo stimare automaticamente i parametri come ad es goodfit. Ecco perché è necessaria questa procedura in due passaggi fitdistr.

Per maggiori informazioni seguire l'ottima guida di Ricci: MONTAGGIO distribuzioni con R .


2
+1. Ks.test è il miglior test per testare la bontà di adattamento in tali situazioni? Penso che tu abbia anche risposto a una mia domanda .
Andre Silva,

4
solo un avvertimento, dovresti stare attento se stai valutando i parametri dai dati stessi. In tal caso, un test come Anderson Darling potrebbe essere il migliore, in quanto è robusto contro tali situazioni.
JPC,

Sul test KS per esponenzialità quando il parametro rate è stimato dai dati: vedi Una domanda ingenua sul test di Kolmogorov Smirnov .
Scortchi - Ripristina Monica

8

Mentre di solito consiglierei di controllare l'esponenzialità usando grafici diagnostici (come i diagrammi QQ), discuterò dei test, poiché le persone spesso li vogliono:

Come suggerisce Tomas, il test di Kolmogorov-Smirnov non è adatto per testare l'esponenzialità con un parametro non specificato.

Tuttavia, se si adattano le tabelle per la stima dei parametri, si ottiene il test di Lilliefors per la distribuzione esponenziale.

Lilliefors, H. (1969), "Sul test di Kolmogorov – Smirnov per la distribuzione esponenziale con media sconosciuta", Journal of American Statistical Association , Vol. 64 pagg. 387–389.

L'uso di questo test è discusso nelle statistiche pratiche non parametriche di Conover .

Tuttavia, in Goodness of Fit Techniques di D'Agostino & Stephens , discutono una modifica simile del test Anderson-Darling (un po 'obliquamente se ricordo bene, ma penso che tutte le informazioni richieste su come affrontarlo per il caso esponenziale siano si trova nel libro), ed è quasi certo di avere più potere contro alternative interessanti.

n(1r2)r

Infine, si potrebbe adottare un approccio test regolare , come nel libro di Rayner & Best ( Smooth Tests of Goodness of Fit , 1990 - anche se credo che ce ne sia uno più recente, con Thas e " in R " aggiunti al titolo). Il caso esponenziale è anche trattato in:

JCW Rayner e DJ Best (1990), "Smooth Test of Goodness of Fit: An Overview", International Statistical Review , Vol. 58, n. 1 (aprile 1990), pagg. 9-17

Cosma Shalizi discute anche dei test regolari in un capitolo delle sue note di lezione sull'analisi avanzata dei dati del corso di laurea , o vedi il capitolo 15 del suo libro Advanced Data Analysis da un punto di vista elementare .

Per alcuni dei precedenti, potrebbe essere necessario simulare la distribuzione della statistica del test; per altri sono disponibili tabelle (ma in alcuni di questi casi, può essere più semplice simulare comunque, o ancora più preciso simulare te stesso, come con il test Lilliefors, a causa delle dimensioni di simulazione limitate nell'originale).

n(1r2)


5

Puoi usare un qq-plot , che è un metodo grafico per confrontare due distribuzioni di probabilità tracciando i loro quantili l'uno contro l'altro.

In R, non esiste una funzione qq-plot pronta all'uso per la distribuzione esponenziale in particolare (almeno tra le funzioni di base). Tuttavia, puoi usare questo:

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()
  }

Durante l'interpretazione dei risultati: se le due distribuzioni confrontate sono simili, i punti nel diagramma qq si trovano approssimativamente sulla linea y = x. Se le distribuzioni sono linearmente correlate, i punti nel diagramma qq si trovano approssimativamente su una linea, ma non necessariamente sulla linea y = x.


2
In Stata, qexpda SSC è un'implementazione predefinita.
Nick Cox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.