使用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,: 无效的'数字'参数
是否可以访问更多小数位?
答案 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)
会使其成为双面。