Stima della distribuzione dai dati


12

Ho un campione di dati generati Rda rnorm(50,0,1), quindi i dati ovviamente assumono una distribuzione normale. Tuttavia, Rnon "conosce" queste informazioni distributive sui dati.

Esiste un metodo in Rgrado di stimare da quale tipo di distribuzione proviene il mio campione? In caso contrario, userò la shapiro.testfunzione e procederò in questo modo.


Non sono sicuro di riconoscere il risultato di questa domanda. È vero che se hai solo un vettore di numeri in R, non ci sono molti metadati associati ad esso, ma perché ti darebbe fastidio? Perché ne avresti bisogno / cosa vorresti fare con esso? Supponiamo che avesse tale, sarebbe utile solo nella misura in cui si passasse quel vettore a una funzione con metodi specifici per dati gaussiani rispetto ad altri. Non ne conosco nessuno (anche se difficilmente sono l'utente R più esperto del mondo).
gung - Ripristina Monica

Se vuoi solo verificare se un dato campione sembra normale, il test di Shapiro-Wilk è un'opzione decente (anche se vale la pena leggere questa domanda e le risposte fornite). Posso vedere come ciò potrebbe emergere in uno studio di simulazione, ma senza ulteriori dettagli sullo studio, è difficile dare una risposta utile.
gung - Ripristina Monica

Perché è necessario identificare una distribuzione per i dati? La scelta distributiva automatica è spesso un'idea interessante, ma ciò non la rende una buona idea.
Glen_b

Risposte:


21

C'è la fitdistrfunzione nel pacchetto MASS o alcune delle funzioni nel pacchetto fitdistrplus . Ecco alcuni esempi di quest'ultimo.

require(fitdistrplus)

set.seed(1)
dat <- rnorm(50,0,1)
f1 <- fitdist(dat,"norm")
f2 <- fitdist(dat,"logis")
f3 <- fitdist(dat,"cauchy")

quindi per esempio

> f1
Fitting of the distribution ' norm ' by maximum likelihood 
Parameters:
      estimate Std. Error
mean 0.1004483 0.11639515
sd   0.8230380 0.08230325

e puoi vedere le trame con

plotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
plotdist(dat,"logis",para=list(location=f2$estimate[1],scale=f2$estimate[2]))
plotdist(dat,"cauchy",para=list(location=f3$estimate[1],scale=f3$estimate[2]))

quindi sembra plausibile come una distribuzione normale

inserisci qui la descrizione dell'immagine

ma forse anche come distribuzione logistica (avrai bisogno di un campione più ampio per distinguerli nelle code)

inserisci qui la descrizione dell'immagine

sebbene con un qqplot e guardando il CDF si può dire che questa probabilmente non è una distribuzione di Cauchy

inserisci qui la descrizione dell'immagine


1
Grazie Henry per una bella panoramica. Mi è stato chiesto se ci sono pacchetti che accettano dati e sputano quale distribuzione (e parametri) sputa meglio. Sei a conoscenza di tali funzionalità in uno dei pacchetti?
Roman Luštrik,

3
fitdistfornisce stime dei parametri. Ci sono alcuni suggerimenti su quale potrebbe essere la distribuzione da funzioni come, descdist(dat, boot = 1000)ma anche loro trarrebbero beneficio da un campione più ampio.
Henry,

Nessuna di queste funzioni risolverà il problema che hai posto nella tua ultima domanda quando il campione non è rappresentativo.
John

1
@Scott Kaiser: non la penso così. fitdist()è una funzione nel pacchetto fitdistrplus, ed è quello che stavo usando. Nel frattempo fitdistr()è una funzione nel pacchetto MASS e non funzionerebbe qui in questo modulo.
Henry,

1
Non ho abbastanza punti per aggiungere questo come commento, ma proprio come una nota aggiuntiva alle informazioni fornite nel thread sopra, è anche possibile semplicemente chiamare plot(f1)invece del più contortoplotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
swestenb
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.