Квантильная регрессия в Python дает другие результаты, чем в R - PullRequest
3 голосов
/ 02 мая 2019

QuantReg из пакета statsmodels в Python дает очень разные результаты, чем в R, используя данные, как показано в следующем коде.

Я пробовал данные STACKLOSS в Python и R соответственно, и результаты были такими же,Интересно, сами данные вызвали какую-то проблему в 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

Любой ввод или подсказка приветствуются.

1 Ответ

3 голосов
/ 02 мая 2019

Я полагаю, что это проблема с данными, из-за которой параметры плохо определены.Более половины наблюдений имеют значение отклика, равное нулю, в то время как все другие значения намного больше.

Насколько я знаю, алгоритм оптимизации отличается между R и statsmodels, особенно при обработке наблюдений, которые имеют близкие к нулю остатки.

Если параметры недостаточно точно определены, то есть если данные не предоставляют достаточно информации в соответствующем диапазоне, то небольшие различия в алгоритме реализации и оптимизации могут оказать большое влияние на оценки параметров.

Скорее всего, это означает, что никакая оценка не может дать точную оценку параметра в этом случае.

...