我是R的新手因此在这里询问(未能找到非常有用的详细仿真教程。)
问题陈述是这个
如何在编程语言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次运行得到的头数,运行长度。但它设置不同的种子意味着什么呢?我不确定。
注意这是一个家庭作业问题,是的(我无法对其进行标记)。我不需要代码,只需一些指示/更正/澄清/建议会有所帮助。
编辑为了模拟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。
重新创建它答案 0 :(得分:1)
由于这是作业,我想给你一些关于#2和#3的指示。
对于#2,做一个循环,它继续做硬币投掷并计算连续的头数。每次投掷都会将投掷次数增加1,当达到要求的投掷次数时,只需返回投掷次数。
为了让你入门,这将是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)
来设置种子。计算机上的随机数并不是随机的。大多数随机生成器允许您设置种子。如果你使用相同的种子,你将得到两倍相同的伪随机数序列,这允许调试。
编辑(提示): 这将计算你有多少个头,现在你必须在达到头的目标值时停止循环:
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
(达到您条件的投掷次数)如果有什么不清楚,请告诉我。