Cargue el paquete necesario.
library(ggplot2)
library(MASS)
Genera 10,000 números ajustados a la distribución gamma.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Dibuje la función de densidad de probabilidad, se supone que no sabemos a qué distribución se ajusta 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()
A partir del gráfico, podemos aprender que la distribución de x es muy parecida a la distribución gamma, por lo que la utilizamos fitdistr()
en un paquete MASS
para obtener los parámetros de forma y velocidad de distribución gamma.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Dibuje el punto real (punto negro) y el gráfico ajustado (línea roja) en el mismo diagrama, y esta es la pregunta, primero mire el diagrama.
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()
Tengo dos preguntas:
Los parámetros son reales
shape=2
,rate=0.2
y los parámetros que utilizo la funciónfitdistr()
de conseguir sonshape=2.01
,rate=0.20
. Estos dos son casi iguales, pero por qué el gráfico ajustado no se ajusta bien al punto real, debe haber algo mal en el gráfico ajustado, o la forma en que dibujo el gráfico ajustado y los puntos reales es totalmente incorrecta, ¿qué debo hacer? ?Después de obtener el parámetro del modelo que establezco, ¿de qué manera evalúo el modelo, algo como RSS (suma cuadrada residual) para el modelo lineal, o el valor p de
shapiro.test()
,ks.test()
y otra prueba?
Soy pobre en conocimiento estadístico, ¿podrían ayudarme amablemente?
PD: Tengo búsquedas en Google, stackoverflow y CV muchas veces, pero no encontré nada relacionado con este problema
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.