Wie man einen Koeffizienten festlegt und andere mithilfe der Regression anpasst

11

Ich möchte einen bestimmten Koeffizienten manuell festlegen, z. B. , und dann die Koeffizienten an alle anderen Prädiktoren anpassen, während im Modell erhalten .β1=1.0β1=1.0

Wie kann ich dies mit R erreichen? Ich würde besonders gerne mit LASSO ( glmnet) arbeiten, wenn möglich.

Wie kann ich diesen Koeffizienten alternativ auf einen bestimmten Bereich beschränken, z. B. ?0.5β11.0

raco
quelle
Um Box-Einschränkungen für die angepassten Koeffizienten festzulegen, gibt es die Argumente lower.limits und Upper.limits in glmnet, richtig?
Tom Wenseleers

Antworten:

4

Sie müssen das offsetArgument wie folgt verwenden:

library(glmnet)
x=matrix(rnorm(100*20),100,20)
x1=matrix(rnorm(100),100,1)
y=rnorm(100)
fit1=glmnet(x,y,offset=x1)
fit1$offset
print(fit1)

Über die Reichweite ... Ich glaube nicht, dass das in implementiert wurde glmnet. Wenn sie eine numerische Methode verwenden, möchten Sie vielleicht in den R-Code eintauchen und versuchen, ihn dort einzuschränken, aber Sie benötigen einen guten, soliden Programmierhintergrund.

Stat
quelle
2
Was macht offseteigentlich Wie wird der Wert von 1.1*x1aus der Frage bestimmt?
whuber
Ich habe die Dokumentation für 'Offset' in glmnet gelesen und bin mir immer noch nicht sicher, was es tut. Ich konnte keine guten Beispiele finden, aber die meisten beziehen sich auf Poisson-Prozesse. Warum wird 1.1 * x1 verwendet?
Raco
Ich dachte, er legt die Koeffizienten auf . Ich habe gerade die Antwort bearbeitet. Der Versatz ist der Begriff, bei dem sein Koeffizient nicht vom Modell geschätzt wird, sondern den Wert 1 hat.β1=1.1
Stat
Ich bin mit dieser Antwort zufrieden. Ich kann über verschiedene Offset- "Koeffizienten" iterieren und Modelle vergleichen. Vielen Dank!
Raco
1
In Bezug auf offsetdas glmnetPaket macht die Antwort von Stat für mich keinen Sinn. Wenn ich fit1 beta)] starte , sehe ich kein β 1 = 1.0 . Können Sie klarstellen, wie der Offset in Ihrem Beispiel funktioniert? Für den Bereich der Betas können Sie die Argumente und verwenden . beta[,ncol(fit1β1=1.0lower.limitsupper limits
Mario Nuñez
9

Nun, lass uns nachdenken. Du hast:

Y=b0+b1x1+b2x2+e

(um es einfach zu halten) Sie möchten erzwingen , also möchten Sieb1=1

Y=b0+x1+b2x2+e

Sie können also einfach von jeder Seite abziehen und Folgendes hinterlassen:x1

Ynew=Yx1=b0+b2x2+e

b2

Peter Flom - Monica wieder einsetzen
quelle
2
Das ist der einfache Teil (und wurde, wie ich mich erinnere, in anderen Threads angesprochen). Was ist mit der Beschränkung des Koeffizienten auf einen Bereich? Der besonders schwierige Teil dieses Problems besteht darin, gute Konfidenzgrenzen zu erhalten, wenn die Schätzung an der Grenze des Beschränkungsbereichs liegt.
whuber
2
Das ist definitiv schwieriger. Ich habe das Ende des Beitrags verpasst. Aber ich denke, ich sollte meine Antwort offen lassen, da sie einen Teil der Frage beantwortet
Peter Flom - Reinstate Monica
β11β1=0.75Ynew=Y.75x1=β0+(β10.75)x1+β2x2+ϵβ1
1
Ja, wenn es auf 0,75 festgelegt ist, funktioniert das, was Sie sagen. Aber wie @whuber betont, ist das der einfache Teil dieses Problems
Peter Flom - Reinstate Monica
2
@whuber, in einem Bayes'schen Framework könnten Sie einen Metropolis-Schritt ausführen, um Koeffizienten außerhalb Ihres Bereichs herauszuwerfen, oder Sie könnten alternativ eine Stichprobe aus einer abgeschnittenen multivariaten Normalverteilung ziehen.
John
3

In Bezug auf die Beschränkung der Koeffizienten auf einen Bereich ist ein Bayes'scher Schätzansatz ein Mittel, um dies zu erreichen.

Insbesondere würde man sich auf eine Markov-Kette Monte Carlo verlassen. Betrachten Sie zunächst einen Gibbs-Abtastalgorithmus, mit dem Sie die MCMC ohne Einschränkung in ein Bayes'sches Framework einpassen würden. Bei der Gibbs-Abtastung wird in jedem Schritt des Algorithmus eine Stichprobe aus der posterioren Verteilung jedes Parameters (oder jeder Gruppe von Parametern) erstellt, die von den Daten und allen anderen Parametern abhängig ist. Wikipedia bietet eine gute Zusammenfassung des Ansatzes.

Eine Möglichkeit, die Reichweite einzuschränken, besteht darin, einen Metropolis-Hastings-Schritt anzuwenden. Die Grundidee besteht darin, einfach jede simulierte Variable, die außerhalb Ihrer Grenzen liegt, wegzuwerfen. Sie können dann die erneute Abtastung fortsetzen, bis dies innerhalb Ihrer Grenzen liegt, bevor Sie mit der nächsten Iteration fortfahren. Der Nachteil dabei ist, dass Sie möglicherweise oft stecken bleiben, was die MCMC verlangsamt. Ein alternativer Ansatz, der ursprünglich von John Geweke in einigen Veröffentlichungen entwickelt und in einer Veröffentlichung von Rodriguez-Yam, Davis, erweitert wurde, besteht darin, eine eingeschränkte multivariate Normalverteilung zu simulieren. Dieser Ansatz kann mit linearen und nichtlinearen Ungleichheitsbeschränkungen für Parameter umgehen, und ich habe einige Erfolge damit erzielt.

John
quelle
Um Box-Einschränkungen für die angepassten Koeffizienten festzulegen, gibt es die Argumente lower.limits und Upper.limits in glmnet, richtig?
Tom Wenseleers
@ TomWenseleers Ich antwortete allgemeiner. Schauen Sie sich einige der anderen Antworten in Bezug auf an glmnet.
John
2

Ich bin nicht mit LASSO vertraut oder glmnet, aber lavaan(kurz für "Latent Variable Analysis") ermöglicht mehrere Regressionsmodelle mit sowohl Gleichheitsbeschränkungen als auch einfach begrenzten Ungleichheitsbeschränkungen (siehe Tabelle auf Seite 7 dieses PDFs, "lavaan: Ein R-Paket" zur Modellierung von Strukturgleichungen " ). Ich weiß nicht, ob Sie sowohl obere als auch untere Grenzen für den Koeffizienten haben könnten, aber vielleicht könnten Sie jede Grenze mit separaten Linien hinzufügen, z.

Coefficient>.49999999
Coefficient<1.0000001

Wenn Sie alles standardisieren, bevor Sie das Modell anpassen, sollten Sie sich natürlich sowieso keine Sorgen machen müssen, Ihren Regressionskoeffizienten eine Obergrenze von 1 aufzuerlegen. Ich würde sagen, Sie sollten es in diesem Fall besser weglassen, nur für den Fall, dass etwas schief geht! ( lavaan ist immer noch in der Beta ... Ich habe einige leicht fischige Ergebnisse in meiner eigenen eingeschränkten Verwendung gesehen.)

Nick Stauner
quelle
Um Box-Einschränkungen für die angepassten Koeffizienten festzulegen, gibt es die Argumente lower.limits und Upper.limits in glmnet, richtig?
Tom Wenseleers