Multiple Regression mit kategorialen und numerischen Prädiktoren

10

Ich bin relativ neu in R und versuche, ein Modell an Daten anzupassen, die aus einer kategorialen Spalte und einer numerischen (ganzzahligen) Spalte bestehen. Die abhängige Variable ist eine fortlaufende Zahl.

Die Daten haben das folgende Format:

predCateg, predIntNum, ResponseVar

Die Daten sehen ungefähr so ​​aus:

ranking, age_in_years, wealth_indicator
category_A, 99, 1234.56
category_A, 21, 12.34
category_A, 42, 234.56
....
category_N, 105, 77.27

Wie würde ich dies (vermutlich mit einem GLM) in R modellieren?

[[Bearbeiten]]

Mir ist gerade eingefallen (nachdem ich die Daten gründlicher analysiert habe), dass die kategoriale unabhängige Variable tatsächlich geordnet ist. Ich habe daher die zuvor gegebene Antwort wie folgt geändert:

> fit2 <- glm(wealth_indicator ~ ordered(ranking) + age_in_years, data=amort2)
> 
> fit2

Call:  glm(formula = wealth_indicator ~ ordered(ranking) + age_in_years, 
    data = amort2)

Coefficients:
      (Intercept)  ordered(ranking).L  ordered(ranking).Q  ordered(ranking).C      age_in_years  
        0.0578500         -0.0055454         -0.0013000          0.0007603          0.0036818  

Degrees of Freedom: 39 Total (i.e. Null);  35 Residual
Null Deviance:      0.004924 
Residual Deviance: 0.00012      AIC: -383.2
> 
> fit3 <- glm(wealth_indicator ~ ordered(ranking) + age_in_years + ordered(ranking)*age_in_years, data=amort2)
> fit3

Call:  glm(formula = wealth_indicator ~ ordered(ranking) + age_in_years + 
    ordered(ranking) * age_in_years, data = amort2)

Coefficients:
                    (Intercept)                ordered(ranking).L                ordered(ranking).Q  
                      0.0578500                       -0.0018932                       -0.0039667  
              ordered(ranking).C                    age_in_years  ordered(ranking).L:age_in_years  
                      0.0021019                        0.0036818                       -0.0006640  
ordered(ranking).Q:age_in_years  ordered(ranking).C:age_in_years  
                      0.0004848                       -0.0002439  

Degrees of Freedom: 39 Total (i.e. Null);  32 Residual
Null Deviance:      0.004924 
Residual Deviance: 5.931e-05    AIC: -405.4

Ich bin ein bisschen verwirrt darüber ordered(ranking).C, was ordered(ranking).Qund was ordered(ranking).Lin der Ausgabe bedeutet, und würde mich über Hilfe beim Verständnis dieser Ausgabe und deren Verwendung zur Vorhersage der Antwortvariablen freuen.

Homunculus Reticulli
quelle

Antworten:

11

Versuche dies:

fit <- glm(wealth_indicator ~ 
           factor(ranking) + age_in_years + factor(ranking) * age_in_years)

Der factor()Befehl stellt sicher, dass R weiß, dass Ihre Variable kategorisch ist. Dies ist besonders nützlich, wenn Ihre Kategorien durch Ganzzahlen angezeigt werden. Andernfalls interpretiert glm die Variable als stetig.

Der factor(ranking) * age_in_yearsBegriff lässt R wissen, dass Sie den Interaktionsbegriff einschließen möchten.

P Schnell
quelle
1
warum factor(ranking)nicht as.factor(ranking)?
Peter Flom
1
Ich benutze factor(x)es gewöhnlich, damit ich das levelsArgument aufnehmen kann, wenn ich möchte. Sie können es auch verwenden, as.factor(x)wenn Sie möchten, und es kann tatsächlich schneller sein, aber ich denke, Sie würden einen ziemlich großen Datensatz benötigen, damit die Geschwindigkeit dieser Funktionen eine Rolle spielt.
P Schnell
@PSchnell +1 für eine kurze Antwort und eine gute Erklärung. Eine Sache ist jedoch, dass ich erkannt habe, dass der Faktor geordnet ist. Ich habe die von Ihnen angegebene Formel leicht geändert, um dies zu berücksichtigen (siehe meine bearbeitete Frage). Allerdings bin ich nicht sicher , verstehe ich die Modellausgabe (genauer gesagt ordered(ranking).C, ordered(ranking).Qund ordered(ranking).L- was sie bedeuten und wie verwende ich , dass die Antwortvariable vorhersagen?) - jede Hilfe wird sehr geschätzt werden. Danke
Homunculus Reticulli
1
.L,, .Qund .Csind jeweils die Koeffizienten für den geordneten Faktor, der mit linearen, quadratischen und kubischen Kontrasten codiert ist. Der Befehl contr.poly(4)zeigt Ihnen die Kontrastmatrix für einen geordneten Faktor mit 4 Ebenen (3 Freiheitsgrade, weshalb Sie bis zu einem Polynom dritter Ordnung erhalten). contr.poly(4)[2, '.L']Hier erfahren Sie, was Sie für die zweite geordnete Ebene linear anschließen müssen. Beachten Sie, dass dies voraussetzt, dass es sinnvoll ist, die Ebenen als gleichmäßig verteilt zu betrachten. Wenn dies nicht der Fall ist, codieren Sie Ihre eigene Kontrastmatrix.
P Schnell
2
Nach ats.ucla.edu/stat/r/library/contrast_coding.htm#ORTHOGONAL , in R, wenn eine kontinuierliche Variable in Reaktion auf eine geordnete Faktorvariable modelliert wird, angewendet Der Standardkontrast orthogonalen Polynom Codierung onlinecourses.science.psu .edu / stat502 / node / 203 . stats.stackexchange.com/a/206345/90600 enthält einige ziemlich ausführliche Erklärungen. stats.stackexchange.com/a/207128/90600 geht noch tiefer.
Paul de Barros
2

Ich habe kürzlich die kontinuierliche abhängige Variable mit der ordinalen unabhängigen Variablen beantwortet und die ordSmoothFunktion im ordPensPaket empfohlen . Dies verwendet eine bestrafte Regression, um Dummy-Koeffizienten über Ebenen einer Ordnungsvariablen hinweg zu glätten, damit sie nicht zu stark von einer Ebene zur nächsten variieren. category_AZum Beispiel möchten Sie wahrscheinlich nicht, dass der Koeffizient viel anders ist category_Bals der von category_N. Sie möchten wahrscheinlich, dass die Koeffizienten monoton steigen oder fallen oder sich zumindest allmählich über die Ränge hinweg ändern. Meine Antwort auf die verknüpfte Frage enthält Referenzen für weitere Informationen.

ordSmoothkann auch kontinuierliche (und nominale) Variablen aufnehmen; In Ihrem Fall könnte der Code sein:

SmoothFit=with(amort2,
ordSmooth(as.numeric(ordered(ranking)),wealth_indicator,z=age_in_years,lambda=.001))

ordSmootherfordert eine numerische Eingabe für Ordnungsdaten, daher die as.numeric(ordered())Neuformatierung. zist für einen numerischen Vektor / eine Matrix / data.framevon kontinuierlichen Prädiktoren. lambdaist der Glättungskoeffizient - größere Werte bringen Ihre Koeffizienten näher an Null. Könnte klug sein, hier klein anzufangen. Beim Drucken erhalten SmoothFitSie Koeffizienten und angepasste Werte, aber ich fürchte, der Rest bleibt Ihnen überlassen.

In Ihrer Methode scheinen die ordered(ranking).C/ .Q/ .LKoeffizienten als kubisch, quadratisch bzw. linear gekennzeichnet zu sein. Wenn Sie es versuchen glm(rnorm(10)~ordered(rep(1:5,2))), erhalten Sie auch einen Koeffizienten für ordered(rep(1:5, 2))^4. Ich bin mir nicht sicher, warum diese mit Exponenten bezeichnet werden. Ich denke nicht, dass es diese als Polynomterme modelliert, weil die Koeffizienten für glm(y~x+I(x^2)+I(x^3)+I(x^4))und skalierte Varianten davon unterschiedlich sind. Sie sollten grundlegende Dummy-Codes sein .

Nick Stauner
quelle