Carica il pacchetto necessario.
library(ggplot2)
library(MASS)
Genera 10.000 numeri adattati alla distribuzione gamma.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Disegna la funzione di densità di probabilità, supponendo che non sappiamo a quale distribuzione x si adatta.
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()
Dal grafico, possiamo imparare che la distribuzione di x è abbastanza simile alla distribuzione gamma, quindi usiamo fitdistr()
in pacchetto MASS
per ottenere i parametri di forma e velocità di distribuzione gamma.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Traccia il punto effettivo (punto nero) e il grafico adattato (linea rossa) nella stessa trama, ed ecco la domanda, per favore guarda prima la trama.
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()
Ho due domande:
I veri parametri sono
shape=2
,rate=0.2
ei parametri che uso la funzionefitdistr()
per ottenere sonoshape=2.01
,rate=0.20
. Questi due sono quasi uguali, ma perché il grafico adattato non si adatta bene al punto reale, ci deve essere qualcosa di sbagliato nel grafico adattato, o il modo in cui disegno il grafico adattato e i punti effettivi è totalmente sbagliato, cosa devo fare ?Dopo aver ottenuto il parametro del modello, stabilisco, in che modo valuto il modello, qualcosa come RSS (somma quadrata residua) per il modello lineare, o il valore p di
shapiro.test()
,ks.test()
e altri test?
Sono povero di conoscenza statistica, potresti gentilmente aiutarmi?
ps: ho cercato molte volte su Google, StackOverflow e CV, ma non ho trovato nulla correlato a questo problema
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.