Я пытаюсь запустить ols-симуляции в R, основанные на сценариях Carsey & Harden, с разными размерами выборок и уровнями корреляций (размер выборок: 26, 50, 200, 1000 и уровни корреляции .1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9). Затем я использую функцию покрытия (ту же, что указана в книге), чтобы вычислить вероятности покрытия, и она работает на выборках размером 26 и 50, но затем у 200, 1000 и более крупных она начинает возвращать только 0 или 0,001. Я проверил коэффициенты и в матрице par.est) Я вижу, что симуляция фактически не захватывает какое-либо значение внутри коэффициента интервала, но это странно, потому что 1000 - довольно хороший размер выборки и, по крайней мере, на некотором уровне корреляции, он должен вернуть некоторую вероятность больше, чем 0,001. Также это так странно, что я работаю в 26 и 50, но не больше этого. Что-нибудь может быть не так с моим кодом? Или это возможно, что R просто сходит с ума после выполнения некоторого количества симуляций?
Любой ответ будет очень признателен
это код для запуска моделей:
par.est<-matrix(NA,nrow=reps,ncol=4)
b1<-.4
b2<-.2
n<-26 #sample size
t1<-.1
C <- rnorm(n,0,1)
V1<-C*t1^0.5 + rnorm(n, 0, 1)*(1-t1)^0.5 #Correlated variables
V2<-C*t1^0.5 + rnorm(n, 0, 1)*(1-t1)^0.5
for(i in 1:reps){
Y<-V1*b1+V2*b2+rnorm(n,0,1) #The true DGP, with N(0,1) error
model1<-lm(Y~V1+V2)
vcv1<-vcov(model1)
par.est[i,1]<-model1$coef[1]
par.est[i,2]<-model1$coef[2]
par.est[i,3]<-sqrt(diag(vcv1)[1])
par.est[i,4]<-sqrt(diag(vcv1)[2])
}
the coverage function:
coverage <- function(b, se, true, level = .95, df = Inf){ # Estimate,
# standard error,
# true parameter,
# confidence level,
# and df
qtile <- level + (1 - level)/2 # Compute the proper quantile
lower.bound <- b - qt(qtile, df = df)*se # Lower bound
upper.bound <- b + qt(qtile, df = df)*se # Upper bound
# Is the true parameter in the confidence interval? (yes = 1)
true.in.ci <- ifelse(true >= lower.bound & true <= upper.bound, 1, 0)
cp <- mean(true.in.ci) # The coverage probability
mc.lower.bound <- cp - 1.96*sqrt((cp*(1 - cp))/length(b)) # Monte Carlo error
mc.upper.bound <- cp + 1.96*sqrt((cp*(1 - cp))/length(b))
return(list(coverage.probability = cp, # Return results
true.in.ci = true.in.ci,
ci = cbind(lower.bound, upper.bound),
mc.eb = c(mc.lower.bound, mc.upper.bound)))
}
then I see the coverage:
cp.beta1_c1<-coverage(par.est[,1],par.est[,3],b1,df=n-model1$rank)
cp.beta2_c1<-coverage(par.est[,2],par.est[,4],b2,df=n-model1$rank)
cp.beta1_c1$coverage.probability
cp.beta2_c1$coverage.probability