从多变量分布中抽样,包括R中的性别

时间:2017-10-23 03:02:36

标签: r simulation covariance

我试图从R中的一个小人群中模拟更广泛的人口,如下所示:

idata <- subset(data, select=c(WT, AGE, HT, BFP, SEX) )
M= cor(idata)
mu <- sapply(idata, mean)
sd <- sapply(idata, stdev)
sigma=cor2cov(M, sd)
simulation <- as.data.frame(mvrnorm(1000, mu, sigma))

但问题是,对于SEX,代码将考虑连续分布,而它必须是二元的,并且必须充分考虑性别的影响(SEX == 1),或者根本不考虑(SEX = = 0)。我很欣赏这方面的任何帮助。 感谢

1 个答案:

答案 0 :(得分:1)

您应该做的是考虑您的数据包含两个子群体,然后根据它们的比例从中抽取数据。

所以,首先估算比例,pi_mpi_f (= 1 - pi_m),它们是SEX == 0和SEX == 1的比例。这应该是类似的 pi_m = sum(idata$SEX == 1)/ nrow(idata)

然后估算两个种群的参数mu_fmu_msigma_fsigma_m,它们是两个性别群体的均值和协方差参数(现在没有SEX变量)。

首先绘制一个随机数r <- runif(1),如果它小于等于pi_m,则从N(mu_m, sigma_s)生成来自N(mu_f, sigma_f)的样本。

您可以执行此步骤1000次以从您的发行版中获取1000个样本。

当然,您可以通过首先从runif生成1000个样本来对此进行矢量化。例如

n_m <- sum(runif(1000) <= pi_m)
n_f <- 1000 - n_m

X_m <- rmvnorm(n_m, mu_m, sigma_m)
X_f <- rmvnorm(n_f, mu_f, sigma_f)

X <- rbind(X_m, X_f)