从多元分布中抽样,包括 R 中的性别
Sampling from a multivariate distribution including gender in R
我正在尝试在 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),或者根本不考虑(性别==0)。在这方面,我将不胜感激。
谢谢
你应该做的是考虑你的数据由两个子总体组成,然后根据它们的比例从中提取数据。
所以,首先估计比例,pi_m
和pi_f (= 1 - pi_m)
,它们是SEX == 0和SEX == 1的比例。这应该是这样的
pi_m = sum(idata$SEX == 1)/ nrow(idata)
然后估计两个总体的参数,mu_f
、mu_m
、sigma_f
和 sigma_m
,它们是两个 SEX 总体的均值和协方差参数(现在没有 SEX 变量)。
先抽取一个随机数r <- runif(1)
,如果小于等于pi_m则从N(mu_m, sigma_s)
生成样本,否则从N(mu_f, sigma_f)
.[=22生成样本=]
您可以执行此步骤 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)
我正在尝试在 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),或者根本不考虑(性别==0)。在这方面,我将不胜感激。 谢谢
你应该做的是考虑你的数据由两个子总体组成,然后根据它们的比例从中提取数据。
所以,首先估计比例,pi_m
和pi_f (= 1 - pi_m)
,它们是SEX == 0和SEX == 1的比例。这应该是这样的
pi_m = sum(idata$SEX == 1)/ nrow(idata)
然后估计两个总体的参数,mu_f
、mu_m
、sigma_f
和 sigma_m
,它们是两个 SEX 总体的均值和协方差参数(现在没有 SEX 变量)。
先抽取一个随机数r <- runif(1)
,如果小于等于pi_m则从N(mu_m, sigma_s)
生成样本,否则从N(mu_f, sigma_f)
.[=22生成样本=]
您可以执行此步骤 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)