Załaduj potrzebny pakiet.
library(ggplot2)
library(MASS)
Wygeneruj 10 000 liczb dopasowanych do rozkładu gamma.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Narysuj funkcję gęstości prawdopodobieństwa, zakładając, że nie wiemy, do którego rozkładu x pasuje.
t1 <- as.data.frame(table(x))
names(t1) <- c("x","y")
t1 <- transform(t1,x=as.numeric(as.character(x)))
t1$y <- t1$y/sum(t1[,2])
ggplot() +
geom_point(data = t1,aes(x = x,y = y)) +
theme_classic()
Z wykresu możemy dowiedzieć się, że rozkład x jest podobny do rozkładu gamma, więc używamy fitdistr()
w pakiecie, MASS
aby uzyskać parametry kształtu i szybkości rozkładu gamma.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Narysuj rzeczywisty punkt (czarna kropka) i dopasowany wykres (czerwona linia) na tym samym wykresie, a oto pytanie, najpierw spójrz na wykres.
ggplot() +
geom_point(data = t1,aes(x = x,y = y)) +
geom_line(aes(x=t1[,1],y=dgamma(t1[,1],2,0.2)),color="red") +
theme_classic()
Mam dwa pytania:
Rzeczywiste parametry
shape=2
,rate=0.2
oraz parametry korzystać z funkcjifitdistr()
, aby uzyskać toshape=2.01
,rate=0.20
. Te dwa są prawie takie same, ale dlaczego dopasowany wykres nie pasuje do rzeczywistego punktu, musi być coś nie tak na dopasowanym wykresie lub sposób, w jaki narysowałem dopasowany wykres i rzeczywiste punkty, jest całkowicie błędny, co powinienem zrobić ?Po tym, jak uzyskać parametr modelu I ustalić, w jaki sposób mogę ocenić model, coś RSS (resztkowa suma kwadratowy) dla modelu liniowego lub p-wartości
shapiro.test()
,ks.test()
i inne badania?
Mam słabą wiedzę statystyczną, czy mógłbyś mi pomóc?
ps: Mam wyszukiwanie w Google, stackoverflow i CV wiele razy, ale nie znalazłem nic związanego z tym problemem
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.density
funkcja jest przydatna.Odpowiedzi:
Pytanie 1
Sposób, w jaki obliczasz gęstość ręcznie, wydaje się nieprawidłowy. Nie ma potrzeby zaokrąglania liczb losowych z rozkładu gamma. Jak zauważył @Pascal, możesz użyć histogramu, aby wykreślić gęstość punktów. W poniższym przykładzie używam funkcji
density
do oszacowania gęstości i wykreślenia jej jako punktów. Prezentuję dopasowanie zarówno z punktami, jak i histogramem:Oto rozwiązanie dostarczone przez @Pascal:
pytanie 2
Aby ocenić poprawność dopasowania, polecam pakiet
fitdistrplus
. Oto, jak można go wykorzystać, aby dopasować dwa rozkłady i porównać ich dopasowania graficznie i numerycznie. Poleceniegofstat
wypisuje kilka miar, takich jak AIC, BIC i niektóre statystyki gof, takie jak test KS itp. Służą one głównie do porównywania pasowań różnych rozkładów (w tym przypadku gamma względem Weibulla). Więcej informacji można znaleźć w mojej odpowiedzi tutaj :@NickCox słusznie informuje, że wykres QQ (prawy górny panel) jest najlepszym pojedynczym wykresem do oceniania i porównywania pasowań. Zagęszczone gęstości są trudne do porównania. Załączam również inne grafiki ze względu na kompletność.
źródło
fitdistrplus
igofstat
w odpowiedzi