gpt4 book ai didi

r - 作业 : Simulating coin tosses until consecutive heads using R

转载 作者:行者123 更新时间:2023-12-02 03:39:02 25 4
gpt4 key购买 nike

我是 R 的新手,因此在这里提问(无法找到非常有用的详细模拟教程。)

问题陈述是这样的

  1. 模拟抛硬币 20 次并记录正面朝上的次数最长的正面。
  2. 模拟抛硬币并记录在连续(连续)出现 2、3、4 个正面(负二项式?)之前所需的抛掷次数
  3. 使用不同的种子进行 100 次运行,以查找记录的项目分布。

如何用编程语言 R 解决这个问题?

对于 1,我执行了以下操作:

n=20                #no of trials
y=NULL #initializing a vector of NULL values
for (i in 1:n) {
x=runif(1) #random uniform
if (x<0.5) { #if condition for assigning heads / tails
y[i]='H'
} else {
y[i]='T'
}
}
y #print the vector storing the heads and tails.

对于 2,我知道这是负二项式的情况,因为它表示“直到 2、3、4 个正面依次出现”。但我不确定如何继续在 R 中编写代码或提出逻辑。

对于 3,我猜必须计算 100 次运行中正面朝上的次数,正面朝上的运行长度。但是设置不同的种子意味着什么?我不确定。

注意 这是一个家庭作业问题,是的(我不能这样标记它)。我不需要代码,只是一些指示/更正/澄清/建议会有所帮助。

edit 为了模拟 2,我在 MATLAB 上尝试了以下代码 -

head_count = 0;
flip_count = 0;

while (head_count < 3) #counting for 3 multiple heads
flip = rand(1);
flip_count = flip_count+1;
if (flip > 0.5)
head_count = head_count + 1;
else
head_count = 0; #invalidate head counts if not successive.
end
end
disp(flip_count)

请让我知道这个逻辑是否正确。我可以使用 R 重新创建它。

最佳答案

因为这是家庭作业,我想给你一些关于#2 和#3 的建议。

对于 #2,制作一个循环,不断抛硬币并计算连续出现正面的次数。每次 throw 时, throw 次数加 1,当达到请求的正面朝上数时,返回 throw 次数。

为了让你开始,这将做 nbTosses tossesL

coin <- c('h','t')

ComputeNbTosses <- function(targetTosses) {
nbtosses = 0;
while (nbtosses < targetTosses) {
nbtosses = nbtosses + 1
}
return(nbtosses);
}

你只需要修改它来接受参数targetHeads,只有当你到达tagetHeads时才退出while循环。

对于#3,将#2 放入一个函数中,然后使用set.seed(integer) 来设置种子。计算机上的随机数并不是真正随机的。大多数随机生成器都允许您设置种子。如果您使用相同的种子,您将获得两次相同的伪随机数序列,这允许进行调试。

编辑:我将#2 从递归更改为普通循环,为他编写代码会更容易。

编辑(提示):这将计算你连续有多少个正面朝上,现在你必须在达到正面朝上的目标值时停止循环:

coin <- c('h','t')

ComputeNbTosses <- function(targetTosses) {
nbTosses = 0;
nbHeadsInRow = 0;
allTosses = c();
while (nbTosses < targetTosses) {
toss = sample(coin,1,T)
allTosses = c(allTosses, toss);
if (toss == 'h') {
nbHeadsInRow = nbHeadsInRow + 1;
} else {
nbHeadsInRow = 0;
}
nbTosses = nbTosses + 1
}
ret = list();
ret$nbTosses = nbTosses;
ret$nbHeadsInRowAtEnd = nbHeadsInRow;
ret$allTosses = allTosses;
return(ret);
}

ComputeNbTosses(5);
ComputeNbTosses(8);

这将打印当它到达 nbTosses 时你在一行中有多少个正面朝上。这不是你想要的。你想要的是:

  • 将参数从 targetTosses 更改为 targetHeadsInRow
  • 更改 while 中的条件,使其在 nbHeadsInRow 达到 targetHeadsInRow 时停止。
  • 你需要返回的是nbTosses(达到你的条件的 throw 次数)

如果有任何不清楚的地方,请告诉我。

关于r - 作业 : Simulating coin tosses until consecutive heads using R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com