Ich versuche, eine Beta-Verteilung auf ein Histogramm aus empirischen Daten anzupassen.Fit Verteilung auf empirische Daten
Das Problem, auf das ich stoße, ist, dass die angepasste Verteilung viel höher ist als die Balken im ursprünglichen Histogramm.
Die Originaldaten liegen außerhalb des Bereichs von [0,1]. Dies ist der Bereich, in dem die Beta-Verteilung ausgewertet werden kann. Daher skaliere ich die Originaldaten so, dass sie im Intervall [0,1] liegt.
Hier ist mein Code:
load("https://www.dropbox.com/s/c3psxx8jjbc20mo/data.Rdata?dl=0")
#create histogram with values normalized between 0 and 1
h <- hist((data-min(data))/(max(data)-min(data)),lty="blank",col="grey")
#normalize the density so the y-axis goes from 0 to 1
h$density <- h$counts/max(h$counts)
#plot the results
plot(h,freq=FALSE,cex.main=1,cex.axis=1,yaxt='n',ylim=c(0,1.5),col='grey',lty='blank',xaxt='n')
axis(2,at=seq(0,1,0.5),labels=seq(0,1,0.5))
axis(1,at=seq(0,1,0.5),labels=seq(0,1,0.5))
#fit beta distribution
a <- (data-min(data))/(max(data)-min(data))
a[a==1] <- 0.9999
a[a==0] <- 0.0001
fit.beta <- suppressWarnings(fitdistr(a, "beta", start = list(shape1=0.1, shape2=0.1)))
#overlay curve from beta distribution
alpha <- fit.beta$estimate[1]
beta <- fit.beta$estimate[2]
b <- rbeta(length(data),alpha,beta)
lines(density(b))
Was bin ich?
„normalisieren die Dichte so die y-Achse von 0 bis 1 geht“ Warum, dass Sie tun: weil es nicht die schönen Eigenschaften der beta-Verteilung zu verwenden ist? Dichtewerte sind nicht auf das Intervall [0, 1] beschränkt. – Roland
Siehe http://stackoverflow.com/questions/37375961/my-density-plot-in-r-has-values-beyond-1-how-can-i-fix-this/37378212#37378212 für einen Beitrag im Zusammenhang mit Rolands Kommentar. Es gibt einen Unterschied zwischen der Unterstützung ("x" -Werte) und der Entfernung ("y" -Werte). Die Unterstützung der Beta-Verteilung liegt im 0-1-Intervall. – coffeinjunky