如何在R

时间:2017-03-19 00:04:22

标签: r statistics

随机变量(RV)由每次试验的成功频率组成,例如:

  

假设每个试验的独立性,让X为N个学生通过统计测试所需的试验次数:

     

X = {1,2,3,4,5,6, 7或以上}

     

Freq = {31,27,14,11,9,4,8​​}

在R中如何将二项分布拟合到此RV。我试过 fitdistr ,但我不知道如何处理7+频率。

谢谢

1 个答案:

答案 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)

enter image description here