Domanda:
Coefficiente di interpretazione in un modello di regressione lineare con variabili categoriali
Sverre
2011-07-22 03:12:18 UTC
view on stackexchange narkive permalink

Fornirò i miei esempi con le chiamate R. Prima un semplice esempio di regressione lineare con una variabile dipendente "durata della vita" e due variabili esplicative continue.

  data.frame (height = runif (4000,160,200)) - >human.lifehuman. life $ weight = runif (4000,50,120) human.life $ lifespan = sample (45: 90,4000, replace = TRUE) summary (lm (lifespan ~ 1 + height + weight, data = human.life)) Call: lm (formula = durata della vita ~ 1 + altezza + peso, dati = vita umana) Residui: Min 1Q Mediana 3Q Max -23,0257 -11,9124 -0,0565 11,3755 23,8591 Coefficienti: Std. Errore t valore Pr (> | t |) (Intercept) 63.635709 3.486426 18.252 <2e-16 *** altezza 0.007485 0.018665 0.401 0.6884 peso 0.024544 0.010428 2.354 0.0186 * --- Signif. codici: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 '' 1 Errore standard residuo: 13,41 su 3997 gradi di libertà R quadrato multiplo: 0,001425, R quadrato aggiustato: 0,0009257 Statistica F : 2.853 su 2 e 3997 DF, valore p: 0.05781  

Per trovare la stima di "durata della vita" quando il valore di "peso" è 1, aggiungo (Intercetta) + height = 63.64319

E se avessi un data frame simile, ma in cui una delle variabili esplicative è categoriale?

  data.frame (animal = rep (c ("cane", "volpe", "maiale", "lupo"), 1000)) - >animal.lifeanimal.life $ weight = runif (4000,8,50) animal.life $ lifespan = sample (1:10, sostituire = TRUE) riepilogo (lm (durata della vita ~ 1 + animale + peso, dati = vita animale)) Chiamata: lm (formula = durata della vita ~ 1 + animale + peso, dati = vita animale) Residui: Min 1Q Mediana 3Q Max -4.7677 -2.7796 -0.1025 3.1972 4.3691 Coefficienti: Std. Errore valore t Pr (> | t |) (Intercept) 5.565556 0.145851 38.159 < 2e-16 *** animalfox 0.806634 0.131198 6.148 8.6e-10 *** animalpig 0.010635 0.131259 0.081 0.9354 animalwolf 0.806650 0.131198 6.148 8.6e-10 *** peso 0,007946 0,003815 2,083 0,0373 *
--- Signif. codici: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 '' 1 Errore standard residuo: 2,933 su 3995 gradi di libertà R quadrato multiplo: 0,01933, R quadrato aggiustato: 0,01835 Statistica F : 19.69 su 4 e 3995 DF, valore p: 4.625e-16  

In questo caso, per trovare la stima della "durata" quando il valore di "peso" è 1, è necessario Aggiungo ciascuno dei coefficienti per "animal" all'intercetta: (Intercept) + animalfox + animalpig + animalwolf? O qual è il modo corretto per farlo?

ThanksSverre

i segni del dollaro ti fanno entrare in un ambiente di equazioni ed è per questo che le cose vengono messe in corsivo in modo casuale.
formattazione: per ottenere "codice", rientra di 4 spazi.
se usi il rientro a 4 spazi, puoi inserire stelle e simboli del dollaro e verranno visualizzati come tali. se li usi al di fuori della formattazione del codice, verranno trattati come markup. Se non vuoi una riga "codice" completa, usa i backtick: `questo è un codice con $ e *`
È positivo che tu abbia utilizzato un esempio riproducibile. Potresti rendere l'esempio ancora migliore includendo `set.seed (1)` (o qualsiasi numero ti piaccia) prima di eseguire la generazione di numeri casuali, in modo che tutti ottengano esattamente i tuoi stessi risultati (non che sia molto importante in questo caso, anche se).
Solo due piccoli commenti. Hai scritto "Per trovare la stima della" durata della vita "quando il valore di" peso "è 1, aggiungo (Intercetta) + altezza = 63,64319". Nota che questa è la durata media stimata quando il peso è = 1 ** e l'altezza = 0 **. Probabilmente non è molto significativo. Inoltre, le previsioni al di fuori dell'intervallo dei valori osservati delle variabili indipendenti devono essere trattate con cautela (il peso è compreso tra 50 e 120, quindi anche il peso = 1 non è molto significativo). Solo alcune note a margine e probabilmente cose che già sapevi. Ma per ogni evenienza ...
Wolfgang: Sono a conoscenza di questi punti, ma non fa mai male segnalarli comunque, poiché sono importanti! :) [anche nel caso in cui altri che hanno letto questo thread non ne fossero a conoscenza]
Tre risposte:
#1
+12
Macro
2011-07-22 03:30:40 UTC
view on stackexchange narkive permalink

No, non dovresti sommare tutti i coefficienti insieme. In sostanza hai il modello

$$ {\ rm lifespan} = \ beta_ {0} + \ beta_ {1} \ cdot {\ rm fox} + \ beta_ {2} \ cdot {\ rm pig } + \ beta_ {3} \ cdot {\ rm wolf} + \ beta_ {4} \ cdot {\ rm weight} + \ varepsilon $$

dove, ad esempio, $ {\ rm pig} = 1 $ se l'animale era un maiale e 0 altrimenti. Quindi, per calcolare $ \ beta_ {0} + \ beta_ {1} + \ beta_ {2} + \ beta_ {3} + \ beta_ {4} $ come hai suggerito per ottenere la media complessiva quando $ {\ rm weight} = 1 $ è come dire "se tu fossi un maiale, un lupo e una volpe e il tuo peso fosse 1, qual è la tua durata di vita prevista?". Chiaramente, poiché ogni animale è solo una di quelle cose, non ha molto senso.

Dovrai farlo separatamente per ogni animale. Ad esempio, $ \ beta_ {0} + \ beta_ {2} + \ beta_ {4} $ è la durata di vita prevista per un maiale quando il suo peso è 1.

Macro: ho capito. Ha senso, quindi, trovare il coefficiente medio per i livelli in "animale"? In altre parole, fai (Intercept) + (animalfox + animalpig + animalwolf) / 3. O è valido solo quando c'è un numero uguale di osservazioni per ogni animale nel set di dati?
Penso che tu abbia ragione: sarebbe valido solo se ci fosse un numero uguale in ogni gruppo. Potresti pesarli in modo proporzionale a quanto pesantemente ogni gruppo è rappresentato nel campione se insisti a riassumerlo in un numero.
Quale sarebbe il modo corretto di pesarli? Il motivo per cui "insisto" nel riassumerlo in un numero è che desidero tracciare la linea di regressione solo per una delle variabili su un grafico a dispersione. Ad esempio, nell'esempio human.life sopra, traccerei la linea di regressione per 'weight' specificando l'intercetta della linea ((Intercept) + height = 63.64319) con il suo coefficiente (0.024544). È solo un po 'più complicato nel caso animal.life.
Pensandoci di più, non so come sarebbe interpretabile qualsiasi tipo di media. Potresti semplicemente disegnare tre linee di regressione parallele su un grafico, no? Inoltre, mi sembra che l'effetto del "peso" sarebbe diverso per ogni animale, nel qual caso dovresti far interagire l'animale con il peso, il che porterebbe a tre linee di regressione completamente diverse per ogni animale.
Ma nel caso in cui la variabile per "animale" e la variabile per "peso" siano entrambe significative, ma la loro interazione non lo è, non includerei nemmeno l'interazione nel modello. La regressione multipla stima l'effetto del "peso" indipendentemente dal valore di "animale".
#2
+4
Greg Snow
2011-07-22 20:30:26 UTC
view on stackexchange narkive permalink

La cosa più semplice da fare è usare la funzione di previsione sull'oggetto lm, quindi si prende cura di molti dettagli come convertire un fattore nei valori giusti da sommare. Se stai cercando di capire i pezzi che entrano nella previsione, imposta type = 'terms' e mostrerà i singoli pezzi che si sommano formano la tua previsione.

Nota anche che il modo in cui un fattore viene convertito in variabili dipende da alcune opzioni, l'impostazione predefinita sceglierà un gruppo di riferimento con cui confrontare gli altri gruppi, ma è anche possibile impostarlo su una media e differenze da quella media (o altri confronti di interesse).

L'utilizzo di forecast.lm () è una buona soluzione per un oggetto lm. Sfortunatamente, sto effettivamente adattando un oggetto più piccolo ai miei dati, per il quale non esiste alcuna funzione predittiva () che estragga termini individuali Ho capito bene che il metodo alternativo che stai suggerendo imposterebbe l'intercetta come valore medio, invece di una linea di base (in cui tutti i predittori continui sono impostati su 0 e viene scelto un valore di predittori categoriali)? Se è così, mi piacerebbe sapere come farlo. Quindi potrei semplicemente disegnare la mia linea di regressione come l'intercetta del modello + il coefficiente del mio predittore.
Guarda? Contrasti,? C,? Contr.sum e la parte dei contrasti delle opzioni.
#3
+2
Peter Flom
2011-07-22 15:55:54 UTC
view on stackexchange narkive permalink

Se desideri la durata media della vita quando il peso è 1, puoi semplicemente eliminare "animale" in questa chiamata:

  lm (formula = durata della vita ~ 1 + animale + peso, dati = animal.life)  
Non capisco come possa essere giusto. Se tolgo uno dei predittori ("animale"), l'intercetta, il coefficiente di "peso" e l'errore stimano tutti i cambiamenti. Inoltre, non sto cercando di scoprire quale sia la durata media _effettiva_ per il peso 1 nei dati, ma solo quello che il modello prevede che dovrebbe essere.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...