Come implementare la variabile fittizia usando le variabili n-1?


9

Se ho una variabile con 4 livelli, in teoria devo usare 3 variabili fittizie. In pratica, come viene effettivamente realizzato? Uso 0-3, utilizzo 1-3 e lascio vuoto il 4? Eventuali suggerimenti?

NOTA: lavorerò in R.

AGGIORNAMENTO: Cosa accadrebbe se uso solo una colonna che utilizza 1-4 corrispondente a AD? Funzionerà o introdurrà problemi?


3
Penso che questa pagina dell'UCLA dell'ATS lo spieghi abbastanza bene.
Caracal,

4
Per essere chiari, nota che codificare questa variabile come numeri interi 0-3 o 1-4 o 1-3 non è un codice fittizio e non avrà lo stesso effetto di tre variabili fittizie. Tuttavia, come ad un errato codifica volontà lavoro nelle formule di regressione e software e non ci sarà emesso plausibile: esso semplicemente non corrispondono al modello previsto. (NB: questo risponde al recente aggiornamento della domanda. )
whuber

Risposte:


11

In pratica, di solito si lascia che il proprio software preferito gestisca la creazione e la manipolazione delle variabili fittizie. Esistono diversi modi in cui potrebbe essere gestito; qui ci sono diverse possibilità comuni per un set di dati con quattro osservazioni, una per ogni livello di A, B, C e D. Queste sono parametrizzazioni diverse; risultano esattamente nello stesso modello, ma con interpretazioni diverse dei parametri. Si può facilmente convertire da uno all'altro usando l'algebra di base; notare che sono tutte combinazioni lineari tra loro; infatti, è possibile utilizzare qualsiasi combinazione lineare.

Usa le differenze dal primo livello (impostazione predefinita in R):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

Usa le differenze rispetto all'ultimo livello (impostazione predefinita in SAS):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

Usa i contrasti "somma":

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

Usa i contrasti "helmert":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3

1
Direi, per motivi di purezza, che variabili fittizie , in senso stretto, sono solo il primo e il secondo esempio. Le variabili fittizie sono anche note come variabili di contrasto dell'indicatore . Per me Helmert , la deviazione e altri tipi alternativi di variabili di contrasto non dovrebbero essere definiti fittizi .
ttnphns,

1
@ttnphns Concordo sul fatto che i contrasti di Helmert non costituiscano una codifica fittizia dal punto di vista tecnico, ma penso che sia perfettamente ragionevole per loro essere inclusi qui. Non posso dire se lo stai sottolineando per motivi di chiarezza o suggerendo che la risposta sia cambiata. @ Aaron +1, questa risposta sarebbe ancora migliore se si spiegasse brevemente in che modo l'interpretazione di questi diversi schemi di codifica differirebbe.
gung - Ripristina Monica

7

Supponiamo che i tuoi livelli variabili siano A, B, C e D. Se hai un termine costante nella regressione, devi usare tre variabili fittizie, altrimenti devi averne tutte e quattro.

Esistono molti modi matematicamente equivalenti per implementare le variabili fittizie. Se hai un termine costante nella regressione, un modo è quello di scegliere uno dei livelli come livello di "base" e confrontare gli altri tre con esso. Diciamo, per concretezza, che il livello di base è A. Quindi la tua prima variabile fittizia assume il valore 1 ogni volta che il livello è B e 0 altrimenti; il secondo assume il valore 1 ogni volta che il livello è C e 0 altrimenti, e il terzo assume il valore 1 ogni volta che il livello è D e 0 altrimenti. Poiché il termine costante è sempre uguale a 1, il coefficiente stimato della prima variabile fittizia sarà la stima della differenza tra il livello B e A e, analogamente, per le altre variabili fittizie.

Se non hai un termine costante, puoi semplicemente usare quattro variabili fittizie, costruite come nell'esempio precedente, aggiungendone solo una per il livello A.


Bella nota su quanto sia importante avere un termine costante nella regressione.
Aaron ha lasciato Stack Overflow il

5

In R, definisci la variabile come fattore e la implementerà per te:

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

che ritorna

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

La documentazione per 'lm', 'factor' e 'formula' in R riempie alcuni dettagli.


1
+1 Questo è un bel complemento alle risposte già elencate. Possiamo anche notare che se hai già una variabile con nomi di gruppo (come AD), questo può essere fatto nella chiamata della funzione di analisi senza un passaggio aggiuntivo: lm(y ~ as.factor(x))
gung - Ripristina Monica

Il motivo principale per cui sto esaminando l'utilizzo di variabili fittizie è che sto lavorando con un set di dati di grandi dimensioni con molti livelli di fattore (> 32) e alcuni pacchetti in R (ovvero la foresta casuale) non sono in grado di gestire i fattori con molti livelli, quindi stavo provando per vedere se i manichini erano una soluzione.
screechOwl,

1
Puoi costruire la matrice del disegno di regressione usando 'model.matrix': model.matrix (y ~ x) (x è ancora un fattore) ti darà una matrice con le variabili fittizie. Non ho familiarità con il pacchetto randomforest, ma sospetto che tu possa dare a qualsiasi funzione una matrice di progettazione esplicita che ottieni da model.matrix e model.matrix sembra funzionare con molti (cioè centinaia) di livelli.
Gray,

ps: potresti voler modificare la domanda per chiarire che tieni alle soluzioni che funzionano con molti livelli. La domanda è di circa 4.
Gray, il

4

whuber ti ha detto nei commenti che codificare una codifica 0-3 o 1-4 invece di creare variabili fittizie non è quello che desideri. Questo è un tentativo: spero di spiegare cosa faresti con quel modello e perché è sbagliato.

Se codifichi una variabile X in modo tale che se A quindi X = 1, se B quindi X = 2, se C quindi X = 3, se D quindi X = 4, quando esegui la regressione otterrai solo un parametro. Diciamo che alla fine il parametro stimato associato a X era 2. Questo ti direbbe che la differenza attesa tra la media di B e la media di A è 2. Ti dice anche che la differenza attesa tra la media di C e la media di B è 2. Alcuni per D e C. Dovresti forzare le differenze nei mezzi per questi gruppi a seguire questo schema molto rigoroso. Quel parametro indica esattamente come tutti i gruppi si riferiscono l'uno all'altro.

Quindi, se hai fatto questo tipo di codifica, dovresti presumere che non solo hai ottenuto l'ordinamento corretto (perché in questo caso se prevedi un aumento da A a B, devi aspettarti un aumento da B a C e da C a D) ma devi anche supporre che quella differenza sia la stessa!

Se invece esegui la codifica fittizia che ti è stata suggerita, stai permettendo a ciascun gruppo di avere la propria media, senza restrizioni. Questo modello è molto più sensato e risponde alle domande che desideri.

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.