首页 > 解决方案 > 抛硬币概率(已解决)

问题描述

我想知道我应该在这里做什么(请参阅图片)。我已经定义了两个向量,分别是k=c(0,1)v=c(runif(2,0.3,0.7))wherealpha=v[1]beta=v[2]。之后,我使用了 if 语句,if(Xn==k[1]){...}但这就是我坚持的地方。根据这个问题,我必须同时Xn+1=k[1]用概率(alpha)分配Xn+1=k[2]概率(1-alpha)if(Xn==k[2]){...}然后Xn+1=k[1]有概率(beta)并且Xn+1=k[2]将有概率(1-beta)

所以我的问题是如何将值分配给 的Xn+101概率[(alpha), (1-alpha)][(beta),(1-beta)]。分配后,您如何使用循环模拟随机变量的 500 个观察值?这X1类似于抛硬币实验,但正面和反面的概率由 [alpha,beta] 决定= runif(2,0.3,0.7)`。X500for

标签: rprobability-distributionuniform-distribution

解决方案


这是一个基本的 R 解决方案。

toss <- function(n = 500L){
  a <- runif(2, min = 0.3, max = 0.7)
  alpha <- a[1]
  beta <- a[2]
  x <- integer(n)
  x[1] <- rbinom(1, size = 1, prob = alpha)
  for(i in seq_len(n - 1)){
    if(x[i] == 0)
      x[i + 1L] <- rbinom(1, size = 1, prob = 1 - alpha)
    else
      x[i + 1L] <- rbinom(1, size = 1, prob = 1 - beta)
  }
  list(x = x, alpha = alpha, beta = beta)
}

set.seed(2021)
X <- toss()
table(X$x)
#
#  0   1 
#277 223 
mean(X$x)
#[1] 0.446
X$alpha
#[1] 0.4805069
X$beta
#[1] 0.6135119

1000 次运行的直方图。

要重复运行该函数,请使用replicate.

Y <- replicate(1000, mean(toss()$x))
hist(Y, xlab = "Proportion of successes")

在此处输入图像描述


推荐阅读