Análisis multivariado para Big Data

Análisis multivariado para Big Data
La información disponible para la toma de decisiones explotó en los últimos años, y lo continuará haciendo en el futuro, probablemente aún más rápidamente. Pero, ¿qué hacemos con este tsunami de información? ¿cómo debemos analizarla?Alguna de esta información puede ser analizada y entendida con estadística simple, uni- bi-variada, pero en much...
Continuar leyendo
Valora este artículo del blog:
199 Hits
0 Comentarios

Cómo calcular resúmenes por grupo rápidamente

Cómo calcular resúmenes por grupo rápidamente

¿Sabes cómo calcular resúmenes estadísticos rápidos sin necesidad de utilizar bucles o crear funciones propias? o ¿cómo hacer para que estos resúmenes se calculen en cada grupo de datos por separado?


En R tenemos varias funciones que nos permiten repetir una misma tarea sobre unos objetos sin la necesidad de tener que escribir un bucle ni crear una función.

En una única línea de código y de manera más eficiente!

Por ejemplo, podemos pedirle a R que calcule la media de todas las columnas de nuestra base de datos en una única línea de comando.

Hoy veremos la familia de funciones "apply", la función "by", "aggregate", "ddlyr" y "summaryBy".


¿Cómo trabajan estas funciones?

Pues, cada una se aplica para objetos distintos (vectores, data frames, matrices, listas, etc.) y nos dan un resultado en un formato distinto.

(Casi) todo en R es un objeto, pero... ¡existen distintos tipos de objetos!

Tipos de objetos: 

  • vectores (un conjunto de elementos del mismo tipo) o factores (si está formado por categorías -categórico-). Por ejemplo, x={hombre, mujer}
  • conjuntos de vectores en 2D llamados matrices o data frames (si la matriz tiene datos de distinto tipo -numéricos y categóricos-), Por ejemplo, una matriz donde en las filas tenemos la respuesta de cada sujeto y en las columnas las preguntas que se le hicieron.
  • conjuntos de vectores en más de 2D llamados arrays. Si en el ejemplo anterior tenemos una matriz de datos para cada comunidad autónoma, entonces podemos construir un array.
  • o listas (lista de varios tipos de elementos). Si además de las matrices de datos agregamos "metadata", es decir, información como la fecha de la toma de la muestra, etc.




Entonces, según qué tipo de objeto de entrada (argumento) y salida vayamos a utilizar, podemos elegir entre distintas funciones para realizar nuestros resúmenes estadísticos.

En la siguiente tabla puedes ver un resumen de las principales funciones,  luego veremos su aplicación en R.



¿Qué función elegir para resumir nuestros datos?


FAMILIA "APPLY"

La familia de funciones "apply" se diferencian según el tipo de datos de entrada y el resultado de su aplicación del siguiente modo:

Veamos algunos ejemplos con los datos "iris":

> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 …


APPLY

  • "apply" se utiliza cuando queremos aplicar una función a las filas o columnas de una matriz o data frame (odimensión de un array); generalmente no funciona para data frames a no ser que se transforme a matriz previamente.
> apply(iris[,-5],2,mean)
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
> apply(iris[,-5], 2, fivenum)
Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,] 4.3 2.0 1.00 0.1
[2,] 5.1 2.8 1.60 0.3
[3,] 5.8 3.0 4.35 1.3
[4,] 6.4 3.3 5.10 1.8
[5,] 7.9 4.4 6.90 2.5


SAPPLY

  • "sapply" se utiliza cuando queremos aplicar una función a cada elemento de una lista o data frame y obtener unvector, matriz o una lista simplificado como resultado.
> sapply(iris[,-5], mean)
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
> sapply(iris[,-5], fivenum)
Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,] 4.3 2.0 1.00 0.1
[2,] 5.1 2.8 1.60 0.3
[3,] 5.8 3.0 4.35 1.3
[4,] 6.4 3.3 5.10 1.8
[5,] 7.9 4.4 6.90 2.5


LAPPLY

  • "lapply" se utiliza cuando queremos aplicar una función a cada elemento de una lista y obtener otra lista como resultado.
> lapply(iris[,-5],mean)
$Sepal.Length
[1] 5.843333
$Sepal.Width
[1] 3.057333
$Petal.Length
[1] 3.758
$Petal.Width
[1] 1.199333
> lapply(iris[,-5], fivenum)
$Sepal.Length
[1] 4.3 5.1 5.8 6.4 7.9
$Sepal.Width
[1] 2.0 2.8 3.0 3.3 4.4
$Petal.Length
[1] 1.00 1.60 4.35 5.10 6.90
$Petal.Width
[1] 0.1 0.3 1.3 1.8 2.5


TAPPLY

  • "tapply" se utiliza cuando queremos aplicar una función a subconjuntos de un vector (estos subconjuntos se definen con un vector o factor) y obtener un vector como resultado.
> tapply(iris$Petal.Length, iris$Species, mean)
setosa versicolor virginica
1.462 4.260 5.552


OTRAS

  • "vapply" es similares a las dos anteriores pero podemos decirle a R qué tipo de objeto queremos como resultado.
> vapply(iris[,-5], fivenum, c(Min.=0, "1st Qu."=0, Median=0, "3rd Qu."=0, Max.=0))
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. 4.3 2.0 1.00 0.1
1st Qu. 5.1 2.8 1.60 0.3
Median 5.8 3.0 4.35 1.3
3rd Qu. 6.4 3.3 5.10 1.8
Max. 7.9 4.4 6.90 2.5
  • "mapply" se utiliza cuando queremos aplicar una función a varios tipos de estructuras (e.g. vectores, listas), a sus primeros elementos, luego a los segundos, etc. y obtener como resultado un vector o array.
  • "rapply" se utiliza cuando queremos aplicar una función a cada elemento de un objeto con estructura de lista anidada (una lista dentro de una lista), de manera recursiva.

Las funciones "by" y "aggregate".

Ambas son similares a "tapply" pero con algunas pequeñas diferencias, veámoslas!


BY

La diferencia entre "by" y "tapply" es:

1) la clase de resultado, porque "by" devuelve una lista.

2) algunas peculiaridades respecto al tamaño de los objetos.


> tapply(iris$Sepal.Width , iris$Species , mean )
setosa versicolor virginica
3.428 2.770 2.974
>
> by(iris$Sepal.Width , iris$Species , mean )
iris$Species: setosa
[1] 3.428
-------------------------------------------------------
iris$Species: versicolor
[1] 2.77
-------------------------------------------------------
iris$Species: virginica
[1] 2.974

3) La función "by" funciona también cuando el tamaño de los 2 primeros argumentos son distintos, cuestión no resuelta por tapply.

 tapply(iris, iris$Species, summary )
Error in tapply(iris, iris$Species, summary):
arguments must have same length

AGGREGATE

La función "aggregate" también se comporta de manera similar a "tapply" aunque:

1) el segundo argumento de "aggregate" debe ser una lista, mientras que para "tapply" puede ser una lista o no.

2) y el resultado es de clase distinta, para "aggregate" el resultado es un "data frame" mientras que para tapply es un "array":

> tapply(iris$Sepal.Length , iris$Species , mean) 
setosa versicolor virginica
5.006 5.936 6.588
> aggregate(iris$Sepal.Length , list(iris$Species), mean)
Group.1 x
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588

3) La función "aggregate" también tiene la ventaja de la opción "subset" que permite seleccionar un subconjunto de datos.

4) La función "aggregate" es más sencilla de utilizar porque permite el formato de fórmula:

> aggregate(Sepal.Length ~ Species, data = iris, mean)
Species Sepal.Length
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588

DOS FUNCIONES AÚN MÁS SENCILLAS

Además de aggregate, by y tapply, podemos utilizar 2 funciones más rápidas para realizar cálculos por grupos incluso utilizando fórmulas! 

Estas funciones se encuentran en paquetes extra de R (no en los que vienen instalados por defecto, como ocurre en las funicones anteriores) son: 

  • ddplyr (del paquete plyr) y 
  • summaryBy (del paquete doBy).


DDPLYR

La función "ddply" del paquete "plyr" permite aplicar una función a un data frame para cada subconjunto de datos que le indiquemos y combinar los resultados en otro data frame (además sirve para dividir un conjunto de datos)

> library(plyr)
> ddply(iris, "Species", colwise(mean))
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
> ddply(iris, "Species",summarise,N=length(iris$Sepal.Length),mean=mean(iris$Sepal.Length),sd=sd(iris$Sepal.Length))
Species N mean sd
1 setosa 150 5.843333 0.8280661
2 versicolor 150 5.843333 0.8280661
3 virginica 150 5.843333 0.8280661

SUMMARYBY

La función "summaryBy" del paquete "doBy" nos permite calcular resúmenes estadísticos por grupo utilizando un formato de fórmula.

> summaryBy(Sepal.Length + Sepal.Width + Petal.Length + Petal.Width ~ Species, data=iris, FUN=mean)
Species Sepal.Length.mean Sepal.Width.mean Petal.Length.mean
1 setosa 5.006 3.428 1.462
2 versicolor 5.936 2.770 4.260
3 virginica 6.588 2.974 5.552
Petal.Width.mean
1 0.246
2 1.326
3 2.026
> summaryBy(Sepal.Length ~ Species, data=iris, FUN=c(mean,sd))
Species Sepal.Length.mean Sepal.Length.sd
1 setosa 5.006 0.3524897
2 versicolor 5.936 0.5161711
3 virginica 6.588 0.6358796

También existe:

  • summarize() en el paquete Hmisc

Espero que estos atajos para los cálculos te hayan gustado y te ahorren mucho tiempo, saludos!

Continuar leyendo
Valora este artículo del blog:
159 Hits
0 Comentarios

Podemos cambiar las estadísticas

Podemos cambiar las estadísticas

"Por un mundo donde seamos socialmente iguales, humanamente diferentes y totalmente libres"

por Rosa Luxeburgo
Continuar leyendo
Valora este artículo del blog:
174 Hits
0 Comentarios

Trucos (chuletas) para aprender R + RStudio

Trucos (chuletas) para aprender R + RStudio
¿Aún no los conoces? RStudio ha creado estas hojas de trucos que facilitan el aprendizaje y el uso de algunos de nuestros paquetes favoritos.  R básicoVectores, Matrices, Listas, Marcos de Datos, Funciones y más en base R por Mhairi McNeill. Actualizado 03/15. R avanzadoAmbientes, Estructuras de datos, Funciones, S...
Continuar leyendo
Valora este artículo del blog:
614 Hits
3 Comentarios

Las matemáticas (o la estadística) del Amor

Hoy no es un día cualquiera, ojalá lo estés festejando junto a su media naranja o sea el día ideal para encontrarla.Sea cual fuera tu situación, hoy voy a dejarte algunas reflexiones acerca de las matemáticas (o la estadística) del Amor. "Las matemáticas de amor" es el título de la charla TED de Hannah Fry, matemática británica ...
Continuar leyendo
Valora este artículo del blog:
385 Hits
0 Comentarios

Día Internacional de la Mujer en la Ciencia 11 de febrero

Día Internacional de la Mujer en la Ciencia 
11 de febrero


¡Hoy celebramos el acceso y la participación plena y equitativa en la ciencia para las mujeres!



Gracias a un gran esfuerzo de la comunidad internacional la participación de las mujeres en la ciencia es cada vez mayor. 

Sin embargo, muchas mujeres siguen enfrentándose a barreras que les impiden participar plenamente en esta disciplina

Por ello, hoy queremos sensibilizar, concienciar, llamar la atención, señalar que existe un problema sin resolver, un asunto importante y pendiente en las sociedades para que, a través de esa sensibilización, los gobiernos y los estados actúen y tomen medidas o para que los ciudadanos lo exijan a sus representantes (UN, 2017).

Si quieres conocer todas las actividades y materiales que conmemoran el día Internacional de la Mujer y la niña en Ciencia en España puedes visitar la página del 11defebrero.org  ​(aquí).


En cifras de las Naciones Unidas

De acuerdo con un estudio realizado en 14 países, la probabilidad de que las estudiantes terminen una licenciatura, una maestría y un doctorado en alguna materia relacionada con la ciencia es del 18%, 8% y 2%, respectivamente, mientras que la probabilidad para los estudiantes masculinos es del 37%, 18% y 6%.

[Ver la resolución en el documento A/RES/70/212 ].

La brecha de género en Ciencias

¿Dónde crece la participación de las mujeres en este sector y donde están subrepresentadas?

Utilizando la información de personal (HC), el número total de personas empleadas en i+D tanto a tiempo parcial como a tiempo completo, la UNESCO presenta las estadísticas del 2009 (UNESCO, 2009):

  • 45.2% en Latinoamérica y el Caribe (LAC); 
  • 34.0% en Europa 
  • 34.5% en Africa; 
  • 18.9% en Asia; 
  • 39.2% en Oceania; 
  • No hay información para EEUU.

Figura 1. Representa el número de mujeres investigadoras en relación al total mundial.

Y si nos vamos a datos más disgregados encontramos...

Figuras 2-4. Representan la participación de las mujeres en la Ciencia como porcentaje del total de investigadores.


Queda mucho camino por recorrer, ¡súmate!

Continuar leyendo
Valora este artículo del blog:
246 Hits
0 Comentarios

¿Cómo validar tu modelo de regresión?

¿Cómo validar tu modelo de regresión?
¿Te has preguntado alguna vez si el modelo de regresión que has ajustado es apropiado para tus datos? Hoy te traigo las principales claves para evaluar tu modelo de regresión, solo necesitarás definir los residuos del modelo y evaluar sus gráficos. ¿Qué son los residuos?Los residuos (o errores) son la diferencia entre los valores observados y...
Continuar leyendo
Valora este artículo del blog:
1066 Hits
10 Comentarios

Errores comunes que puedes evitar con un simple gráfico

Errores comunes que puedes evitar con un simple gráfico
Recuerda lo siguiente:​¡Realizar gráficos apropiados es parte esencial del análisis de datos!  Hace tiempo que quería enseñarte un ejemplo muy bonito que retrata esta cuestión. Se llama "el cuarteto de Anscombe" en honor al estadístico Anscombe que creó 4 conjuntos de datos en los años 70 para convencer a sus colegas de la ...
Continuar leyendo
Valora este artículo del blog:
608 Hits
2 Comentarios

Está claro, ¡tienes que aprender R ya!

Está claro, ¡tienes que aprender R ya!
Figura 1. Logo del Software R.R es el software de referencia en el mundo de la Estadística, la herramienta más potente del mercado. Numerosas empresas y universidades utilizan el software R para sus análisis pero, ¿qué es realmente R? y ¿por qué me debería interesar?. Gratuito.Flexible y actualizado: puede actualizarse fácilmente mediante paquete...
Continuar leyendo
Valora este artículo del blog:
1304 Hits
4 Comentarios

¿CÓMO LIDIAR CON LOS DATOS ATÍPICOS (OUTLIERS)?

¿CÓMO LIDIAR CON LOS DATOS ATÍPICOS (OUTLIERS)?
UNA PREGUNTA CON TRAMPASi te pregunto qué medida describe mejor un conjunto de datos, ¿qué respondes?La mayoría de las personas diría rápidamente… ¡la media!, pero veamos si es la respuesta correcta. Supongamos que tenemos los siguientes datos:10,10,11,12,12,13,14,15,15,15,16,18,19Calculamos su media, que es 13.84615.¿Pero qué pasa si cambiamos un ...
Continuar leyendo
Valora este artículo del blog:
1500 Hits
11 Comentarios

LOS 7 PECADOS ESTADÍSTICOS

LOS 7 PECADOS ESTADÍSTICOS

Hoy quiero hablarte de 7 errores que estás cometiendo en tus análisis estadísticos sin seguramente darte cuenta. 

¡Descubre cuáles son estos 7 errores ahora mismo!


Continuar leyendo
Valora este artículo del blog:
1537 Hits
0 Comentarios

¿CÓMO LOGRAR UN ANÁLISIS DE DATOS PRECISO?  LA ESTADÍSTICA ROBUSTA.

¿CÓMO LOGRAR UN ANÁLISIS DE DATOS PRECISO? 
LA ESTADÍSTICA ROBUSTA.
Cualquier investigador habrá escuchado hablar alguna vez de las técnicas paramétricas clásicas (la t de Student, el ANOVA, la regresión por mínimos cuadrados, etc.). Son el tipo de pruebas más utilizado aunque requieren que se cumplan ciertos supuestos (como el de normalidad y homogeneidad de varianza) para que realmente generen buenos resultados. ...
Continuar leyendo
Valora este artículo del blog:
1534 Hits
8 Comentarios

LIBROS RECOMENDADOS PARA APRENDER ESTADÍSTICA CON R

LIBROS RECOMENDADOS 
PARA APRENDER ESTADÍSTICA CON R
Valora este artículo del blog:
2516 Hits
19 Comentarios

EL GRAN PROBLEMA DE APRENDER ESTADÍSTICA (Y SU SOLUCIÓN)

EL GRAN PROBLEMA DE APRENDER ESTADÍSTICA (Y SU SOLUCIÓN)
El problema número uno que tiene la gente cuando busca aprender estadística es que está perdida y no sabe por dónde tirar.Andas buscando las herramientas necesarias para garantizar que los resultados de tu trabajo sean un éxito. Estás frustrado porque sabes que tu trabajo es bueno, has invertido mucho tiempo y dinero en él, y deseas sacarle el mayo...
Continuar leyendo
Valora este artículo del blog:
1617 Hits
0 Comentarios