Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
家庭作业:使用R模拟抛硬币直到连续的头部_R_Matlab_Probability - Fatal编程技术网

家庭作业:使用R模拟抛硬币直到连续的头部

家庭作业:使用R模拟抛硬币直到连续的头部,r,matlab,probability,R,Matlab,Probability,我是新手,因此在这里提问(还没有找到非常有用的详细模拟教程。) 问题陈述是这样的 模拟抛硬币20次,记录人头数 &头的最长行程 模拟抛硬币并记录所需的抛硬币次数,直到2,3,4个硬币头按顺序(连续)出现(负二项式?) 使用不同的种子运行100次,以查找记录的项目分布 如何用编程语言R来解决这个问题 对于1,我做了以下工作: n=20 #no of trials y=NULL #initializing a vector of NULL va

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

问题陈述是这样的

  • 模拟抛硬币20次,记录人头数 &头的最长行程
  • 模拟抛硬币并记录所需的抛硬币次数,直到2,3,4个硬币头按顺序(连续)出现(负二项式?)
  • 使用不同的种子运行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.
    
    n=20#试验次数
    y=NULL#初始化空值向量
    for(1:n中的i){
    x=runif(1)#随机均匀
    如果(x 0.5)
    人头数=人头数+1;
    其他的
    人头计数=0;#如果不是连续的,则使人头计数无效。
    结束
    结束
    显示(翻转计数)
    

    请告诉我这个逻辑是否正确。我可以用R重新创建它。

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

    对于#2,做一个循环,持续抛硬币,并计算一行中的掷硬币头数。每次抛硬币时,将掷硬币数增加1,当达到要求的掷硬币头数时,只需返回掷硬币数

    为了让你开始,这将做NB投掷

    coin <- c('h','t')
    
    ComputeNbTosses <- function(targetTosses) {
      nbtosses = 0;
      while (nbtosses < targetTosses) {
        nbtosses = nbtosses + 1
      }
      return(nbtosses);
    } 
    
    这将打印当到达NBS时您在行中有多少个磁头。这不是您想要的。您想要的是:

    • 将参数从
      targetTosses
      更改为
      targetHeadsInRow
    • 更改
      while
      中的条件,使其在
      nbHeadsInRow
      达到
      targetHeadsInRow
      时停止
    • 您需要返回的是
      nbhows
      (达到您的状态的投掷次数)

    如果有什么不清楚的地方,请告诉我。

    这是家庭作业吗?如果是,请确认它。此外,请分享您迄今为止的尝试,而不仅仅是要求他人编写代码并为您完成工作……Raaj,正如Justin在堆栈溢出上所说,我们更希望您发布您迄今为止尝试过的内容,并提及它是否是家庭作业。The尝试的过程和解决方案一样有用。@Raaj我会给?rbinom一些可读的提示!
    set.seed
    x同意@Raaj,
    set.seed(1);投掷=rbinom(20,1,0.5)
    谢谢。2)我想把我写的代码放在一个while循环中,并计算磁头。然而,当我必须想出一种计算连续磁头而不是简单磁头的方法时,我遇到了一个障碍。也许我应该先在MATLAB中编码,因为我熟悉它,可以在这里请求帮助进行转换这个问题问起来很公平。我再给你一个提示
    coin <- c('h','t')
    
    ComputeNbTosses <- function(targetTosses) {
      nbtosses = 0;
      while (nbtosses < targetTosses) {
        nbtosses = nbtosses + 1
      }
      return(nbtosses);
    } 
    
    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);