R:模拟相关的硬币翻转

66bbxpm5  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(169)

我正在使用R编程语言。
我想模拟掷硬币,这样:

  • 如果头部,则下一个头部,p = 0.6,尾部= 0.4
  • 如果为尾部,则为p = 0.6和头部= 0.4的下一个尾部

使用R中的'markovchain'包,我是这样做的:

library(markovchain)

# transition matrix
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)

# Generate states
states <- rmarkovchain(n = 100, object = mc, t0 = "H")

# Print 
table(states)

输出如下所示:

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

**我的问题:**有人能告诉我如何在R进制下做这个吗?

我想我需要:

  • 创建大小为“n”的空列表
  • 指定n[1] = H或T,概率为0.5
  • 编写一条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))

但我不确定该怎么做。
有人能教我怎么做吗?
谢谢!

f0brbegy

f0brbegy1#

在这里。

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

相关问题