4

使用 R 和 package 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

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

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

但是如果 P < 1e-22 它仍然四舍五入为 0,并且如果“digits”设置为 > 22,我会收到以下错误;

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

prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, : invalid 'digits' argument) 中的错误

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

4

2 回答 2

4

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

format(model$coefficients, digits=12)

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

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

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

尽管我非常怀疑在小于 1e-27 的 p.value 的数字中可以找到任何含义!

于 2012-08-21T10:13:34.660 回答
2

为了更进一步,我认为您必须深入研究并查看如何计算 p 值。特别是,summary.rq具有以下片段:

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

这实际上是对 p 值的相当不精确的计算(在一般情况下并不重要)。您可能可以通过检索 p 值的日志来获得最大精度[例如,原则上您可以检索小于 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)使其成为双面的。

于 2012-08-21T16:50:46.157 回答