创建函数以使用R自动计算概率

  • 本文关键字:计算 概率 函数 创建 r
  • 更新时间 :
  • 英文 :


我想用R自动计算概率。规则:从0点开始。我们将掷硬币。如果它能引起注意,我们就明白了。如果成绩落后,我们将把目前的成绩提高一倍。

我想编码的函数:

  • n次翻转(5次翻转,15次翻转…(后的预期得分

  • 翻转n次后,分数为2的幂的概率是多少(将此概率表示为0到1之间的数字(?

  • 标准偏差

  • 预期的分数标准差?

我希望我的函数能够适应规则的更改。例如,头部的概率为2/3,尾部的概率为1/3。10次翻转后我们的预期得分是多少?

首先,您需要考虑函数需要采用哪些参数。它似乎只需要取参数n——翻转次数。

flips <- function(n){
}

现在,您可以思考函数内部需要发生什么。

  1. 以0分开始
  2. 如果头,则加1
  3. 双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开始,它会产生一系列随机变量,其中01分别表示头和尾

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

最新更新