Wie benutzt man Gewichte in der Funktion lm in R?

21

Könnte jemand einige Hinweise zur Verwendung des weightsArguments in der lmFunktion von R geben ? Angenommen, Sie haben versucht, ein Modell für Verkehrsdaten zu erstellen, und Sie hatten mehrere hundert Zeilen, von denen jede eine Stadt (mit einer anderen Bevölkerung) darstellt. Wenn Sie möchten, dass das Modell den relativen Einfluss jeder Beobachtung basierend auf der Populationsgröße anpasst, können Sie dies einfach angeben weights=[the column containing the city's population]? Ist das die Art von Vektor, in die man hineingehen kann weights? Oder müssten Sie eine andere R-Funktion / ein anderes Paket / einen anderen Ansatz verwenden?

Neugierig zu hören, wie die Leute dieses Problem angehen - ich habe es in keinem der Tutorials zur linearen Modellierung gesehen, die ich dort gesehen habe. Vielen Dank!

Andrew
quelle

Antworten:

17

Ich denke, die R-Hilfeseite lmbeantwortet Ihre Frage ziemlich gut. Die einzige Voraussetzung für Gewichte ist, dass der angegebene Vektor dieselbe Länge wie die Daten hat. Sie können sogar nur den Namen der Variablen im Datensatz angeben, R kümmert sich um den Rest, die NA-Verwaltung usw. Sie können auch Formeln im weightArgument verwenden. Hier ist das Beispiel:

x <-c(rnorm(10),NA)
df <- data.frame(y=1+2*x+rnorm(11)/2, x=x, wght1=1:11)

## Fancy weights as numeric vector
summary(lm(y~x,data=df,weights=(df$wght1)^(3/4))) 

# Fancy weights as formula on column of the data set
summary(lm(y~x,data=df,weights=I(wght1^(3/4))))

# Mundane weights as the column of the data set
summary(lm(y~x,data=df,weights=wght1))

Beachten Sie, dass die Gewichte positiv sein müssen, sonst erzeugt R einen Fehler.

mpiktas
quelle
Aber müssen die Gewichte eins ergeben? Ich erhalte unterschiedliche Ergebnisse in meiner lmZusammenfassung, wenn sie gegen nicht skaliert sind ...
Palace Chan
Nein, die Gewichte müssen nicht eins ergeben. Was ist in der lmZusammenfassung anders ? Die Koeffizienten oder die Standardfehler?
mpiktas
Residuen und ihre Standardfehler unterscheiden sich, Koeffizienten und ihre Fehler jedoch nicht.
Palace Chan
3

Was Sie vorschlagen, sollte funktionieren. Sehen Sie, ob dies sinnvoll ist:

lm(c(8000, 50000, 116000) ~ c(6, 7, 8))
lm(c(8000, 50000, 116000) ~ c(6, 7, 8), weight = c(123, 123, 246))
lm(c(8000, 50000, 116000, 116000) ~ c(6, 7, 8, 8))

Die zweite Linie erzeugt den gleichen Schnitt und die gleiche Steigung wie die dritte Linie (im Unterschied zum Ergebnis der ersten Linie), indem eine Beobachtung relativ doppelt so schwer ist wie jede der beiden anderen Beobachtungen, ähnlich wie das Duplizieren der dritten Beobachtung.

Henry
quelle
Ich habe das versucht, aber festgestellt, dass die summaryAusgabe für die 2. und 3. Zeile unterschiedlich ist, insbesondere für den p-Wert des Koeffizienten. Ich frage mich, dass dies passieren wird, wenn sich die beiden Anweisungen auf denselben Datensatz beziehen. Ich habe eine Frage dazu auf stackoverflow.com/questions/10268689/weighted-regression-in-r
lokheart am