Загрузите пакет, необходимый.
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)
.density
функция полезна.Ответы:
Вопрос 1
То, как вы рассчитываете плотность вручную, кажется неправильным. Нет необходимости округлять случайные числа из гамма-распределения. Как отметил @Pascal, вы можете использовать гистограмму для построения плотности точек. В приведенном ниже примере я использую функцию,
density
чтобы оценить плотность и построить ее в виде точек. Я представляю соответствие как с точками, так и с гистограммой:Вот решение, которое предоставил @Pascal:
вопрос 2
Для оценки качества посадки рекомендую пакет
fitdistrplus
. Вот как это можно использовать для подгонки двух распределений и сравнения их подгонки графически и численно. Командаgofstat
выводит на экран несколько показателей, таких как AIC, BIC и некоторые статистические данные gof, такие как KS-Test и т. Д. Они в основном используются для сравнения подгонок различных распределений (в данном случае гамма против Вейбулла). Более подробную информацию можно найти в моем ответе здесь :@NickCox справедливо советует, что QQ-Plot (верхняя правая панель) является лучшим одиночным графиком для оценки и сравнения подгонок. Установленные плотности трудно сравнивать. Я включаю и другую графику для полноты картины.
источник
fitdistrplus
gofstat