Perché la colonna intercetta in model.matrix sostituisce il primo fattore?


9

Sto cercando di convertire la colonna del mio fattore in variabili fittizie:

str(cards$pointsBin)
# Factor w/ 5 levels ".lte100",".lte150",..: 3 2 3 1 4 4 2 2 4 4 ...

labels <- model.matrix(~ pointsBin, data=cards)

head(labels)

#     (Intercept) pointsBin.lte150 pointsBin.lte200 pointsBin.lte250 pointsBin.lte300
# 741           1                0                0                0                0
# 407           1                1                0                0                0
# 676           1                0                0                1                0
# 697           1                1                0                0                0
# 422           1                0                1                0                0
# 300           1                0                1                0                0

Non esiste una colonna per il primo valore di my factor ( ".lte100"), che è come la prima riga dovrebbe essere classificata come. Come posso recuperare questi dati? E cosa significa la colonna Intercetta che sembra essere tutta 1?


3
Quando si hanno variabili fittizie "K", il modello risultante avrà a.) Il termine di intercettazione (che è una colonna di quelle) e b.) Colonne aggiuntive "K-1". Il motivo è perché altrimenti le colonne della matrice risultante non sarebbero linearmente indipendenti (e, di conseguenza, non saresti in grado di fare OLS ).
Steve S,

2
Perché 'non significativo'? È lo stesso modello con la stessa bontà di adattamento, parametrizzato in modo diverso.
Wolfgang,

2
@digitgopher: quando esegui una regressione e finisci con un modello come questo: y^=β0+β1x1, tecnicamente stai finendo con un modello come questo: y^=β0x0+β1x1, dove questo nuovo termine x0è sempre uguale a "1" (da cui la colonna di quelli). Se dovessi eliminare questa colonna di quelle quando esegui una regressione regolare, finiresti con un modello distorto poiché, in effetti, forzeresti ogni singolo modello attraverso l'origine.
Steve S

2
@SteveS: In effetti R è così amichevole che se provi a rimuovere l'intercettazione - 1quando hai un singolo predittore categorico rappresentato come un fattore (come in questa domanda), assumerai che non intendi davvero questo e passa all'utilizzo di sum- codifica a zero; che ovviamente è solo una diversa parametrizzazione. Troppo amichevole, se me lo chiedi.
Scortchi - Ripristina Monica

2
@SteveS: grazie. Avrei dovuto controllare: passa alla codifica cellulare. Non fa ciò che ci si potrebbe aspettare, che è adatto al modello forzato attraverso l'origine a cui giustamente si mette in guardia (lo farà comunque, quando le colonne sono di tipo numerico).
Scortchi - Ripristina Monica

Risposte:


10

Considera quanto segue:

require(mlbench)

data(HouseVotes84, package = "mlbench")
head(HouseVotes84)

labels <- model.matrix(~ V1, data=HouseVotes84)
head(labels)

labels1 <- model.matrix(~ V1+1, data=HouseVotes84)
head(labels1)

labels0 <- model.matrix(~ V1+0, data=HouseVotes84)
head(labels0)

labels_1 <- model.matrix(~ V1-1, data=HouseVotes84)
head(labels_1)

I primi due comandi sono identici. Gli ultimi due comandi specificano di non produrre l'intercettazione e mantengono le due variabili fittizie prodotte.


1
Grazie - questo spiega il codice che volevo. Ma non spiega perché o aiutarmi a capire.
digitgopher

2
@digitgopher: vedi ats.ucla.edu/stat/r/library/contrast_coding.htm per una spiegazione della codifica a livello di riferimento e altri schemi di codifica.
Scortchi - Ripristina Monica
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.