每次变量增加时,使用for循环创建一个新样本



我需要做以下操作:在所有其他变量保持不变的条件下,将变量pi1从-1增加0.0001步到0。作为第二步,我需要为每个不同的pi1值选择1000个样本。最后,我需要测量两个回归对实际值的偏差。经过彻底的调查,我真的不明白为什么我的两个循环都不起作用。

这是一个如何运作的想法

index <- seq(1, 1000)

beta_OLS <- NULL
beta_IV <- NULL
for(i in seq(from = -1, to = 0, by = 0.001)) {
for(k in index) {
n <- 2000
pi1 <- i
b0 <- 0
b1 <- 0
b2 <- -1/1000
b3 <- 1/5

z <- runif(n, 0, 25)
ov <- rnorm(n, 0, 1)

d <- -1/2 + pi1 * z + 1/2 * ov + rnorm(n, 0, 1) > 0
y <- b0 + b1 * d + b2 * z + b3 * ov + rnorm(n, 0, 1/10)

#OLS Regression
model12 = lm(y ~ d, data = data)
beta_OLS[k] = model12$coefficients[2]

#IV Regression
model12_1 = ivreg(y ~ d | z, data=data)
beta_IV[k] = model12_1$coefficients[2]
}
}
real_value <- - 1/1000
average_OLS <- mean(beta_OLS)
average_IV <- mean(beta_IV)
biased_OLS <- average_OLS - real_value 
biased_IV <- average_IV - real_value 
biased_OLS 
biased_IV

在这里做了一些修改,它就运行了。不确定结果是否正确。

由于两个循环的计数相同,因此消除了其中一个循环。

还将每次运行的d和y的结果归因于一个名为data的数据帧(您将其用作回归的源(。

index = seq(1,1000)
beta_OLS = NULL
beta_IV = NULL
i = -1
for(k in index){
n <- 2000
pi1 <- i
b0 <- 0
b1 <- 0
b2 <- -1/1000
b3 <- 1/5

z <- runif(n,0,25)
ov <- rnorm(n,0,1)

d <- -1/2 + pi1 * z + 1/2 * ov + rnorm(n,0,1) > 0
y <- b0 + b1 * d + b2 * z + b3 * ov + rnorm(n,0,1/10)

data = as.data.frame(cbind(y,d))

#OLS Regression
model12 = lm(y ~ d, data = data)
beta_OLS[k] = model12$coefficients[2]

#IV Regression
model12_1 = ivreg::ivreg(y ~ d | z, data=data)
beta_IV[k] = model12_1$coefficients[2]

pi1 <- i + 0.001
}

real_value = - 1/1000
average_OLS = mean(beta_OLS)
average_IV = mean(beta_IV)
biased_OLS = average_OLS - real_value 
biased_IV = average_IV - real_value 
biased_OLS 
biased_IV

最新更新