Загрузите пакет, необходимый.
library(ggplot2)
library(MASS)
Генерация 10000 номеров, приспособленных к гамма-распределению.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Нарисуйте функцию плотности вероятности, предположим, что мы не знаем, к какому распределению x подходит.
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()
Из графика мы можем узнать, что распределение x очень похоже на гамма-распределение, поэтому мы используем fitdistr()
пакет MASS
для получения параметров формы и скорости гамма-распределения.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Нарисуйте фактическую точку (черная точка) и подогнанный график (красная линия) на одном графике, и вот вопрос, пожалуйста, посмотрите график сначала.
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()
У меня есть два вопроса:
Реальные параметры
shape=2
,rate=0.2
и параметры , которые я использую функцию ,fitdistr()
чтобы получить этоshape=2.01
,rate=0.20
. Эти два почти одинаковы, но почему выровненный график плохо соответствует фактической точке, должно быть что-то не так в выровненном графике, или то, как я рисую подобранный график и фактические точки, совершенно неверно, что мне делать ?После того, как я получу параметр модели, которую я устанавливаю, каким образом я оцениваю модель, что-то вроде RSS (остаточная квадратная сумма) для линейной модели, или p-значение
shapiro.test()
,ks.test()
и другой тест?
Я беден статистическими знаниями, не могли бы вы мне помочь?
PS: у меня был поиск в Google, stackoverflow и CV много раз, но не нашел ничего, связанного с этой проблемой
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.