Wie formuliere ich die Quantilregression als lineares Programmierproblem? Wenn ich mir das mittlere Quantilproblem anschaue, weiß ich, dass es das ist
aber wie transformiere ich die Minimierung für andere Quantile?
regression
quantile-regression
linear-programming
machazthegamer
quelle
quelle
Antworten:
Sie verwenden den Quantilregressionsschätzer
Dabei istτ∈(0,1) eine Konstante, nach der das Quantil geschätzt werden muss, und die Funktion ρτ(.) ist definiert als
Um den Zweck von betrachten Sie zunächst, dass die Residuen als Argumente verwendet werden, wenn diese als . Die Summe im Minimierungsproblem kann daher umgeschrieben werden alsρτ(.) ϵi=yi−x⊤iθ
so dass positive Residuen, die mit der Beobachtung oberhalb der vorgeschlagenen Quantilregressionslinie assoziiert sind, das Gewicht von während negative Residuen, die mit Beobachtungen unterhalb der vorgeschlagenen Quantilregressionslinie assoziiert sind werden mit gewichtet .yi x⊤iθ τ yi x⊤iθ (1−τ)
Intuitiv:
Mit positive und negative Residuen mit dem gleichen Gewicht "bestraft" und eine gleiche Anzahl von Beobachtungen befindet sich optimal über und unter der "Linie", so dass die Linie die mittlere Regression ist "Linie".τ=0.5 x⊤iβ^
Wenn jedes positive Residuum 9-mal so gewichtet wie das eines negativen Residuums mit einem Gewicht von und somit optimal für jede Beobachtung über der "Linie" ungefähr 9 unter der Linie platziert werden. Daher repräsentiert die "Linie" das 0,9-Quantil. (Für eine genaue Aussage siehe THM. 2.2 und Korollar 2.1 in Koenker (2005) "Quantile Regression")τ=0.9 1−τ=0.1 x⊤iβ^
Die beiden Fälle sind in diesen Darstellungen dargestellt. Linkes Feld und rechtes Feld .τ=0.5 τ=0.9
Lineare Programme werden überwiegend mit dem Standardformular analysiert und gelöst
Um zu einem linearen Programm in Standardform zu gelangen, besteht das erste Problem darin, dass in einem solchen Programm (1) alle Variablen, über die die Minimierung durchgeführt wird, positiv sein sollten. Um dies zu erreichen, werden Residuen unter Verwendung von Slack-Variablen in positive und negative Teile zerlegt:z
wobei positiver Teil und ist der negative Teil. Die Summe der Residuen, denen durch die Prüffunktion Gewichte zugewiesen wurden, wird dann als gesehenui=max(0,ϵi)=|ϵi|I[ϵi≥0] vi=max(0,−ϵi)=|ϵi|I[ϵi<0]
Dabei ist und und Vektor alle Koordinaten gleich .u=(u1,...,uN)⊤ v=(v1,...,vN)⊤ 1N N×1 1
Die Residuen müssen die Bedingungen erfüllen, dieN
Dies führt zur Formulierung als lineares Programm
wie in Koenker (2005) "Quantile Regression", Seite 10, Gleichung (1.20) angegeben.
Es fällt jedoch auf, dass immer noch nicht darauf beschränkt ist, positiv zu sein, wie es im linearen Programm auf Standardform (1) erforderlich ist. Daher wird wieder eine Zerlegung in einen positiven und einen negativen Teil verwendetθ∈R
wobei wiederum ein positiver Teil und ein negativer Teil ist. Die Bedingungen können dann geschrieben werden alsθ+=max(0,θ) θ−=max(0,−θ) N
Dabei ist .IN=diag{1N}
Definieren Sie als nächstes und die Entwurfsmatrix der Daten für unabhängige Variablen als gespeichert werdenb:=y X
So schreiben Sie die Einschränkung neu:
Definieren Sie die Matrix(N×2K+2N)
Da und das Minimierungsproblem nur durch die Bedingung beeinflussen, muss a der Dimension als Teil des Koeffizientenvektors , der entsprechend definiert werden kann alsθ+ θ− 0 2K×1 c
Dadurch wird sichergestellt, dassc⊤z=0⊤(θ+−θ−)=0+τ1⊤Nu+(1−τ)1⊤Nv=∑Ni=1ρτ(ϵi).
Daher werden dann und definiert und das in angegebene Programm vollständig spezifiziert.c,A b (1)
Dies wird wahrscheinlich am besten anhand eines Beispiels verdaut. Um dies in R zu lösen, verwenden Sie das Paket quantreg von Roger Koenker. Hier sehen Sie auch, wie Sie das lineare Programm einrichten und mit einem Löser für lineare Programme lösen:
quelle
Ich habe den Code von Jesper Hybel in Python mit cvxopt umgeschrieben. Ich poste es hier, falls jemand anderes dies auch in Python benötigt.
quelle
G
undh
erscheinen nicht im ursprünglichen R-Code oder in Jespers Bericht. Sind diese Artefakte, wie CVXOPT die Formulierung von Problemen erfordert, oder sind sie in einem LP-Solver enthalten? In meinem Fall bin ich auf ein Hindernis gestoßen, das versucht hat, mit N = 50.000 weiterzulaufen.G
wird in diesem Fall eine riesige quadratische Matrix. Ich denke darüber nach, einen verteilten LP-Solver wie Spark zu verwenden, aber vielleicht ist die Verwendung von LP für die Quantilregression auf dieser Datenskala einfach nicht nachvollziehbar.quantreg
rq
Routine mit 15 Millionen Datenzeilen ausführen . Ich war beeindruckt, dass jede auf linearer Programmierung basierende Methode so viele Daten verarbeiten kann. In meinem Fall (Schätzung sehr hoher Quantile) müssen jedoch noch mehr Daten verwendet werden. Ich haberq
Drosseln gefunden, wenn ich 20 Millionen oder mehr Reihen benutze. Der Fehler liegt darinlong vectors are not supported in .C
, dass die Vektoren zu lang werden. Für jeden in der gleichen Situation ist die beste Software, die ich für die Quantilregression auf Big Data gefunden habe, Microsofts LightGBM (Gradient Boosting)