6 votos

¿Cómo determinar cuántas variables y qué tipo de variables tiene una tabla de datos?

Aquí tienes un ejemplo sobre lo que no entiendo. En el pasado me limitaba a contar columnas para determinar cuántas variables tiene una tabla, pero me di cuenta de que eso es totalmente insuficiente.

Por ejemplo, miro la siguiente tabla y pensaría: "Eso tiene tres variables porque hay tres columnas. Hay dos variables categóricas, Season y Type, y una variable numérica, Dollars".

    ['Season',  'Type',     'Dollars'],
    ['Winter',  'Sales',     1000],
    ['Winter',  'Expenses',  400],
    ['Winter',  'Profit',    250],
    ['Spring',  'Sales',     1170],
    ['Spring',  'Expenses',  460],
    ['Spring',  'Profit',    250],
    ['Summer',  'Sales',     660],
    ['Summer',  'Expenses',  1120],
    ['Summer',  'Profit',    300],
    ['Fall',    'Sales',     1030],
    ['Fall',    'Expenses',  540],
    ['Fall',    'Profit',    350]

Sin embargo, luego puedo mirar la siguiente tabla, que contiene exactamente la misma información, y pensar: "Eso tiene cuatro variables porque hay cuatro columnas: una variable categórica, Season, y tres variables numéricas, Sales, Expenses y Profit".

    ['Season',  'Sales', 'Expenses', 'Profit'], 
    ['Winter',  1000,    400,        200],
    ['Spring',  1170,    460,        250],
    ['Summer',  660,     1120,       300],
    ['Fall',    1030,    540,        350]

Entonces, ¿cuál es la verdad? ¿Y cuál es el método correcto para determinar cuántas y qué tipo de variables tiene un conjunto de datos? ¿Existe una forma adecuada de estructurar los datos para obtener la respuesta correcta?

5 votos

Uno podría argumentar, sobre la base de este buen ejemplo, que los datos no tienen "variables" inherentes en absoluto, porque el número de columnas depende de cómo esos datos están formateados lógicamente. (Busca información sobre las primeras a las quintas "formas normales" para bases de datos relacionales, por ejemplo.) Las variables - y por lo tanto su cantidad - son determinadas por tu modelo.

1 votos

+1. Estoy curioso por ver referencias sobre la inferencia del tipo de una variable (ordinal/categórica/continua).

3 votos

Como dijo @Stefan en su buena respuesta, el primer formato de conjunto de datos se conoce como "largo" y el segundo se conoce como "ancho". Son equivalentes en cuanto a información, siempre y cuando la unidad de muestra en este fragmento, en este caso, sea la Temporada (juega el papel de variable ID). Algunos análisis son más fáciles de hacer o incluso pueden requerir una estructura "larga" (por ejemplo, modelos lineales generalizados, incluidos los GEE). Otros análisis requerirían una estructura "ancha" (como el ANOVA multivariante) o son preferidos (como hacer una prueba t pareada).

5voto

Derpy3000 Puntos 33

Probablemente no hay una respuesta única correcta a la pregunta "¿cuántas variables tiene este conjunto de datos?", ya que se puede estructurar los datos de diferentes maneras como has mostrado, lo que lleva a diferentes números de columnas.

Sin embargo, probablemente haya una buena respuesta a "¿qué estructura haría que este conjunto de datos fuera más adecuado para el análisis?", y probablemente sería la primera versión que presentaste.

Hadley Wickham ha escrito un poco sobre esto en lo que él llama "datos ordenados" (ver este documento). Cuando un conjunto de datos está ordenado, está en su forma más apta para ser analizado. Es decir, está en su forma más básica para facilitar y garantizar que se apliquen transformaciones de manera fácil y consistente, para que se pueda realizar un análisis posterior. Él argumenta que las mejores formas de estructurar un conjunto de datos para su análisis son cuando:

  1. Cada variable forma una columna.
  2. Cada observación forma una fila.
  3. Cada tipo de unidad observacional forma una tabla.

El primer conjunto de datos que presentaste, el que tiene 3 columnas, encajaría como ordenado según estas pautas.

También describe 5 formas comunes en las que los conjuntos de datos se vuelven desordenados:

  1. Los encabezados de las columnas son valores, no nombres de variables.
  2. Varias variables se almacenan en una sola columna.
  3. Las variables se almacenan tanto en filas como en columnas.
  4. Se almacenan múltiples tipos de unidades observacionales en la misma tabla.
  5. Una sola unidad observacional se almacena en múltiples tablas.

La segunda versión de tu conjunto de datos, que tiene cuatro columnas, presenta el problema #1. Esto se puede ver en la Sección 3.1 de su documento donde se refiere al conjunto de datos sobre religión e ingresos.

Nuevamente, probablemente no hay una respuesta "correcta" a la pregunta de cuántas variables tiene este conjunto de datos, pero en cuanto a la pregunta de cuántas columnas debería tener este conjunto de datos, la respuesta correcta sería 3. Los datos ordenados facilitan y brindan una forma consistente de realizar transformaciones adicionales en un conjunto de datos para llevarlo a la forma futura que sea necesaria para el análisis. Por ejemplo, tu segundo conjunto de datos con 4 columnas se puede crear fácilmente con un group_by de Pandas o un aggregate de R a partir del primer conjunto de datos.

0 votos

Gracias, su respuesta fue muy útil y el documento al que enlazó aclaró algunas otras cosas sobre las que también tenía dudas. Ojalá hubiera una respuesta correcta única, pero al menos puede usar "largo" o "ancho" para crear un estándar en el que basar el conteo de sus variables.

4voto

Stefan Puntos 737

@nick-eng prácticamente respondió todo (+1)! Solo pensé que podría añadir algunos ejemplos para ilustrar sus puntos y mostrar por qué el formato largo (tu primera tabla) es más eficiente para trabajar, especialmente cuando estás trabajando con los paquetes R de Hadley Wickham como ggplot2 y plyr. Pero debo decir que a menudo prefiero utilizar el formato ancho al reportar valores promedio en manuscritos.

-- Inicio edición --

Como @ttnphns señala acertadamente (ver comentario bajo la pregunta del OP), muchos análisis requieren que los datos estén en formato largo, mientras que los análisis multivariados suelen necesitar que las variables dependientes estén como columnas individuales. Esto también se aplica a medidas repetidas cuando se analizan con la función Anova del paquete car.

-- Fin edición --

Usé tu primera tabla y la leí en R. Con la función dput(), puedo hacer que R imprima los datos en la consola desde donde los puedo copiar y pegar aquí para que otras personas puedan trabajar con ellos fácilmente:

d <- structure(list(Season = structure(c(4L, 4L, 4L, 2L, 2L, 2L, 3L, 
3L, 3L, 1L, 1L, 1L), .Label = c("Fall", "Spring", "Summer", "Winter"
), class = "factor"), Type = structure(c(3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L), .Label = c("Expenses", "Profit", 
"Sales"), class = "factor"), Dollars = c(1000L, 400L, 250L, 1170L, 
460L, 250L, 660L, 1120L, 300L, 1030L, 540L, 350L)), .Names = c("Season", 
"Type", "Dollars"), class = "data.frame", row.names = c(NA, -12L
))

Crea un gráfico usando ggplot2:

require(ggplot2)
ggplot(d, aes(x=Season, y=Dollars)) + geom_bar(stat="identity", fill="grey") +
# Especialmente para la siguiente línea necesitas los datos en formato largo
facet_wrap(~Type)

descripción de la imagen

Resumir datos y calcular promedio y error estándar:

require(plyr)
d.season <- ddply(d, .(Season), summarise, MEAN=mean(Dollars),
              ERROR=sd(Dollars)/sqrt(length(Dollars)))

Crea otro gráfico usando ggplot2 utilizando los datos resumidos d.season:

ggplot(d.season, aes(x = Season, y = MEAN)) + 
geom_bar(stat = "identity", fill = "grey") +
geom_errorbar(aes(ymax = MEAN + ERROR, ymin = MEAN - ERROR), width = 0.2) +
labs(y = "Dollars")

descripción de la imagen

Ahora, cambiando entre el formato ancho y largo usando las funciones dcast() y melt() del paquete reshape2. Ten en cuenta que los datos ahora estarán ordenados alfabéticamente:

require(reshape2)

De largo a ancho:

d.wide <- dcast(d, Season ~ Type, value.var = "Dollars")
> d.wide
  Season Expenses Profit Sales
1   Fall      540    350  1030
2 Spring      460    250  1170
3 Summer     1120    300   660
4 Winter      400    250  1000

De ancho a largo:

d.long <- melt(d.wide, id.vars = "Season", variable.name = "Type", value.name = "Dollars")
> d.long
   Season     Type   Dollars
1    Fall Expenses   540
2  Spring Expenses   460
3  Summer Expenses  1120
4  Winter Expenses   400
5    Fall   Profit   350
6  Spring   Profit   250
7  Summer   Profit   300
8  Winter   Profit   250
9    Fall    Sales  1030
10 Spring    Sales  1170
11 Summer    Sales   660
12 Winter    Sales  1000

Compara con el marco de datos original (no ordenado alfabéticamente):

> d
   Season     Type Dollars
1  Winter    Sales    1000
2  Winter Expenses     400
3  Winter   Profit     250
4  Spring    Sales    1170
5  Spring Expenses     460
6  Spring   Profit     250
7  Summer    Sales     660
8  Summer Expenses    1120
9  Summer   Profit     300
10   Fall    Sales    1030
11   Fall Expenses     540
12   Fall   Profit     350

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