从分位数回归中对自助估计进行Anova

时间:2015-08-17 15:38:06

标签: r regression anova statistics-bootstrap quantreg

因此,我使用R中的quantreg包来进行分位数回归分析,以测试我的预测因子的影响如何随着我的结果分布而变化。

FML <- as.formula(outcome ~ VAR + c1 + c2 + c3)
quantiles <- c(0.25, 0.5, 0.75)

q.Result <- list()
for (i in quantiles){
    i.no <- which(quantiles==i)
    q.Result[[i.no]] <- rq(FML, tau=i, data, method="fn", na.action=na.omit)
}

然后我打电话给anova.rq,对所有模型进行Wald测试,并输出每个协变量的p值,告诉我每个协变量的影响是否在我的结果分布上有显着差异。

anova.Result <- anova(q.Result[[1]], q.Result[[2]], q.Result[[3]], joint=FALSE)

这很好用。但是,对于我的特定数据(以及一般情况下?),引导我的估计值和错误是更可取的。我稍微修改了上面的代码。

q.Result <- rqs(FML, tau=quantiles, data, method="fn", na.action=na.omit)
q.Summary <- summary(Q.mod, se="boot", R=10000, bsmethod="mcmb",
                            covariance=TRUE)

这里我被卡住了。 quantreg目前无法对增强估计值进行anova(Wald)测试。 quantreg包上的信息文件明确指出&an 34应该在anova.rq中使用的方法的扩展&#34;关于增强法。

查看anova.rq方法的详细信息。我可以看到它在引导时需要分量模型中不存在2个组件。

1)Hinv(反向Hessian矩阵)。包信息文件明确指出&#34; 请注意,对于se = "boot",无法将估计的协方差矩阵拆分为其三明治组成部分。&#34;

2)J根据信息文件是&#34; <{1}}和cov=TRUE返回的非标定的渐变矩阵外积。 Huber三明治是se != "iid" cov = tau。对于(1-tau) Hinv %*% J %*% Hinv组件,Hinv时没有J组件。 (请注意,要制作Huber三明治,您需要自己添加se == "boot"蛋黄酱。)&#34;

我可以从引导估算中计算或估算tau (1-tau)Hinv吗?如果不是,最好的方法是什么?

对此的任何帮助都非常感谢。这是我在这里发表问题的第一个时间,尽管我过去对其他人的问题的回答大大受益。

2 个答案:

答案 0 :(得分:0)

问题2:您可以使用R =进行重新采样。例如:

anova(object, ..., test = "Wald", joint = TRUE, score =
"tau", se = "nid", R = 10000, trim = NULL)

其中R是测试的anowar形式的重采样复制数,用于估计测试统计的参考分布。

如果您每篇文章只包含1个问题,那么您可能会对问题得到更好的回答。

答案 1 :(得分:0)

咨询了一位同事,他确认HinvJ不太可能“倒退”。根据自助估算计算出来。然而,我们解决了使用Wald测试可以比较不同taus的估计值如下。

来自

生成的对象rqs
q.Summary <- summary(Q.mod, se="boot", R=10000, bsmethod="mcmb", covariance=TRUE)
在这种情况下,您为感兴趣的变量VAR提取引导的Beta值,这是每个tau FML中的第一个协变量

boot.Bs <- sapply(q.Summary, function (x) x[["B"]][,2])
B0 <- coef(summary(lm(FML, data)))[2,1] # Extract liner estimate data linear estimate

然后计算wald统计量并获得具有自由度的分位数的pvalue

Wald <- sum(apply(boot.Bs, 2, function (x) ((mean(x)-B0)^2)/var(x)))
Pvalue <- pchisq(Wald, ncol(boot.Bs), lower=FALSE)

您还想验证自举Betas是否正常分发,如果您运行了很多taus,那么检查所有这些QQ情节可能很麻烦,所以只需按行加总

qqnorm(apply(boot.Bs, 1, sum))
qqline(apply(boot.Bs, 1, sum), col = 2)

这似乎有效,如果有人能想到我的解决方案有任何问题,请分享