如何对二进制数据进行采样以获得行总和的正态分布
How to sample binary data to get a normal distribution of the sum of the rows
我想用 300 个样本创建 4 个二元变量(假设我可能想增加 4 个到 10 个变量)。但是当我按行求和时,我想得到求和列的正态分布。我们可以在 R 中做到吗?这是一个随机示例来演示。
m1 m2 m3 m4 sum
1 1 0 1 3
1 1 0 1 3
1 0 0 0 1
0 1 0 0 1
0 0 1 0 1
0 1 1 0 2
1 0 1 1 3
0 0 1 1 2
0 0 1 0 1
1 0 0 1 2
1 0 0 0 1
1 0 0 0 1
1 0 1 1 3
你不仅不能在 R 中做到这一点,我认为这是不可能的。
- 总和的分布将是一个离散变量,可能的结果为 {0,1,2,3,4}。这不可能非常接近正态分布,即 continuous/real-valued.
- 在最简单的情况下(各列独立且均值相等),结果将是二项式的。 “二项式分布的正态近似是足够的”的一个经验法则是
n*p*(1-p)>5
;在这种情况下,因为 n=4
,你能做的最好的事情(使用 p=0.5
)是 n*p*(1-p)=1
。增加到 10 将使您达到 n*p*(1-p)=2.5
的最佳情况(通常 n/4
...),但仍然不是很好。
- 可能可以放宽跨行的独立性和等概率假设,并且仍然得到二项式(您可以在 CrossValidated 上提问),但无论如何我不知道由于行之间的相关性和变化而导致的二项式偏差实际上会使正态逼近更好......例如,您可以设置样本以便
{P(0)=P(3)=0; P(2)=P(4)=0.5}
(对于二项式来说这是不可能的 PDF),但这于事无补。
这可能是您想要的:
data <- data.frame(m1=numeric(),m2=numeric(),m3=numeric(),m4=numeric())
data[1:300,1] <- sample(0:1,300,replace = TRUE)
data[1:300,2] <- sample(0:1,300,replace = TRUE)
data[1:300,3] <- sample(0:1,300,replace = TRUE)
data[1:300,4] <- sample(0:1,300,replace = TRUE)
data$sum <- data[,1] + data[,2] + data[,3] + data[,4]
plot(density(data$sum,bw = 2))
编辑
分配:
plot(table(data$sum))
我想用 300 个样本创建 4 个二元变量(假设我可能想增加 4 个到 10 个变量)。但是当我按行求和时,我想得到求和列的正态分布。我们可以在 R 中做到吗?这是一个随机示例来演示。
m1 m2 m3 m4 sum
1 1 0 1 3
1 1 0 1 3
1 0 0 0 1
0 1 0 0 1
0 0 1 0 1
0 1 1 0 2
1 0 1 1 3
0 0 1 1 2
0 0 1 0 1
1 0 0 1 2
1 0 0 0 1
1 0 0 0 1
1 0 1 1 3
你不仅不能在 R 中做到这一点,我认为这是不可能的。
- 总和的分布将是一个离散变量,可能的结果为 {0,1,2,3,4}。这不可能非常接近正态分布,即 continuous/real-valued.
- 在最简单的情况下(各列独立且均值相等),结果将是二项式的。 “二项式分布的正态近似是足够的”的一个经验法则是
n*p*(1-p)>5
;在这种情况下,因为n=4
,你能做的最好的事情(使用p=0.5
)是n*p*(1-p)=1
。增加到 10 将使您达到n*p*(1-p)=2.5
的最佳情况(通常n/4
...),但仍然不是很好。 - 可能可以放宽跨行的独立性和等概率假设,并且仍然得到二项式(您可以在 CrossValidated 上提问),但无论如何我不知道由于行之间的相关性和变化而导致的二项式偏差实际上会使正态逼近更好......例如,您可以设置样本以便
{P(0)=P(3)=0; P(2)=P(4)=0.5}
(对于二项式来说这是不可能的 PDF),但这于事无补。
这可能是您想要的:
data <- data.frame(m1=numeric(),m2=numeric(),m3=numeric(),m4=numeric())
data[1:300,1] <- sample(0:1,300,replace = TRUE)
data[1:300,2] <- sample(0:1,300,replace = TRUE)
data[1:300,3] <- sample(0:1,300,replace = TRUE)
data[1:300,4] <- sample(0:1,300,replace = TRUE)
data$sum <- data[,1] + data[,2] + data[,3] + data[,4]
plot(density(data$sum,bw = 2))
编辑
分配:
plot(table(data$sum))