Laden Sie das benötigte Paket.
library(ggplot2)
library(MASS)
Generieren Sie 10.000 Zahlen, die an die Gammaverteilung angepasst sind.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Zeichnen Sie die Wahrscheinlichkeitsdichtefunktion, vorausgesetzt, wir wissen nicht, an welche Verteilung x angepasst ist.
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()
Aus dem Diagramm können wir lernen, dass die Verteilung von x der Gammaverteilung sehr ähnlich ist. Daher verwenden wir sie fitdistr()
im Paket MASS
, um die Parameter für Form und Geschwindigkeit der Gammaverteilung zu erhalten.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Zeichnen Sie den tatsächlichen Punkt (schwarzer Punkt) und das angepasste Diagramm (rote Linie) im selben Diagramm. Hier ist die Frage: Schauen Sie sich zuerst das Diagramm an.
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()
Ich habe zwei Fragen:
Die realen Parameter sind
shape=2
,rate=0.2
und die Parameter, mit denen ich die Funktionfitdistr()
abrufe, sindshape=2.01
,rate=0.20
. Diese beiden sind fast gleich, aber warum das angepasste Diagramm nicht gut zum tatsächlichen Punkt passt, muss etwas im angepassten Diagramm nicht stimmen, oder die Art und Weise, wie ich das angepasste Diagramm und die tatsächlichen Punkte zeichne, ist völlig falsch. Was soll ich tun? ?Nachdem ich die Parameter des Modells erhalte ich schaffen, in welcher Weise ich das Modell zu bewerten, so etwas wie RSS (Restquadratsumme) für lineares Modell oder den p-Wert
shapiro.test()
,ks.test()
und anderen Test?
Ich bin arm an statistischen Kenntnissen. Könnten Sie mir bitte helfen?
ps: Ich habe viele Male in Google, Stackoverflow und CV gesucht, aber nichts im Zusammenhang mit diesem Problem gefunden
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.