分位数回归和p值 - 获得更多小数位

时间:2012-08-21 09:53:47

标签: r regression quantile quantreg

使用R和包quantreg,我正在对我的数据执行分位数回归分析。

我可以使用摘要函数中的se(标准错误)估算器访问p值,如下所示,但是我只得到5位小数,并且想要更多。

model <- rq(outcome ~ predictor)
summary(model, se="ker")

Call: rq(formula = outcome ~ predictor)

tau: [1] 0.5

Coefficients:
            Value    Std. Error t value  Pr(>|t|)
(Intercept) 78.68182  2.89984   27.13312  0.00000
predictor    0.22727  0.03885    5.84943  0.00000

我如何才能访问p值的更多小数位?


更新

好的,所以我可以通过选择包含数值结果矩阵的子对象来获得更多的小数位数;

> summary(model, se="ker")[[3]]
                 Value Std. Error   t value     Pr(>|t|)
(Intercept) 78.6818182 3.13897835 25.066059 0.000000e+00
predictor    0.2272727 0.04105681  5.535567 4.397638e-08

然而,当值<1e-12时,P值仍然舍入为0(上述输出是简化的示例模型)。我可以通过应用@seancarmody的建议获得更多信息;

format(summary(model, se="ker")[[3]], digits=22)

但如果P&lt; 1e-22它仍然舍入为0,如果“digits”设置为&gt; 22我收到以下错误;

format(summary(model, se="ker")[[3]], digits=23)
  

prettyNum中的错误(.Internal(格式(x,修剪,数字,nsmall,宽度,3L,:         无效的'数字'参数

是否可以访问更多小数位?

2 个答案:

答案 0 :(得分:4)

看看str(model)。您可以看到有一个属性coefficients,它将为您提供一个精度高于摘要显示的数字向量。您也可以使用

查看这些内容
format(model$coefficients, digits=12)

请注意,这会将系数转换为字符串。

要更仔细地检查p.values,请尝试

summary(model, se="ker")$coefficients[,1]*1e27

虽然我非常怀疑在小于1e-27的p.value的数字中有任何意义!

答案 1 :(得分:2)

为了更进一步,我认为你必须深入研究如何计算p值。特别是,summary.rq包含以下代码段:

  coef[, 4] <- if (rdf > 0) 
        2 * (1 - pt(abs(coef[, 3]), rdf))
    else NA

这实际上是一个相当不精确的p值计算(在一般情况下并不重要)。您可以通过检索p值的 log 来获得最大精度[例如,您原则上可以检索小于10 ^ { - 308}的p值,即最小值R可以表示为双精度值],例如

ss <- summary(model,se="ker")
log(2)+pt(abs(ss$coefficients[,"t value"]),
     lower.tail=FALSE,log.p=TRUE,df=ss$rdf)

lower.tail=FALSE参数为您提供CDF的补码(上尾)值; log.p=TRUE表示您想要日志值;添加log(2)会使其成为双面。