java模拟抛硬币,作业:使用R模拟抛硬币直到连续的掷硬币

I am new to R hence asking here (haven't been able to find very helpful tutorials for simulation that are detailed.)

The problem statement is this

Simulate a coin toss for 20 times and record the number of heads

& longest run of heads.

Simulate a coin toss and record the number of flips necessary until 2,3,4 heads occur in sequence (consecutively) (negative binomial?)

Make 100 runs with different seeds to find the distribution of items recorded.

How does one go about solving this in the programming language R ?

For 1, I did the following:

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.

For 2, I understand that this is a case of negative binomial because it says "until 2,3,4 heads occur in sequence" . But I am not sure how to proceed to write the code in R or come up with the logic.

For 3, I am guessing have to calculate the number of heads got in 100 runs, run lengths of heads. But what does it imply to set different seeds? I am unsure of that.

note This is a homework problem, yes (I am not able to tag it so). I do not need the code, just some pointers/ corrections/clarifications/suggestions would help.

edit For simulating 2, I tried out the following code on 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)

Please let me know if this logic is correct. And I can recreate it using R.

解决方案

As this is homework, I would like to give you some pointers for #2 and #3.

For #2, make a loop which keeps doing coin tosses and count the number of heads in a row. At every toss increase the count of tosses by 1 and when reaching the number of heads requested, just return the count of tosses.

To get you started, this will do nbTosses tossesL

coin

ComputeNbTosses

nbtosses = 0;

while (nbtosses < targetTosses) {

nbtosses = nbtosses + 1

}

return(nbtosses);

}

You just need to amend it to take in parameter targetHeads and exit the while loop only when you have reached the tagetHeads.

For #3, put #2 in a function and then use set.seed(integer), to set the seed. Random numbers on a computer are not really random. Most of random generators allow you to set a seed. If you use the same seed you will get twice the same sequence of pseudo random numbers, this allows for debugging.

EDIT: I changed #2 from a recursion to a normal loop, it will be easier to code for him.

EDIT (Tip):

This will count how many heads in a row you have, now you have to make the loop stop when you reach the target value of heads:

coin

ComputeNbTosses

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);

This will print how many heads in row you had when it reached nbTosses. This is not what you want. What you want is:

change the argument from targetTosses to targetHeadsInRow

change the condition in the while so that it stops when nbHeadsInRow reaches targetHeadsInRow.

what you need to return is nbTosses (the number of tosses to reach your condition)

Let me know if anything is not clear.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值