【问题标题】:Simulate normal distributed data from genetic data in R从 R 中的遗传数据模拟正态分布数据
【发布时间】:2025-11-24 14:05:01
【问题描述】:

我需要基于两个随机变量来模拟数据。每个随机变量是一组 0、1​​ 和 2(遗传数据)。以下是 10 次观察的变量示例:

随机变量。 1:

v_1 = cbind(rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)))

随机变量。 2:

v_2 = cbind(rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)), rep(rbinom(10,2,0.4)),  rep(rbinom(10,2,0.4)))

这些变量是正态分布的均值 = 0 和方差 = 1(或我可以选择的其他值)。另外,我还需要加上误差项,正态分布mean=0,variance=1。

有人可以帮忙吗?

【问题讨论】:

  • 一个变量是5个随机抽取的序列0,1,2?
  • 是的。虽然这是一种简化,但在我的真实数据中大约有 1000 个。
  • 我有点困惑,二项分布的平均值是 pn,在你的代码中是 0.8 (0.4*2) 和方差 pn(1 -p)= 0.8*0.2=0.16。 0、1、2 的期望分布是什么?我在示例中随机抽样
  • 您好,非常感谢您的回答。我仍在尝试定义问题。可能是我对我的问题不够清楚,所以我在 stats.stack.exchange stats.stackexchange.com/questions/463952/… 中发布了一个新问题,可能有助于更好地定义它。

标签: r simulation normal-distribution


【解决方案1】:

我将序列放入向量中,在 data.frame 中。您可以根据需要更改此设置并将其放在不同的列中。

n <- 100
t <- 5

library(data.table)
d <- data.table( 
  v1 = lapply(1:n, function(x) sample(0:2, t, replace = T) ),
  v2 = lapply(1:n, function(x) sample(0:2, t, replace = T) ),
  v1e = rnorm(n),
  v2e = rnorm(n)
)

head(d)

          v1        v2        v1e        v2e
1: 1,2,2,0,0 2,0,0,0,2 -0.3962995  0.9091728
2: 0,2,0,0,2 1,2,2,2,2 -2.5788875 -0.1007541
3: 0,1,1,0,0 2,0,1,1,0  0.7208587 -0.3362134
4: 1,0,2,0,2 0,1,1,0,2  0.6068573 -2.1755171
5: 1,0,0,0,0 2,2,2,1,2  0.2505764 -0.4038029
6: 2,2,1,1,1 2,0,0,1,0  0.1002509  0.9895424

或者,您可以将错误添加到0,1,2的序列中:

d <- data.table( 
  v1 = lapply(1:n, function(x) c(sample(0:2, t, replace = T), rnorm(1) )),
  v2 = lapply(1:n, function(x) c(sample(0:2, t, replace = T), rnorm(1) ))
)

                                                                  v1
1:  2.0000000, 1.0000000, 1.0000000, 1.0000000, 0.0000000,-0.2246831
2: 1.00000000,2.00000000,2.00000000,0.00000000,2.00000000,0.08186215
3:             1.000000,1.000000,2.000000,0.000000,2.000000,1.409102
4:        1.000000, 1.000000, 2.000000, 0.000000, 2.000000,-0.706325
5:  2.0000000, 2.0000000, 0.0000000, 0.0000000, 0.0000000,-0.7605603
6:        1.000000, 0.000000, 0.000000, 2.000000, 0.000000,-1.805504
                                                                  v2
1:  1.0000000, 0.0000000, 2.0000000, 0.0000000, 0.0000000,-0.8190068
2:             0.000000,2.000000,2.000000,1.000000,1.000000,1.127785
3:                   1.00000,2.00000,0.00000,0.00000,0.00000,1.46689
4:        1.000000, 2.000000, 1.000000, 0.000000, 0.000000,-0.963522
5:             1.000000,1.000000,2.000000,0.000000,0.000000,1.122421
6:       2.0000000,0.0000000,0.0000000,1.0000000,2.0000000,0.8270646

【讨论】: