我的讲师给了我以下代码,虽然它对我的作业等非常有效,但如果可能的话,我想简化一下。它的工作原理是计算重复试验的I型误差,并显示在某些阶段停止试验的概率,如果它们足够成功的结果。它还计算试验样本大小的平均值和标准差。这是代码:
Table <- function(simulateP,nsims,postcut,hypothesisP,nCuts){
win <- logical(nsims)
ss <- numeric(nsims)
nInts <- nCuts
for (i in 2:length(nCuts)){
nInts[i] <- nCuts[i] - nCuts[i-1]
}
for (i in 1:nsims){
x <- rbinom(length(nCuts),nInts,simulateP)
x <- c(x[1],x[1]+x[2],x[1]+x[2]+x[3])
ProbSup <- 1 - pbeta(hypothesisP,1+x,1+nCuts-x)
# Probability of Success
win[i] <- any(ProbSup > postcut )
# Sample size
ss[i] <- min(nCuts[ProbSup > postcut],max(nCuts))
}
out <- c(length(win[win])/nsims,mean(ss),
sqrt(var(ss)),table(ss)/nsims)
names(out) <- c('Pr(win)','MeanSS','SD SS',as.character(nCuts))
out
}
## Input these values for the Type I error
> nsims <- 1000000
> postcut <- 0.95
> hypothesisP <- 0.5
> simulateP <- 0.5
> nCuts <- c(50,75,100)
> out <- Table(simulateP,nsims,postcut,hypothesisP,nCuts)
> out
Pr(win) MeanSS SD SS 50 75 100
0.095770 96.455625 12.247579 0.059165 0.023445 0.917390
我还想知道是否可以在最后创建的表格中创建行以便于阅读,但我不确定这是否可行。
答案 0 :(得分:1)
第一个循环可以写成:
c(nCuts[1], diff(nCuts))