模拟测量误差时使用ifelse

时间:2018-11-28 18:22:20

标签: r simulation

我正在解决一个问题,我想拥有一个二进制变量Z,该变量只是A的某个级别的A的分类错误或度量不正确的代理。

我在这里模拟A和Y:

heapMaxSize

然后生成Z,它是A的错误分类版本(在下面的示例中,Z捕获了80%的真实正值)

set.seed(76)
n=10000
#generate correctly classified treatment A
a <- (rbinom(n, 1, 0.5))    
#generate Y conditional on A
pry <- exp(-3 + 0.7*a )/(1+ exp(-1 + 0.7*a))
y <- 1*(runif(n)<=pry)

我认为仅在Y为零的情况下在此处使用ifelse才会执行A> Z错误分类,但是查看“ check”将显示以下输出:

#misclassify treatment A into Z
#such that treatment is only misclassified if Y=0
ifelse(y==1, z<-a,z<-(a==1)*(runif(n)<.80))
check<-xtabs(~a+z+y)
check

表示Z对于Y = 1和Y = 0均被错误分类。

关于如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

问题是ifelse()内部的赋值ifelse()函数是if的向量化版本,它会一次评估所有参数。您不能在参数内进行条件分配。将向量化运算的结果分配给新变量的更常见做法。最好写成

z <- ifelse(y==1, a, (a==1)*(runif(n)<.80))