我试图找到一种方法来生成一些二项分布相关的随机数。
我知道如何与正态分布(使用mvrnorm)做到这一点,但我没有找到适用于那些二项式的功能。
我试图找到一种方法来生成一些二项分布相关的随机数。
我知道如何与正态分布(使用mvrnorm)做到这一点,但我没有找到适用于那些二项式的功能。
您可以使用生成的相关制服copula
包,然后使用qbinom
功能转换那些二项式变量。 下面是一个简单的例子:
library(copula)
tmp <- normalCopula( 0.75, dim=2 )
x <- rcopula(tmp, 1000)
x2 <- cbind( qbinom(x[,1], 10, 0.5), qbinom(x[,2], 15, 0.7) )
现在x2
是与表示是相关的2个二项式变量2列的矩阵。
具有n个试验和在每次试验成功的概率P A二项式变量可以被视为正伯努利试验成功的每个还具有概率p的总和。
类似地,可以通过累加个变量具有期望的相关性R对伯努利构建体对相关二项式个变量的。
require(bindata)
# Parameters of joint distribution
size <- 20
p1 <- 0.5
p2 <- 0.3
rho<- 0.2
# Create one pair of correlated binomial values
trials <- rmvbin(size, c(p1,p2), bincorr=(1-rho)*diag(2)+rho)
colSums(trials)
# A function to create n correlated pairs
rmvBinomial <- function(n, size, p1, p2, rho) {
X <- replicate(n, {
colSums(rmvbin(size, c(p1,p2), bincorr=(1-rho)*diag(2)+rho))
})
t(X)
}
# Try it out, creating 1000 pairs
X <- rmvBinomial(1000, size=size, p1=p1, p2=p2, rho=rho)
# cor(X[,1], X[,2])
# [1] 0.1935928 # (In ~8 trials, sample correlations ranged between 0.15 & 0.25)
需要注意的是有共享所需的相关系数许多不同的联合分布是很重要的。 在模拟方法rmvBinomial()
产生的其中之一,但它是否是一个合适的,将取决于正在生成您数据的过程。
正如指出的这个R-帮忙解答一个类似的问题(然后继续解释更详细的想法):
而二元正态(给定的均值和方差)唯一地由相关系数定义,这不是一个二元二项式的情况下