R的使用數據的經驗排序。
您的截斷數據的第10百分位和一個正態分佈適合你的數據恰好是八九不離十,雖然第一個百分位是有點不同。例如:
# Load data
df = read.csv("data.csv", header=TRUE, stringsAsFactors=FALSE)
# Fit a normal distribution to the data
df.dist = fitdist(df$x, "norm", discrete = T)
現在我們來得到擬合分佈和原始數據的分位數。除了第10個百分點之外,我還包括了第1個百分點。你可以看到擬合的正態分佈的第10個百分點只比數據低一點。然而,擬合的正態分佈的第1個百分點是較低的。
quantile(df.dist, p=c(0.01, 0.1))
Estimated quantiles for each specified probability (non-censored data)
p=0.01 p=0.1
estimate 1632.829 2459.039
quantile(df$x, p=c(0.01, 0.1))
1% 10%
2064.79 2469.90
quantile(df$x, p=c(0.01, 0.1), type=9)
1% 10%
2064.177 2469.400
您也可以通過數據的直接排名和由fitdist
獲得均值和標準差等於擬合值的正態分佈的第1和第10百分位數看到:
# 1st and 10th percentiles of data by direct ranking
df$x[order(df$x)][round(c(0.01,0.1)*5780)]
[1] 2064 2469
# 1st and 10th percentiles of fitted distribution
qnorm(c(0.01,0.1), df.dist$estimate[1], df.dist$estimate[2])
[1] 1632.829 2459.039
讓我們對原始數據的陰謀直方圖(藍色)以及擬合正態分佈(紅色)生成的假數據。重疊區域是紫色的。
# Histogram of data (blue)
hist(df$x, xlim=c(0,8000), ylim=c(0,1600), col="#0000FF80")
# Overlay histogram of random draws from fitted normal distribution (red)
set.seed(685)
set.seed(685)
x.fit = rnorm(length(df$x), df.dist$estimate[1], df.dist$estimate[2])
hist(x.fit, add=TRUE, col="#FF000080")
或者,我們可以繪製的數據(藍色)和從擬合正態分佈(紅色)隨機抽取的經驗累積分佈函數(ECDF)。水平灰線,標誌着第10百分位:
plot(ecdf(df$x), xlim=c(0,8000), col="blue")
lines(ecdf(x.fit), col="red")
abline(0.1,0, col="grey40", lwd=2, lty="11")
現在,我已經通過這個走了,我想知道,如果你期待fitdist
返回正態分佈,我們將有參數如果您的數據真的來自正常分佈並且未被截斷。相反,fitdist
返回一個正態分佈,其中的(截斷的)數據的均值和sd在手,所以fitdist
返回的分佈向右移動,與我們可能「預期」它的位置相比。
c(mean=mean(df$x), sd=sd(df$x))
mean sd
3472.4708 790.8538
df.dist$estimate
mean sd
3472.4708 790.7853
或者,另一個簡單的例子:x
通常與均值〜0和SD〜1。分佈式刪除所有值小於 - 1和xtrunc.dist
是fitdist
的輸出:
set.seed(55)
x = rnorm(6000)
xtrunc = x[x > -1]
xtrunc.dist = fitdist(xtrunc, "norm")
round(cbind(sapply(list(x=x,xtrunc=xtrunc), function(x) c(mean=mean(x),sd=sd(x))),
xtrunc.dist=xtrunc.dist$estimate),3)
x xtrunc xtrunc.dist
mean -0.007 0.275 0.275
sd 1.009 0.806 0.806
而且你可以在低於裝在截斷數據截斷數據和正常的分佈具有大致相同的第10百分位的ECDF情節看,雖然未截斷數據的第10百分位是(正如我們期望)向左移動。
美麗而完整的解釋!作爲後續,我如何構建符合我的數據的完整正態分佈(相同的m和sd),但沒有提到您的右移? – ciskoh