Szacowanie rozkładu na podstawie danych

12

Mam próbkę danych wygenerowanych Rprzez rnorm(50,0,1), więc dane oczywiście przyjmują rozkład normalny. Jednak Rnie „zna” tych informacji o dystrybucji danych.

Czy istnieje metoda Rpozwalająca oszacować, z jakiego rodzaju dystrybucji pochodzi moja próbka? Jeśli nie, skorzystam z shapiro.testfunkcji i postąpię w ten sposób.

James Highbright
źródło
Nie jestem pewien, czy rozpoznaję wynik tego pytania. Prawdą jest, że jeśli masz wektor liczb w R, nie ma z nim wielu metadanych, ale dlaczego miałbyś to przeszkadzać? Dlaczego potrzebujesz tego / co chcesz z tym zrobić? Załóżmy, że tak, byłoby to pomocne tylko w takim stopniu, w jakim miałbyś przekazać ten wektor do funkcji za pomocą określonych metod dla danych Gaussa w porównaniu do innych. Nie znam żadnego (choć nie jestem najbardziej doświadczonym użytkownikiem R na świecie).
Gung - Przywróć Monikę
Jeśli chcesz tylko sprawdzić, czy dana próbka wydaje się normalna, test Shapiro-Wilka jest przyzwoitą opcją (chociaż warto poświęcić chwilę na przeczytanie tego pytania i udzielonych tam odpowiedzi). Widzę, jak to może wyglądać w badaniu symulacyjnym, ale bez dalszych szczegółów na temat badania trudno jest podać użyteczną odpowiedź.
Gung - Przywróć Monikę
Dlaczego musisz zidentyfikować dystrybucję danych? Automatyczny wybór dystrybucyjny jest często atrakcyjnym pomysłem, ale nie czyni go dobrym pomysłem.
Glen_b

Odpowiedzi:

21

Istnieje fitdistrfunkcja w pakiecie MASS lub niektóre funkcje w pakiecie fitdistrplus . Oto kilka przykładów z tego ostatniego.

require(fitdistrplus)

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

więc na przykład

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

i możesz zobaczyć wykresy za pomocą

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]))

więc wydaje się prawdopodobne jako normalny rozkład

wprowadź opis zdjęcia tutaj

ale może także jako dystrybucja logistyczna (będziesz potrzebować większej próbki, aby odróżnić je w reszce)

wprowadź opis zdjęcia tutaj

chociaż za pomocą qqplot i patrząc na CDF można stwierdzić, że prawdopodobnie nie jest to rozkład Cauchy'ego

wprowadź opis zdjęcia tutaj

Henz
źródło
1
Dziękuję Henryku za piękny przegląd. Zapytano mnie, czy są jakieś pakiety, które pobierają dane i wypluwają, która dystrybucja (i parametry) pluje najlepiej. Czy znasz taką funkcjonalność w którymkolwiek z pakietów?
Roman Luštrik
3
fitdistzapewnia oszacowanie parametrów. Istnieje kilka wskazówek na temat tego, jak może wyglądać rozkład funkcji, descdist(dat, boot = 1000)ale one także skorzystałyby na większej próbce.
Henry
Żadna z tych funkcji nie rozwiąże problemu postawionego w ostatnim pytaniu, gdy próbka nie jest reprezentatywna.
John
1
@Scott Kaiser: Nie sądzę. fitdist()jest funkcją pakietu fitdistrplus i właśnie tego używałem. Tymczasem fitdistr()jest to funkcja w pakiecie MASS i nie działałaby tutaj w tej formie.
Henry
1
Nie mam wystarczającej liczby punktów, aby dodać to jako komentarz, ale jako dodatkową notatkę do informacji podanych w powyższym wątku można również zadzwonić plot(f1)zamiast bardziej skomplikowanegoplotdist(dat,"norm",para=list(mean=f1$estimate[1],sd=f1$estimate[2]))
swestenb