随机变量(RV)由每次试验的成功频率组成,例如:
假设每个试验的独立性,让X为N个学生通过统计测试所需的试验次数:
X = {1,2,3,4,5,6, 7或以上}
Freq = {31,27,14,11,9,4,8}
在R中如何将二项分布拟合到此RV。我试过 fitdistr ,但我不知道如何处理7+频率。
谢谢
答案 0 :(得分:0)
设置数据
dd <- data.frame(X = 1:7,
freq=c(31,27,14,11,9,4,8))
设置分布函数:这里最难的部分是因为R定义了几何分布的域,从0开始而不是1 ...
dcgeom <- function(x, prob, cens=7, log=FALSE) {
r <- ifelse(x>=cens-1,
pgeom(x-1, prob, log.p = log, lower.tail=FALSE),
dgeom(x-1, prob, log = log))
return(r)
}
NLLfun <- function(prob) {
-sum(dd$freq*dcgeom(dd$X, prob=prob, log=TRUE))
}
library(bbmle)
m1 <- mle2(NLLfun,start=list(prob=0.5))
结果:
par(las=1,bty="l") ## cosmetic
plot(freq~X,data=dd,ylim=c(0,45))
points(1:6,sum(dd$freq)*dgeom(0:5,prob=coef(m1)),col=2,pch=16,
type="b")
points(7,sum(dd$freq)*pgeom(6,prob=coef(m1),lower.tail=FALSE),
col=2,pch=16)