我想用R自动计算概率。规则:从0点开始。我们将掷硬币。如果它能引起注意,我们就明白了。如果成绩落后,我们将把目前的成绩提高一倍。
我想编码的函数:
-
n次翻转(5次翻转,15次翻转…(后的预期得分
-
翻转n次后,分数为2的幂的概率是多少(将此概率表示为0到1之间的数字(?
-
标准偏差
-
预期的分数标准差?
我希望我的函数能够适应规则的更改。例如,头部的概率为2/3,尾部的概率为1/3。10次翻转后我们的预期得分是多少?
首先,您需要考虑函数需要采用哪些参数。它似乎只需要取参数n
——翻转次数。
flips <- function(n){
}
现在,您可以思考函数内部需要发生什么。
- 以0分开始
- 如果头,则加1
- 双if尾
您还需要能够执行n
次,因此它需要处于循环中。
flips <- function(n){
## start with 0
sum <- 0
for(i in 1:n){
# create a flip (random draw of H or T)
flip <- sample(c("H", "T"), 1)
# identify what to do if flip is H
if(flip == "H"){
# increment sum by 1
sum <- sum + 1
# identify what to do if flip is not H (i.e., it is T)
}else{
sum <- sum*2
}
}
# return the sum
sum
}
flips(10)
# [1] 28
像这样的函数将在n
试验后进行编码,会发生什么。也就是说,你试图回答的问题似乎更多的是理论性的,而不是关于编码的。如果你能指定你需要做的操作,那么我们可能会帮助你编码
也许你可以从下面这样构建一个函数f
开始,它会产生一系列随机变量,其中0
和1
分别表示头和尾
f <- function(n,p) {
v <- sample(c(0,1),n,replace = TRUE,prob = c(p,1-p))
s <- 0
for (i in v) {
if (i == 1) {
s <- s*2
} else {
s <- s + 1
}
}
s
}
然后可以应用replicate
来重复实验,例如
n <- 20
p <- 2/3
r <- replicate(1e6,f(n,p))
我们将看到
> mean(r)
[1] 629.074
> sd(r)
[1] 1326.681