(R,quantreg):假设测试大范围的分位数

时间:2012-08-25 07:25:02

标签: r quantreg

我有一个分位数回归模型,有1个回归量和1个回归量。我想假设检验回归量在每个分位数上是相等的。我想到的一种方法是在{0.01,0.02,......,0.99}上测试所有tau。但是,我必须写:

anova(model1,model2,model3,.......,model99),其中每个模型对应不同的tau。 问题:如何让anova()接受大量rq类型的模型而无需手动输入?


我尝试解决方案就是这样做:

y = rnorm(100)
x = rnorm(100)

rqs_object <- rq(y~x,tau=1:99/100)
anova(rqs_object)

但是,anova显然不会使用对象类型rqs,但很遗憾只会输入rq


交叉发布here,直到我认为它有一个大型编程/专家元素来解决问题。

1 个答案:

答案 0 :(得分:2)

我专注于问题1而只关注编程部分。

一些数据:

set.seed(65465)
y = rnorm(100)
x = rnorm(100)

现在我定义一个函数,它将tau作为输入并进行拟合:

rqfits <- function(tau) {
  require(quantreg)
  rq(y~x,tau=tau)
}

然后我可以在taus的矢量上应用这个函数:

taus <- 1:5/10
fits <- lapply(taus,rqfits)

结果是模型列表。 我们现在可以使用do.call将模型传递给anova

do.call(anova,fits)

Quantile Regression Analysis of Deviance Table

Model: y ~ x
Joint Test of Equality of Slopes: tau in {  0.1 0.2 0.3 0.4 0.5  }

  Df Resid Df F value Pr(>F)
1  4      496  1.0388 0.3866
Warning:
In summary.rq(x, se = se, covariance = TRUE) : 2 non-positive fis