蒙特卡罗模拟在R
我试图用rho = 0.7模拟来自AR(1)模型的数据(Y)。 然后,我将使用这些数据在截距上运行Y的回归(通过这样做参数估计变成Y的均值),然后测试系数的零假设小于或等于零(可选方式大于0 )使用强大的标准错误。 我想运用这个假设的Monte Carlo模拟,使用2000次重复计算不同的滞后值。 目的是为了显示Newey West估计量的滞后变化的有限样本性能。 所以这就是我的开始
A<-array(0, dim=c(2000,1))
for(i in 1:2000){
y_new<-arima.sim(model=list(ar=0.7), n=50, mean=0,sd=1)
reg<-lm(y_new~1)
ad<-coeftest(reg, alternative="greater", vcov=NeweyWest(reg, lag=1, prewhite=FALSE))
A[i]<-ad[,3]
}
我的问题:上面的代码是否正在进行这种模拟? 如果是这样,我怎么能得到一个代码来重复这个过程中的不同滞后值在HAC测试。 我想每次增加滞后1次运行测试,因此,我将以滞后1,2,3,4 ......,50的次数执行50次,每次将2000次模拟测试统计存储在用不同的名字矢量。 针对每种情况计算检验统计量的拒收概率(sig。level = 0,05,使用临界值1.645),并针对各种滞后值绘制它们(拒绝概率)。 请帮忙
因为你没有提到模拟的可能目的,很难判断它是否正确。
通过计算每个模拟样本的50个测试统计量,而不是每个滞后(即模拟数量为2000 * 50)重复模拟2000次,可以节省大量时间。
更好的模拟格式是
library(AER)
library(dplyr)
lags <- 1:50
nreps <- 2000
sim <- function (){
ynew <- arima.sim(model = list(ar=0.7), n=50, mean=0, sd=1)
reg <- lm(ynew ~ 1 )
s <- rep(NA, 50)
for(i in lags){
ad <- coeftest(reg, alternative="greater", vcov=NeweyWest(reg, lag = i, prewhite=FALSE))
s[i] <- ad[ ,4]
}
s
}
以下代码将模拟结果存储在data.frame
result <- lapply(1:nreps, function(i)data.frame(simulation = i, lag = lags, pvalues = sim())) %>%
rbind_all
从你的模糊描述,我推断你想要的东西看起来像
library(ggplot2)
result %>%
group_by(lag) %>%
summarize(rejectfreq = mean(pvalues > 0.05)) %>%
ggplot(., aes(lag, rejectfreq)) + geom_line()+
coord_cartesian(ylim = c(0,1)) +
scale_y_continuous(breaks=seq(0, 1, by=0.1))
虽然这个数字只用了100次模拟,但显然当扰动项是iid时,Newey-West中滞后的选择并不重要
链接地址: http://www.djcxy.com/p/57755.html