python - Python 中的分位数回归给出与 R 中不同的结果

标签 python r quantreg

Python 中的 statsmodels 包中的 QuantReg 使用如下代码所示的数据给出了与 R 中截然不同的结果。

分别在Python和R中尝试了STACKLOSS数据,结果是一样的。我想知道是不是数据本身在 Python 中引起了一些问题,或者这两种算法的实现可能存在一些根本差异,但无法弄清楚。

Python 代码:

from statsmodels.regression.quantile_regression import QuantReg
y = [0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 662.59, 248.08, 331.25, 182.98, 1085.69, -44.32]
X = [
    [1, 20322.18, 0.00, 0], [1, 19653.34, 0.00, 0],
    [ 1, 0.00, 72712.41, 0], [1, 0.00, 72407.31, 0],
    [1, 0.00, 72407.31, 0], [1, 0.00, 72201.89, 9111],
    [1, 183.52, 0.00, 0], [1, 183.52, 0.00, 0],
    [1, 0.00, 0.00, 2879], [1, 0.00, 0.00, 2698],
    [1, 0.00, 0.00, 0], [1, 0.00, 0.00, 0],
    [1, 0.00, 0.00, 19358], [1, 0.00, 0.00, 19001]
]

print(QuantReg(y, X).fit(q=.5).summary())

在 R 中:

library(quantreg)

y <- c(0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 662.59, 248.08, 331.25, 182.98, 1085.69, -44.32)
X <- matrix(
    c(1, 20322.18, 0.00, 0, 1, 19653.34, 0.00, 0,
     1, 0.00, 72712.41, 0, 1, 0.00, 72407.31, 0,
    1, 0.00, 72407.31, 0, 1, 0.00, 72201.89, 9111,
    1, 183.52, 0.00, 0, 1, 183.52, 0.00, 0,
    1, 0.00, 0.00, 2879, 1, 0.00, 0.00, 2698,
    1, 0.00, 0.00, 0, 1, 0.00, 0.00, 0,
    1, 0.00, 0.00, 19358, 1, 0.00, 0.00, 19001),
    nrow=14, ncol=4, byrow=TRUE
)

rq(y~.-1, data=data.frame(X), tau=.5, method='fn')

R 给出的系数 1.829800e+02, -9.003955e-03, -2.527093e-03, -5.697678e-05

而 Python 给出了以下内容 3.339e-05, -1.671e-09, -4.635e-10, 7.957e-11

欢迎任何输入或提示。

最佳答案

我猜这是一个参数没有很好识别的数据问题。 超过一半的观测值的响应值为零,而所有其他值都大得多。

据我所知,优化算法在 R 和 statsmodels 之间有所不同,尤其是在处理残差接近零的观测值方面。

如果参数没有很好地识别,也就是说,如果数据没有在相关范围内提供足够的信息,那么实现和优化算法中的小差异可能会对参数估计产生很大影响。

这很可能意味着在这种情况下没有估计可以提供精确的参数估计。

关于python - Python 中的分位数回归给出与 R 中不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55954491/

相关文章:

python - 将回归线添加到 shap.dependence_plot

python - 迭代日期时间索引中的日期列表

python - 使用Socket进行Python UDP通信,检查收到的数据

r - 更改 R 中 levelplot 的宽度

r - 在多列中拆分列并保留下一个

r - 如何查看 quantreg 包中的 .Fortran 函数

r - ggplot stat_quantile 中的分位数是什么?

python - Paramiko 启动了一个 SSHD 进程,然后它死了……为什么?

r - 如何在 r 中组合两个数据框,以便生成的数据框有一个新列指示原始数据框?

r - 对分位数回归的系数应用正/负约束