我想了解如何生成正態分佈,如果我已經知道特定百分位數。從已知百分位生成正態分佈
一位用戶對類似問題(link here)給出了非常全面的回答,但是當我用我現有的數據進行嘗試和測試時,差異太大了。
如何這樣做:
x <- c(5,8,11)
PercRank <- c(2.1, 51.1, 98.8)
PercRank = 2.1例如告訴數據的2.1%具有值/得分< = 5(x的第一值)。類似地,PercRank = 51.1告訴51.1%的數據具有值/分數< = 8。
我遵循link中的方法。這是我的代碼:
cum.p <- c(2.1, 51.1, 98.8)/100
prob <- c(cum.p[1], diff(cum.p), .01)
x <- c(5,8,11)
freq <- 1000 # final output size that we want
# Extreme values beyond x (to sample)
init <- -(abs(min(x)) + 1)
fin <- abs(max(x)) + 1
ival <- c(init, x, fin) # generate the sequence to take pairs from
len <- 100 # sequence of each pair
s <- sapply(2:length(ival), function(i) {
seq(ival[i-1], ival[i], length.out=len)
})
# sample from s, total of 10000 values with probabilities calculated above
out <- sample(s, freq, prob=rep(prob, each=len), replace = T)
quantile(out, cum.p)
# 2% 51.1% 98.8%
# 5 8 11
c(mean(out), sd(out))
# [1] 7.834401 2.214227
所有這一切都在徵求意見(linked),並且到目前爲止好。然後我試圖檢查生成的正態分佈如何與我的擬合值的工作:
data.frame(sort(rnorm(1000, mean=mean(out), sd=sd(out))))
...
# 988 13.000904
# 989 13.028881
# 990 13.076649
...
# 1000 14.567080
我很擔心,因爲第九百八十八值(例如,1000個樣本98.8%)爲13.000904,而我的價值適合98.8%百分位數是11.0。
我重新生成了許多次的分佈,並且方差一直大於它所需要的。
我很難過。如果有人能告訴我一種使方差更準確的方法,我將不勝感激。或者,這是不可避免的?
(我第一次在這裏發帖,我很抱歉,如果我打破規則 - 我能更清楚如果需要的話)。
它的工作!比以前的方法好得多。非常感謝! – Michelle
如果我有一個PercRank值的數據框,那麼重複執行此操作最簡單的方法是什麼? – Michelle
那麼,你可能可以使用'lapply'或'apply'。 – Roland