Como formular regressão quantílica como um problema de programação linear? Ao olhar para o problema mediano dos quantis, sei que é
mas como transformar a minimização para outros quantis?
regression
quantile-regression
linear-programming
machazthegamer
fonte
fonte
Respostas:
Você usa o estimador de regressão quantil
ondeτ∈(0,1) é constante escolhido de acordo com o qual o quantil precisa ser estimado e a função ρτ(.) é definida como
Para ver o objetivo de Considere primeiro que ele leva os resíduos como argumentos, quando são definidos como . A soma do problema de minimização pode, portanto, ser reescrita comoρτ(.) ϵi=yi−x⊤iθ
de modo que resíduos positivos associados à observação acima da linha de regressão quantílica sugerida recebem o peso de enquanto resíduos negativos associados à observação abaixo da linha de regressão quantílica sugerida são ponderados com .yi x⊤iθ τ yi x⊤iθ (1−τ)
Intuitivamente:
Com resíduos positivos e negativos são "punidos" com o mesmo peso e um número igual de observação está acima e abaixo da "linha" no ideal, de modo que a linha seja a regressão mediana "linha".τ=0.5 x⊤iβ^
Quando cada resíduo positivo é ponderado 9 vezes o de um resíduo negativo com peso e, portanto, é ideal para todas as observações acima da "linha" aproximadamente 9 ser colocado abaixo da linha. Portanto, a "linha" representa o quantil 0,9. (Para uma declaração exata disso, consulte THM. 2.2 e Corollary 2.1 em Koenker (2005) "Regressão quantílica")τ=0.9 1−τ=0.1 x⊤iβ^
Os dois casos são ilustrados nessas parcelas. Painel esquerdo e painel direito .τ=0.5 τ=0.9
Os programas lineares são predominantemente analisados e resolvidos usando o formulário padrão
Para chegar a um programa linear na forma padrão, o primeiro problema é que em um programa (1) todas as variáveis sobre as quais a minimização é realizada devem ser positivas. Para isso, os resíduos são decompostos em partes positivas e negativas usando variáveis de folga:z
onde parte positiva e é a parte negativa. A soma dos pesos residuais atribuídos pela função de verificação é então vista comoui=max(0,ϵi)=|ϵi|I[ϵi≥0] vi=max(0,−ϵi)=|ϵi|I[ϵi<0]
onde e e é vetor todas as coordenadas igual a .u=(u1,...,uN)⊤ v=(v1,...,vN)⊤ 1N N×1 1
Os resíduos devem satisfazer as restrições queN
Isso resulta na formulação como um programa linear
como indicado na equação de Koenker (2005) "Regressão quantílica", página 10 (1.20).
No entanto, é perceptível que ainda não está restrito a ser positivo, conforme exigido no programa linear no formulário padrão (1). Portanto, novamente se decompõe em parte positiva e negativa.θ∈R
onde novamente é parte positiva e é parte negativa. As restrições podem então ser escritas comoθ+=max(0,θ) θ−=max(0,−θ) N
onde .IN=diag{1N}
Em seguida, defina e a matriz de design armazenando dados em variáveis independentes comob:=y X
Para reescrever restrição:
Definir a matriz(N×2K+2N)
Como e afetam apenas o problema de minimização através da restrição a da dimensão deve ser introduzida como parte do vetor coeficiente que pode ser definido adequadamente comoθ+ θ− 0 2K×1 c
garantindo assim quec⊤z=0⊤(θ+−θ−)=0+τ1⊤Nu+(1−τ)1⊤Nv=∑Ni=1ρτ(ϵi).
Portanto e são então definidos e o programa, conforme indicado em completamente especificado.c,A b (1)
Provavelmente é melhor digerido usando um exemplo. Para resolver isso em R, use o pacote quantreg de Roger Koenker. Aqui está também uma ilustração de como configurar o programa linear e resolver com um solucionador de programas lineares:
fonte
Reescrevi o código de Jesper Hybel em Python usando cvxopt. Estou postando aqui, caso alguém também precise disso em Python.
fonte
G
eh
não apareça no código R original ou no artigo de Jesper. Esses artefatos de como o CVXOPT exigem a formulação de problemas ou estão implícitos em qualquer solucionador de LP? No meu caso, encontrei um obstáculo tentando continuar com N = 50.000.G
torna-se uma enorme matriz quadrada neste caso. Estou pensando em usar um solucionador de LP distribuído como o Spark, mas talvez o uso de LP para regressão quantil nessa escala de dados não seja tratável.quantreg
rq
rotina com 15 milhões de linhas de dados. Fiquei impressionado que qualquer método baseado em programação linear pudesse lidar com tantos dados. No entanto, no meu caso (estimando quantis muito altos), é necessário usar ainda mais dados do que isso. Encontreirq
estrangulamentos quando uso 20 milhões ou mais de linhas. O erro élong vectors are not supported in .C
que ocorre porque os vetores se tornam muito longos. Para qualquer pessoa na mesma situação, o melhor software que eu encontrei para regressão quantílica sobre big data é LightGBM da Microsoft (gradiente aumentando)