如何解决在Y1,Y2上模拟数据,其中Y2缺少值
考虑两个变量(Y 1 ,Y 2 )问题,每个变量的定义如下:
- Y 1 = 1 + Z 1 ,并且完全观察到Y 1
- Y 2 = 5 + 2 *(Z 1 )+ Z 2 ,而Y 2 为如果2 *(Y 1 − 1)+ Z 3
- Z 1 ,Z 2 和Z 3 遵循独立的标准正态分布。
我们将如何在(Y 1 ,Y 2 )上模拟大小为500的(完整)数据集?这是我在下面写的:
n <- 500
y <- rnorm(n)
我们如何模拟相应的观测数据集(通过施加缺失 在Y 2 上)?我不确定该问题在哪里。
n <- 500
z1 <- rnorm(n)
z2 <- rnorm(n)
z3 <- rnorm(n)
y1 <- 1 + z1
y2 <- 5 + 2*z1 + z2
显示完整数据(最初模拟的)和观察到的(施加缺失后)数据的Y 2 的边际分布。
解决方法
您可能希望在数据模拟中包括一个误差项,因此应再次使用rnorm(n)
将等式为零的另一个向量包括在方程中。
seed <- sample(1:1e3,1)
set.seed(635) ## for sake of reproducibility
n <- 500
z1 <- rnorm(n)
z2 <- rnorm(n)
要获取缺失,您可以采样一定百分比的向量并将其设置为NA
。
y2 <- 5 + 2*z1 + z2 + rnorm(n) ## add error term independent of the `z`s
pct.mis <- .1 ## percentage missings
y2[sample(length(y2),length(y2)*pct.mis)] <- NA
## check 1: resulting missings
prop.table(table(is.na(y2)))
# FALSE TRUE
# 0.9 0.1
summary(y2)
# Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
# -2.627 3.372 5.123 4.995 6.643 13.653 50
## check 2: rounded coefficients resemble equation
fit <- lm(y2 ~ z1 + z2)
round(fit$coe)
# (Intercept) z1 z2
# 5 2 1
## check 3: number of fitted values equals number of non-missing obs.
length(fit$fitted.values) / length(y2)
# [1] 0.9
,
除了 @ jay.sf 的出色解释之外,另一种显示分布的方法是在新变量中构建缺失的数据机制,并比较y2
和{{1 }}:
y2_missing
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。