R studio-solve:如果我们得到概率为p的头,则伯努利随机变量X=1,如果我们得到几率为1−p的尾,则X=0



我需要帮助将其编码到R中。我不熟悉R的库函数。

给定-设X是伯努利随机变量,如果我们得到概率为p##的头,则X定义为1,如果我们获得概率为1−p的尾,则X=0。

##This is what I have so far. Not sure if I'm taking the right way in doing this
p = runif(1,0,1)
if (p<0.5){
X=1
} else {
X=0
}
print(p); print(X)

## Calculate E(2X)
E(2X) = E(X)*2 = 2p
## Calculate var(3X + 4)
## Calculate cov(3X, 5)
## Calculate cov(4X, 6X + 1000)

如果size=1,则有一个内置函数rbinom(n,size, prob)可用于返回长度为n的零和一向量。或者,如果你喜欢的话,你可以按照上面开始的逻辑来模仿它,做一些类似的事情

你的逻辑,使用均匀分布

flip_coin_n_times_with_head_prop_p <- function(n,p) {
uniforms = runif(n,0,1)
heads = sum(uniforms<=p)
return(heads)
}

使用rbinom()中内置的R

built_in_flip <- function(n,p) {
heads=sum(rbinom(n,1,p))
return(heads)
}

现在,你可以看到这些是等价的,通过以0.310000次的概率掷硬币:

> flip_coin_n_times_with_head_prop_p(10000,.3)
[1] 2967
> built_in_flip(10000,.3)
[1] 3058

当然,你可能想要翻转本身的顺序。。任何一个函数都可以修改,但为了便于说明,我使用了built_in_flip()

添加参数return_trials,默认为TRUE;默认情况下将返回翻转的顺序,但设置为FALSE以获取数字头

built_in_flip <- function(n,p, return_trials=T) {
trials = rbinom(n,1,p)
if(return_trials) return(trials)
else return(sum(trials))
}

现在,当我们调用这个函数时,我们得到翻转的序列

built_in_flips(n=10, p=0.5)
[1] 1 1 0 0 1 0 0 0 0 1

我们可以像这样给X分配一个长的翻转序列,然后取mean(X)或平均值(2*X(

X = built_in_flips(10000,0.3, return_trials=T)
# "Expectation of X"
mean(X)
[1] 0.3026
# "Expectation of 2X"
mean(2*X)
[1] 0.6052

相关内容

最新更新