R - 如何模拟随机变量?

时间:2018-01-30 08:51:11

标签: r simulation

我可以定期分发,比如模拟一个公平的模具。

但如果我想模拟以下内容怎么办?

当n为奇数时,

X_n = 2(概率为0.6)或-1(概率为0.4)。

当n为偶数时,

X_n = -2(概率为0.6)或1(概率为0.4)。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

试试这个:

sample(c(2,-1), size=100, replace=TRUE, prob=c(0.6,0.4))
sample(c(-2,1), size=100, replace=TRUE, prob=c(0.6,0.4))> n<-20

前20个数字的一​​个例子:

n<-20
odd_n<-seq(1,n,by=2)
even_n<-seq(2,n,by=2)

odd<-sample(c(2,-1), size=n/2, replace=TRUE, prob=c(0.6,0.4))
even<-sample(c(-2,1), size=n/2, replace=TRUE, prob=c(0.6,0.4))

db<-data.frame(value=c(odd,even),number=c(odd_n,even_n))

row.names(db) <- NULL
db
   value number
1     -1      1
2     -2      2
3      2      3
4     -2      4
5      2      5
6     -2      6
7     -1      7
8      1      8
9      2      9
10    -2     10
11     2     11
12     1     12
13     2     13
14    -2     14
15    -1     15
16    -2     16
17    -1     17
18     1     18
19     2     19
20     1     20

答案 1 :(得分:2)

您可以使用runif生成样本并将其阈值设置为0.4,以确定它应该是-1/1还是2 / -2,具体取决于n是奇数还是偶数。

sim <- function(n) {
    x <- runif(n)
    if (n %% 2 == 0) {
        ret <- ifelse(x < 0.4, 1, -2)
    } else {
        ret <- ifelse(x < 0.4, -1, 2)
    }
    return(ret)
}

验证分发

hist(sim(10000))
hist(sim(10001))