我在R中使用rdd软件包:
https://cran.r-project.org/web/packages/rdd/
我正在尝试运行McCrary测试,令我惊讶的是,该功能无法计算测试统计信息。我打开了函数DCdensity的主体,并一点一点地应用了代码以发现错误。问题出现在这里
dist <- cmp - cutpoint
w <- 1 - abs(dist/bw)
w <- ifelse(w > 0, w * (cmp < cutpoint), 0)
w <- (w/sum(w)) * jp
fhatl <- predict(lm(cval ~ dist, weights = w), newdata = data.frame(dist = 0))[[1]]
w <- 1 - abs(dist/bw)
w <- ifelse(w > 0, w * (cmp >= cutpoint), 0)
w <- (w/sum(w)) * jp
fhatr <- predict(lm(cval ~ dist, weights = w), newdata = data.frame(dist = 0))[[1]]
thetahat <- log(fhatr) - log(fhatl)
sethetahat <- sqrt((1/(rn * bw)) * (24/5) * ((1/fhatr) +
(1/fhatl)))
z <- thetahat/sethetahat
p <- 2 * pnorm(abs(z), lower.tail = FALSE)
基本上,fhatl是接近零的负值,并且未定义log函数。从那里开始,什么都无法计算。
问题似乎是该函数选择的带宽为0.22,这是非常广泛的。当带宽低于0.14(含)时,我们在阈值的左侧获得对运行变量的密度估计的正估计。在所有情况下,p值都非常高,因此结果对选择低于0.14的带宽不敏感。
但是,我对这种情况感到有些疑惑,我仅仅因为...而选择其他带宽让我感到不舒服。
我还想知道这是否表明某些退化的数据生成处理会带来一些问题,而我在这里找不到。
您将如何处理这种情况?