Lineare Regression mit Steigungsbeschränkung


18

Ich möchte eine sehr einfache lineare Regression durchführen R. Die Formel ist so einfach wie . Ich möchte jedoch, dass die Steigung ( ) in einem Intervall zwischen 1,4 und 1,6 liegt.ay=einx+bein

Wie geht das?

Antworten:


24

Ich möchte eine lineare Regression in R durchführen. Ich möchte, dass die Steigung in einem Intervall zwischen 1,4 und 1,6 liegt. Wie geht das?

(i) Einfacher Weg:

  • Passen Sie die Regression. Wenn es in Grenzen ist, sind Sie fertig.

  • Wenn es nicht innerhalb der Grenzen liegt, stellen Sie die Steigung auf die nächste Grenze ein, und

  • Schätzen Sie den Achsenabschnitt als Durchschnitt von über alle Beobachtungen.(y-einx)

(ii) Komplexerer Weg: Führe die kleinsten Quadrate mit Rahmenbeschränkungen am Hang aus. Viele Optimierungsroutinen implementieren Box-Einschränkungen, z. B. nlminb(was mit R geliefert wird ).

Bearbeiten: Tatsächlich (wie im folgenden Beispiel erwähnt) kann Vanilla R nlsBox-Einschränkungen ausführen. Wie im Beispiel gezeigt, ist das wirklich sehr einfach.

Sie können die eingeschränkte Regression direkter verwenden. Ich denke, die pclsFunktion aus dem Paket "mgcv" und die nnlsFunktion aus dem Paket "nnls" machen beide.

-

Bearbeiten, um die nachfolgende Frage zu beantworten -

Ich wollte Ihnen zeigen, wie man es verwendet, nlminbda dies mit R einhergeht, aber ich erkannte, dass nlsbereits dieselben Routinen (die PORT-Routinen) zum Implementieren von erzwungenen kleinsten Quadraten verwendet werden. In meinem folgenden Beispiel ist dies der Fall.

NB: In meinem Beispiel unten ist der Achsenabschnitt und die Steigung (die üblichere Konvention in Statistiken). Nachdem ich es hier reingesteckt hatte, wurde mir klar, dass du anders herum angefangen hast. Ich werde das Beispiel jedoch in Bezug auf Ihre Frage "rückwärts" lassen.beinb

Richten Sie zuerst einige Daten mit der 'wahren' Steigung innerhalb des Bereichs ein:

 set.seed(seed=439812L)
 x=runif(35,10,30)
 y = 5.8 + 1.53*x + rnorm(35,s=5)  # population slope is in range
 plot(x,y)
 lm(y~x)

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
     12.681        1.217  

... aber die LS-Schätzung liegt weit außerhalb, nur aufgrund zufälliger Abweichungen. Verwenden wir also die eingeschränkte Regression in nls:

 nls(y~a+b*x,algorithm="port",
   start=c(a=0,b=1.5),lower=c(a=-Inf,b=1.4),upper=c(a=Inf,b=1.6))

Nonlinear regression model
  model: y ~ a + b * x
   data: parent.frame()
    a     b 
9.019 1.400 
 residual sum-of-squares: 706.2

Algorithm "port", convergence message: both X-convergence and relative convergence (5)

Wie Sie sehen, erhalten Sie einen Hang direkt an der Grenze. Wenn Sie das angepasste Modell übergeben, summarywerden sogar Standardfehler und t-Werte erzeugt, aber ich bin nicht sicher, wie aussagekräftig / interpretierbar diese sind.

Wie vergleicht mein Vorschlag (1)? (dh setzen Sie die Steigung auf die nächste Grenze und mitteln Sie die Residuen , um den abzuschätzen)y-bx

 b=1.4
 c(a=mean(y-x*b),b=b)
       a        b 
9.019376 1.400000

Es ist die gleiche Schätzung ...

In der folgenden Darstellung ist die blaue Linie die kleinste Quadrate und die rote Linie die eingeschränkte kleinste Quadrate:

eingeschränkte und LS-Linie


Vielen Dank für diese Antwort, aber ... könnten Sie ein Beispiel mit einer dieser Funktionen geben?
Iñigo Hernáez Corres

1
+1 Das Ermitteln von Konfidenzintervallen für die Parameterschätzungen ist in jedem Fall eine Herausforderung.
Whuber

@IñigoHernáezCorres siehe das Update zu meiner Antwort, wo ich mit illustriere nls, um es zu tun.
Glen_b

+1 tolle Antwort mit Verbindungen auf zwei Arten!
Haitao Du

15

Die zweite Methode von Glen_b, die kleinste Quadrate mit einer Box-Einschränkung verwendet, lässt sich einfacher über die Ridge-Regression implementieren. Die Lösung für die Gratregression kann als Lagrange für eine Regression mit einer Begrenzung der Größe der Norm des Gewichtsvektors (und damit seiner Steigung) angesehen werden. Entsprechend dem Vorschlag von Whuber würde der Ansatz darin bestehen, einen Trend von (1,6 + 1,4) / 2 = 1,5 zu subtrahieren und dann eine Gratregression anzuwenden und den Gratparameter allmählich zu erhöhen, bis die Größe der Steigung kleiner oder gleich 0,1 ist.

Der Vorteil dieses Ansatzes besteht darin, dass keine ausgefallenen Optimierungswerkzeuge erforderlich sind, sondern nur die Ridge-Regression, die bereits in R (und vielen anderen Paketen) verfügbar ist.

Die einfache Lösung von Glen_b (i) erscheint mir jedoch sinnvoll (+1)


5
Das ist klug, aber sind Sie sicher, dass es wie beschrieben funktioniert? Es scheint mir der geeignete Ansatz zu sein, einen Trend von (1,6 + 1,4) / 2 = 1,5 zu entfernen und dann den Kammparameter zu steuern, bis der absolute Wert der Steigung kleiner oder gleich 0,1 ist.
Whuber

1
Ja, das ist in der Tat ein besserer Vorschlag. Der Ansatz der Gratregression ist wirklich angemessener, wenn die Beschränkung auf die Größe des Gefälles beschränkt ist. Es klingt nach einem ziemlich merkwürdigen Problem! Meine Antwort wurde ursprünglich von Glen_bs Kommentar zu Box-Einschränkungen inspiriert. Die Ridge-Regression ist im Grunde nur eine einfachere Möglichkeit, die Box-Einschränkungen zu implementieren.
Dikran Marsupial

Obwohl ich es sehr schätze, dass Sie meine Kommentare zur Kenntnis genommen haben, lenkt dies vom Inhalt Ihrer Antwort ab. Wir sind alle dabei, um unsere Arbeit zu verbessern, wo immer wir können. Es ist also eine ausreichende Bestätigung, dass Sie auf meine Vorschläge reagiert haben. Dafür verdienen Sie die Steigerung der Reputation. Wenn Sie weitere Änderungen vornehmen möchten, sollten Sie den Text optimieren, indem Sie das überflüssige Material entfernen.
Whuber

Überflüssiges Material bearbeitet, aber ich arbeite gerne zusammen und bin immer bemüht, den Mitarbeitern die Anerkennung zu geben, die sie verdienen, und denke trotzdem, dass Sie moralisch die Hälfte der Mehrstimmen verdienen. ; o)
Dikran Marsupial

10

ein

ein

Dieses Ergebnis liefert immer noch glaubwürdige Intervalle der interessierenden Parameter (die Aussagekraft dieser Intervalle hängt natürlich von der Plausibilität Ihrer vorherigen Informationen über die Steigung ab).


+1, das war auch mein erster Gedanke. Ich mag die anderen Vorschläge, aber das scheint mir das Beste zu sein.
gung - Wiedereinsetzung von Monica

0

Ein anderer Ansatz könnte darin bestehen, Ihre Regression als Optimierungsproblem neu zu formulieren und einen Optimierer zu verwenden. Ich bin nicht sicher, ob es auf diese Weise umformuliert werden kann, aber ich habe mir diese Frage überlegt, als ich diesen Blog-Beitrag über R-Optimierer las:

http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.