R: 模拟相关的硬币投掷

huangapple go评论76阅读模式
英文:

R: Simulating Correlated Coin Flips

问题

我正在使用R编程语言。

我想要模拟硬币翻转,规则如下:

  • 如果是正面(heads),下一个翻转是正面的概率为0.6,是反面的概率为0.4。
  • 如果是反面(tails),下一个翻转是反面的概率为0.6,是正面的概率为0.4。

在R中,使用'markovchain'包,我可以这样做:

library(markovchain)

# 转移矩阵
P <- matrix(c(0.6, 0.4, 0.4, 0.6), byrow = TRUE, nrow = 2)
rownames(P) <- colnames(P) <- c("H", "T")

mc <- new("markovchain", states = c("H", "T"), transitionMatrix = P)

# 生成状态
states <- rmarkovchain(n = 100, object = mc, t0 = "H")

# 打印
table(states)

输出结果类似于:

> states
[1] "H" "T" "T" "H" "T" "T" "T" "H" "H"

我的问题: 有人能展示如何在基本的R中实现这个吗?

我认为我需要:

  • 创建一个大小为'n'的空列表
  • 以0.5的概率为n[1]分配值为H或T
  • 编写一个IFELSE语句,以n[i] = ifelse(n[i-1] == "H", sample(c("H", "T"), prob = c(0.6, 0.4), sample(c("H", "T"), prob = c(0.4, 0.6))为条件

但我不确定如何实现这一点。

有人可以展示给我如何做吗?

谢谢!

英文:

I am working with the R programming language.

I want to simulate coin flips such that:

  • If heads, then next head with p = 0.6 and tail = 0.4
  • if tails, the next tails with p = 0.6 and heads = 0.4

Using the 'markovchain' package in R, I did this as follows:

library(markovchain)

# transition matrix
P &lt;- matrix(c(0.6, 0.4, 0.4, 0.6), byrow = TRUE, nrow = 2)
rownames(P) &lt;- colnames(P) &lt;- c(&quot;H&quot;, &quot;T&quot;)


mc &lt;- new(&quot;markovchain&quot;, states = c(&quot;H&quot;, &quot;T&quot;), transitionMatrix = P)

# Generate states
states &lt;- rmarkovchain(n = 100, object = mc, t0 = &quot;H&quot;)

# Print 
table(states)

The output looks something like this:

&gt; states
  [1] &quot;H&quot; &quot;T&quot; &quot;T&quot; &quot;H&quot; &quot;T&quot; &quot;T&quot; &quot;T&quot; &quot;H&quot; &quot;H&quot; 

My Question: Can someone please show me how I can do this in base R?

I think I need to:

  • create an empty list of size "n"
  • assign n[1] = H or T with prob 0.5
  • write an IFELSE statement that says n[i] = ifelse(n[i-1] == &quot;H&quot;, sample(c(&quot;H&quot;, &quot;T&quot;), prob = c(0.6, 0.4), sample(c(&quot;H&quot;, &quot;T&quot;), prob = c(0.4, 0.6))

But I am not sure how to do this.

Can someone please show me how to do this?

Thanks!

答案1

得分: 1

这是代码的翻译部分:

这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的翻译部分:

```R
这是代码的

<details>
<summary>英文:</summary>

Here it is.

    Fair=function() sample( c(rep(&#39;H&#39;,5), rep(&#39;T&#39;,5)),1)
    A=function() sample( c(rep(&#39;H&#39;,6), rep(&#39;T&#39;,4)),1)
    B=function() sample( c(rep(&#39;H&#39;,4), rep(&#39;T&#39;,6)),1)
    x=Fair()
    for (i in 1:10) x=c(x,ifelse(tail(x,n=1)==&#39;H&#39;, A(), B()))
    print(x)



</details>



huangapple
  • 本文由 发表于 2023年2月19日 06:58:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/75496896.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定