Come usare i pesi nella funzione lm in R?


21

Qualcuno potrebbe offrire alcuni suggerimenti su come utilizzare l' weightsargomento nella lmfunzione di R ? Ad esempio, stavi cercando di adattare un modello ai dati sul traffico e avevi diverse centinaia di file, ognuna delle quali rappresentava una città (con una popolazione diversa). Se si desidera che il modello modifichi l'influenza relativa di ciascuna osservazione in base alla dimensione della popolazione, è possibile specificare semplicemente weights=[the column containing the city's population]? È questo il tipo di vettore che può andare weights? O avresti bisogno di utilizzare una diversa funzione / pacchetto / approccio R?

Curioso di sapere come la gente affronta questo, non l'ho visto coperto in nessuno dei tutorial di modellazione lineare che ho visto là fuori. Grazie!

Risposte:


17

Penso che R aiuti la pagina di lmrisposte abbastanza bene alla tua domanda. L'unico requisito per i pesi è che il vettore fornito deve avere la stessa lunghezza dei dati. Puoi anche fornire solo il nome della variabile nel set di dati, R si occuperà del resto, gestione NA, ecc. Puoi anche usare le formule weightnell'argomento. Ecco l'esempio:

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))

Notare che i pesi devono essere positivi, altrimenti R produrrà un errore.


ma i pesi devono riassumere in uno? Ottengo risultati diversi nel mio lmsommario se sono ridimensionati rispetto a non ...
Palace Chan,

No, i pesi non devono essere riassunti in uno. Cosa c'è di diverso nel lmsommario? I coefficienti o gli errori standard?
mpiktas,

I residui e il loro errore standard differiscono, ma i coefficienti e i loro errori no.
Palace Chan,

3

Quello che suggerisci dovrebbe funzionare. Vedi se questo ha senso:

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))

La seconda linea produce la stessa intercetta e la stessa pendenza della terza linea (distinta dal risultato della prima linea), dando un'osservazione relativamente il doppio del peso di ciascuna delle altre due osservazioni, simile all'impatto della duplicazione della terza osservazione.


Ci ho provato ma ho scoperto che l' summaryoutput è diverso per la 2a e la 3a riga, specialmente per il valore p del coefficiente, mi chiedo che ciò accada se le 2 istruzioni si riferiscono allo stesso set di dati. Ho postato una domanda su questo a stackoverflow.com/questions/10268689/weighted-regression-in-r
lokheart
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.