我正在解决一个问题,我想拥有一个二进制变量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均被错误分类。
关于如何解决此问题的任何想法?
答案 0 :(得分:0)
问题是ifelse()
内部的赋值ifelse()
函数是if
的向量化版本,它会一次评估所有参数。您不能在参数内进行条件分配。将向量化运算的结果分配给新变量的更常见做法。最好写成
z <- ifelse(y==1, a, (a==1)*(runif(n)<.80))