Chargez le package nécessaire.
library(ggplot2)
library(MASS)
Générez 10 000 nombres adaptés à la distribution gamma.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Dessinez la fonction de densité de probabilité, supposant que nous ne savons pas à quelle distribution x correspond.
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()
À partir du graphique, nous pouvons apprendre que la distribution de x est assez similaire à la distribution gamma, nous utilisons donc fitdistr()
dans le package MASS
pour obtenir les paramètres de forme et de taux de distribution gamma.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Dessinez le point réel (point noir) et le graphique ajusté (ligne rouge) dans le même tracé, et voici la question, veuillez d'abord regarder le tracé.
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()
J'ai deux questions:
Les paramètres réels sont
shape=2
,rate=0.2
et les paramètres que j'utilise la fonctionfitdistr()
pour obtenir sontshape=2.01
,rate=0.20
. Ces deux sont presque les mêmes, mais pourquoi le graphique ajusté ne correspond pas bien au point réel, il doit y avoir quelque chose de mal dans le graphique ajusté, ou la façon dont je dessine le graphique ajusté et les points réels est totalement erronée, que dois-je faire ?Après avoir obtenu le paramètre du modèle que j'établis, de quelle manière j'évalue le modèle, quelque chose comme RSS (somme carrée résiduelle) pour le modèle linéaire, ou la valeur de p de
shapiro.test()
,ks.test()
et un autre test?
Je suis pauvre en connaissances statistiques, pourriez-vous bien vouloir m'aider?
ps: J'ai fait des recherches dans Google, stackoverflow et CV plusieurs fois, mais je n'ai rien trouvé en rapport avec ce problème
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.