6 votos

Tratar con una variable categórica que puede tomar múltiples niveles simultáneamente

Recientemente he publicado una pregunta con muchas partes y me gustaría centrarme en un solo tema que no me hincapié en el post original.

Mis datos es una lista de registros, cada uno representando a un seminario educativo evento. Tengo una variable continua que representa los ingresos aportados por cada seminario, que es la variable de respuesta en mi regresión. También tengo un número de variables categóricas que están actuando como factores/IVs.

Uno de los factores categóricos es el presidente anfitrión del evento. El problema es que a veces más de un altavoz anfitriones de un evento en particular. Hasta la fecha, todos nuestros altavoces han sido elaboradas a partir de un grupo de 154. La mayoría del tiempo, solo se utiliza el altavoz, pero en aproximadamente el 10% de los puntos de datos, dos, tres o incluso cuatro oradores fueron utilizados. En la actualidad, esto se representa en mis datos con las barras ("Altavoz / Altavoz / Altavoz Tres"). He escrito un script de Python que se puede encontrar el promedio de los ingresos en un determinado intervalo de fechas para los seminarios que tome un determinado nivel de una variable categórica (por ejemplo, podría devolver el promedio de ingresos para todos los seminarios en 2008 que para el Altavoz Uno de ellos fue el anfitrión)...mi script puede leer los múltiples altavoz formato de bien, de la lectura de los nombres en los lados opuestos de un " / " como altavoces por separado.

Por desgracia, R no parece ser capaz de hacer nada de eso...me he encontrado con una regresión múltiple en mis datos y, obviamente, se trata de "Altavoz", "Altavoz de Dos" y "Altavoz / Altavoz de Dos" como tres diferentes altavoces. Mis múltiples r-cuadrado valor es de menos de 0.5 así que tengo la esperanza de que la resolución de este problema podría ayudar a mejorar el modelo de...la mejor manera de proceder?

7voto

jldugger Puntos 7490

Los dos modelos vienen a la mente: los ingresos que puede tener una contribución de la presencia de cada altavoz, o puede tener una contribución desde el altavoz de la presencia, ponderados por su participación en el evento. En cualquier caso, la codificación sería similar: para cada altavoz corresponde a una variable que es cero cuando el orador no está involucrado y es distinto de cero cuando se. En el primer modelo, el valor de la variable sería uno cada vez que un hablante está involucrado en un caso y cero en caso contrario. En el segundo modelo, de los que podría ser reponderadas a priori.

Puede probar varios modelos con varios sistemas de ponderación para ver lo que funciona mejor: después de todo, este problema tiene algo de una naturaleza exploratoria.

Que nos deja la cuestión práctica de la codificación de los modelos. Crear una columna para cada altavoz es sencillo, pero las preocupaciones expresadas en los comentarios tienen que ver con la longitud y la complejidad de la fórmula resultante expresiones. Afortunadamente, las fórmulas pueden ser creados de forma dinámica. Aquí está una ilustración. En primer lugar, vamos a crear algunos de los datos simulados. En cada fila de al menos uno de los oradores y, generalmente, dos o tres altavoces están involucrados:

set.seed(17)
n.records <- 1000
n.speakers <- 154
i <- c(rep(1,3), rep(0, n.speakers-2))
x.matrix <- sapply(1:n.records, function(j) sample(i, n.speakers))
x <- as.data.frame(t(x.matrix))

Pongamos nombre a las columnas "Speaker1", "Speaker2", etc (y mantener esta lista de nombres para más tarde):

colnames(x) <- colnames <- lapply(1:n.speakers, function(i) sprintf("Speaker%d",i))

El tiro en una variable de respuesta:

x$y <- rnorm(n.records)

Vamos a ver cómo esta respuesta depende del altavoz de datos. Para hacer esto, necesitamos crear una fórmula en la columna de nombres que conservan anterior:

formula <- as.formula(paste("y ~", paste(colnames, collapse="+"))
fit <- lm(formula, data=x)
summary(fit)

No hay ningún problema: R maneja una fórmula de esta longitud con aplomo. Extender esta fórmula para incluir otras variables es simple; por ejemplo, en el código del resto y péguelo en el final de esta calculado de la fórmula.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X