¿Cómo implementar una variable ficticia usando n-1 variables?

9

Si tengo una variable con 4 niveles, en teoría necesito usar 3 variables ficticias. En la práctica, ¿cómo se lleva a cabo esto realmente? ¿Uso 0-3, uso 1-3 y dejo en blanco los 4? ¿Alguna sugerencia?

NOTA: voy a estar trabajando en R.

ACTUALIZACIÓN: ¿Qué sucedería si solo uso una columna que usa 1-4 correspondiente a AD? ¿Funcionará o introducirá problemas?

Chillido búho
fuente
3
Creo que esta página de UCLA ATS lo explica bastante bien.
caracal
44
Para ser claros, tenga en cuenta que codificar esta variable como enteros 0-3 o 1-4 o 1-3 no es una codificación ficticia y no tendrá el mismo efecto que tres variables ficticias. Sin embargo, un tal incorrecto de codificación voluntad trabajo en las fórmulas de regresión y software y no se pueden emitir plausibles: Se acaba de no corresponder con el modelo previsto. (NB: esto responde a la reciente actualización de la pregunta ) .
whuber

Respuestas:

11

En la práctica, generalmente uno deja que el software de su elección maneje la creación y manipulación de variables ficticias. Hay varias formas de manejarlo; Aquí hay varias posibilidades comunes para un conjunto de datos con cuatro observaciones, una en cada nivel de A, B, C y D. Estas son parametrizaciones diferentes; dan como resultado exactamente el mismo ajuste del modelo, pero con diferentes interpretaciones de los parámetros. Uno puede convertir fácilmente de uno a otro usando álgebra básica; tenga en cuenta que todas son combinaciones lineales entre sí; de hecho, se puede usar cualquier combinación lineal.

Utilice las diferencias del primer nivel (predeterminado en R):

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

Utilice las diferencias del último nivel (predeterminado en SAS):

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

Use contrastes de "suma":

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

Utilice contrastes "helmert":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3
Aaron dejó Stack Overflow
fuente
1
Yo diría, en aras de la pureza, que las variables ficticias , en sentido estricto, son solo el primer y el segundo ejemplo. Las variables ficticias también se conocen como variables de contraste del indicador . Helmert , la desviación y otros tipos alternativos de variables de contraste no deberían llamarse ficticios , para mí.
ttnphns
1
@ttnphns Estoy de acuerdo en que los contrastes de Helmert no constituyen una codificación ficticia desde un punto de vista técnico, pero creo que es perfectamente razonable que se incluyan aquí. No puedo decir si estás señalando esto por razones de claridad o sugiriendo que se cambie la respuesta. @ Aaron +1, esta respuesta sería aún mejor si explicara brevemente cómo diferiría la interpretación de estos diferentes esquemas de codificación.
gung - Restablece a Monica
7

Supongamos que sus niveles variables son A, B, C y D. Si tiene un término constante en la regresión, debe usar tres variables ficticias, de lo contrario, debe tener las cuatro.

Hay muchas formas matemáticamente equivalentes de implementar las variables ficticias. Si tiene un término constante en la regresión, una forma es elegir uno de los niveles como el nivel "de referencia" y comparar los otros tres. Digamos, por razones concretas, que el nivel de línea de base es A. Luego, su primera variable ficticia toma el valor 1 siempre que el nivel sea B y 0 de lo contrario; el segundo toma el valor 1 cuando el nivel es C y 0 de lo contrario, y el tercero toma el valor 1 cuando el nivel es D y 0 de lo contrario. Debido a que su término constante es igual a 1 todo el tiempo, el coeficiente estimado de la primera variable ficticia será la estimación de la diferencia entre el nivel B y A, y de manera similar para las otras variables ficticias.

Si no tiene un término constante, puede usar cuatro variables ficticias, construidas como en el ejemplo anterior, simplemente agregando una para el nivel A.

jbowman
fuente
Buena nota sobre cómo es importante tener un término constante en la regresión.
Aaron dejó Stack Overflow el
5

En R, defina la variable como un factor y la implementará por usted:

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

que vuelve

Call:
lm(formula = y ~ x)

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

La documentación para 'lm', 'factor' y 'fórmula' en R completa algunos de los detalles.

gris
fuente
1
+1 Este es un buen complemento para las respuestas ya enumeradas. También podemos observar que si ya tiene una variable con nombres de grupo (como AD), esto se puede hacer en la llamada a la función de análisis sin un paso adicional: lm(y ~ as.factor(x))
gung - Restablecer Monica
La razón principal por la que estoy buscando el uso de variables ficticias es que estoy trabajando con un gran conjunto de datos con muchos niveles de factores (> 32) y algunos paquetes en R (es decir, randomforest) no pueden manejar factores con muchos niveles, así que estaba intentando para ver si los maniquíes eran una solución.
screechOwl
1
Puede construir la matriz de diseño de regresión usando 'model.matrix': model.matrix (y ~ x) (x sigue siendo un factor) le dará una matriz con las variables ficticias. No estoy familiarizado con el paquete randomforest, pero sospecho que puede dar a cualquier función una matriz de diseño explícita que obtenga de model.matrix, y model.matrix parece funcionar con muchos (es decir, cientos) de niveles.
Gris
ps: es posible que desee editar la pregunta para dejar en claro que le interesan las soluciones que funcionan con muchos niveles. La pregunta se refiere a 4.
Gray
4

Whuber le dijo en los comentarios que codificar una codificación 0-3 o 1-4 en lugar de crear variables ficticias no es lo que desea. Esto es intentarlo. Espero poder explicar qué harías con ese modelo y por qué está mal.

Si codifica una variable X tal que si A entonces X = 1, si B entonces X = 2, si C entonces X = 3, si D entonces X = 4, entonces cuando haga la regresión solo obtendrá un parámetro. Digamos que terminó siendo que el parámetro estimado asociado con X era 2. Esto le indicaría que la diferencia esperada entre la media de B y la media de A es 2. También le dice que la diferencia esperada entre la media de C y la media de B es 2. Algunas para D y C. Estaría forzando las diferencias en las medias para que estos grupos sigan este patrón muy estricto. Ese único parámetro le dice exactamente cómo se relacionan todos sus grupos.

Entonces, si hiciste este tipo de codificación, deberías asumir que no solo obtuviste el orden correcto (porque en este caso si esperas un aumento de A a B, entonces debes esperar un aumento de B a C y de C a D), ¡pero también debes asumir que esa diferencia es la misma!

Si, en cambio, realiza la codificación ficticia sugerida, está permitiendo que cada grupo tenga su propia media, sin restricciones. Este modelo es mucho más sensible y responde las preguntas que desea.

Razón
fuente