R: 模拟相关的硬币投掷

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

R: Simulating Correlated Coin Flips

问题

我正在使用R编程语言。

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

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

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

  1. library(markovchain)
  2. # 转移矩阵
  3. P <- matrix(c(0.6, 0.4, 0.4, 0.6), byrow = TRUE, nrow = 2)
  4. rownames(P) <- colnames(P) <- c("H", "T")
  5. mc <- new("markovchain", states = c("H", "T"), transitionMatrix = P)
  6. # 生成状态
  7. states <- rmarkovchain(n = 100, object = mc, t0 = "H")
  8. # 打印
  9. table(states)

输出结果类似于:

  1. > states
  2. [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:

  1. library(markovchain)
  2. # transition matrix
  3. P &lt;- matrix(c(0.6, 0.4, 0.4, 0.6), byrow = TRUE, nrow = 2)
  4. rownames(P) &lt;- colnames(P) &lt;- c(&quot;H&quot;, &quot;T&quot;)
  5. mc &lt;- new(&quot;markovchain&quot;, states = c(&quot;H&quot;, &quot;T&quot;), transitionMatrix = P)
  6. # Generate states
  7. states &lt;- rmarkovchain(n = 100, object = mc, t0 = &quot;H&quot;)
  8. # Print
  9. table(states)

The output looks something like this:

  1. &gt; states
  2. [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

这是代码的翻译部分:

  1. 这是代码的翻译部分:
  2. ```R
  3. 这是代码的翻译部分:
  4. ```R
  5. 这是代码的翻译部分:
  6. ```R
  7. 这是代码的翻译部分:
  8. ```R
  9. 这是代码的翻译部分:
  10. ```R
  11. 这是代码的翻译部分:
  12. ```R
  13. 这是代码的翻译部分:
  14. ```R
  15. 这是代码的翻译部分:
  16. ```R
  17. 这是代码的翻译部分:
  18. ```R
  19. 这是代码的翻译部分:
  20. ```R
  21. 这是代码的翻译部分:
  22. ```R
  23. 这是代码的翻译部分:
  24. ```R
  25. 这是代码的翻译部分:
  26. ```R
  27. 这是代码的翻译部分:
  28. ```R
  29. 这是代码的翻译部分:
  30. ```R
  31. 这是代码的翻译部分:
  32. ```R
  33. 这是代码的翻译部分:
  34. ```R
  35. 这是代码的翻译部分:
  36. ```R
  37. 这是代码的翻译部分:
  38. ```R
  39. 这是代码的翻译部分:
  40. ```R
  41. 这是代码的翻译部分:
  42. ```R
  43. 这是代码的翻译部分:
  44. ```R
  45. 这是代码的翻译部分:
  46. ```R
  47. 这是代码的翻译部分:
  48. ```R
  49. 这是代码的翻译部分:
  50. ```R
  51. 这是代码的翻译部分:
  52. ```R
  53. 这是代码的翻译部分:
  54. ```R
  55. 这是代码的翻译部分:
  56. ```R
  57. 这是代码的翻译部分:
  58. ```R
  59. 这是代码的翻译部分:
  60. ```R
  61. 这是代码的翻译部分:
  62. ```R
  63. 这是代码的翻译部分:
  64. ```R
  65. 这是代码的翻译部分:
  66. ```R
  67. 这是代码的翻译部分:
  68. ```R
  69. 这是代码的翻译部分:
  70. ```R
  71. 这是代码的翻译部分:
  72. ```R
  73. 这是代码的翻译部分:
  74. ```R
  75. 这是代码的翻译部分:
  76. ```R
  77. 这是代码的翻译部分:
  78. ```R
  79. 这是代码的翻译部分:
  80. ```R
  81. 这是代码的翻译部分:
  82. ```R
  83. 这是代码的翻译部分:
  84. ```R
  85. 这是代码的翻译部分:
  86. ```R
  87. 这是代码的翻译部分:
  88. ```R
  89. 这是代码的翻译部分:
  90. ```R
  91. 这是代码的翻译部分:
  92. ```R
  93. 这是代码的翻译部分:
  94. ```R
  95. 这是代码的翻译部分:
  96. ```R
  97. 这是代码的翻译部分:
  98. ```R
  99. 这是代码的翻译部分:
  100. ```R
  101. 这是代码的翻译部分:
  102. ```R
  103. 这是代码的翻译部分:
  104. ```R
  105. 这是代码的翻译部分:
  106. ```R
  107. 这是代码的翻译部分:
  108. ```R
  109. 这是代码的翻译部分:
  110. ```R
  111. 这是代码的翻译部分:
  112. ```R
  113. 这是代码的翻译部分:
  114. ```R
  115. 这是代码的翻译部分:
  116. ```R
  117. 这是代码的翻译部分:
  118. ```R
  119. 这是代码的翻译部分:
  120. ```R
  121. 这是代码的翻译部分:
  122. ```R
  123. 这是代码的翻译部分:
  124. ```R
  125. 这是代码的翻译部分:
  126. ```R
  127. 这是代码的翻译部分:
  128. ```R
  129. 这是代码的翻译部分:
  130. ```R
  131. 这是代码的翻译部分:
  132. ```R
  133. 这是代码的翻译部分:
  134. ```R
  135. 这是代码的翻译部分:
  136. ```R
  137. 这是代码的翻译部分:
  138. ```R
  139. 这是代码的翻译部分:
  140. ```R
  141. 这是代码的翻译部分:
  142. ```R
  143. 这是代码的翻译部分:
  144. ```R
  145. 这是代码的翻译部分:
  146. ```R
  147. 这是代码的翻译部分:
  148. ```R
  149. 这是代码的翻译部分:
  150. ```R
  151. 这是代码的翻译部分:
  152. ```R
  153. 这是代码的翻译部分:
  154. ```R
  155. 这是代码的翻译部分:
  156. ```R
  157. 这是代码的翻译部分:
  158. ```R
  159. 这是代码的翻译部分:
  160. ```R
  161. 这是代码的翻译部分:
  162. ```R
  163. 这是代码的翻译部分:
  164. ```R
  165. 这是代码的翻译部分:
  166. ```R
  167. 这是代码的翻译部分:
  168. ```R
  169. 这是代码的翻译部分:
  170. ```R
  171. 这是代码的翻译部分:
  172. ```R
  173. 这是代码的翻译部分:
  174. ```R
  175. 这是代码的翻译部分:
  176. ```R
  177. 这是代码的翻译部分:
  178. ```R
  179. 这是代码的翻译部分:
  180. ```R
  181. 这是代码的翻译部分:
  182. ```R
  183. 这是代码的翻译部分:
  184. ```R
  185. 这是代码的翻译部分:
  186. ```R
  187. 这是代码的翻译部分:
  188. ```R
  189. 这是代码的翻译部分:
  190. ```R
  191. 这是代码的翻译部分:
  192. ```R
  193. 这是代码的翻译部分:
  194. ```R
  195. 这是代码的翻译部分:
  196. ```R
  197. 这是代码的翻译部分:
  198. ```R
  199. 这是代码的翻译部分:
  200. ```R
  201. 这是代码的翻译部分:
  202. ```R
  203. 这是代码的
  204. <details>
  205. <summary>英文:</summary>
  206. Here it is.
  207. Fair=function() sample( c(rep(&#39;H&#39;,5), rep(&#39;T&#39;,5)),1)
  208. A=function() sample( c(rep(&#39;H&#39;,6), rep(&#39;T&#39;,4)),1)
  209. B=function() sample( c(rep(&#39;H&#39;,4), rep(&#39;T&#39;,6)),1)
  210. x=Fair()
  211. for (i in 1:10) x=c(x,ifelse(tail(x,n=1)==&#39;H&#39;, A(), B()))
  212. print(x)
  213. </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:

确定