Determinar medidas estadísticas de localización media, mediana, moda, máximos, mínimos y rango de un conjunto de datos usando funciones de R.
El proceso de este caso permite identificar las medidas de localización de media, mediana, moda, máximos, mínimos, rango y el significado de las mismas para interpretar si una distribución de datos es simétricas o asimétrica.
Primero se presenta como determinar los estadísticos manualmente por medio de programación y luego se identifica como determinar estos mismos valores estadísticos de manera más sencilla por medio de funciones que existen en los paquetes base de R para media y mediana, y funciones de librerías instaladas para la moda.
En el proceso, los datos se visualizan por medio de la librería ggplot previamente instalada, el gráfico que se muestra es el histograma con lineas verticales que representan la media, mediana y moda.
Finalmente se hace una interpretación del caso identificando la simetría o asimetría del mismo.
El software estadístico moderno como el lenguaje de programación R, permite el cálculo de medias, medianas, desviaciones estándar entre otros estadísticos, así como la construcción y visualización de gráficas que presenten una “huella digital” de la naturaleza de la muestra [@walpole2012].
En un conjunto de datos de las medias de posición están diseñadas para ayudar al analista alguna medida cuantitativa de dónde está el centro de los datos en una muestra [@walpole2012]
La media significa el promedio o la suma de todos los elementos divididos entre el total de la muestra o lo que es lo mismo es un promedio de todos los elementos.
La media proporciona una media de localización central de los datos. Si los datos son datos de una muestra, la media se denota \(\bar{x}\) si los datos son datos de una población, la media se denota con la letra griega \(\mu\).
[@anderson_estadistica_2008].
En las fórmulas estadísticas identificar el valor de la primera observación de la varible \(x\) con \(x_1\), el valor de la segunda observación de la variable \(x\) con \(x_2\) y así con lo siguiente.
En general, el valor de i-ésima observación de la variable \(x\) se denota \(x_i\) hasta la posición final del conjunto de datos \(x_n\).
La media se representa como \(\bar{x}\). Aquí la fórmula para la media.
\[ \bar{x} = \sum_{i=1}^{n}\frac{x_i}{n} = \frac{x_1 + x_2 +x_3+...x_n}{n} \]
Se muestra el código para determinar la media, sumando cada elemento y dividiendo el número de elementos que contiene la muestra.
Se construyen los valores de la muestra a partir de un vector llamado datos.
El contexto de los datos puede ser, edades, medidas de peso en kgs. de algún producto, velocidades de andar en bicicleta u otro contexto en donde existan valores similares.
Se simulan datos de edades de personas.
datos<- c(40,60,50,45,65,70,95,90,45,60,43,56, 65, 80, 45, 70, 45, 75, 45, 54, 35, 46, 47, 50, 50, 60, 50, 50, 65, 50, 50, 22, 54, 68, 70, 46, 54, 55, 50, 55, 40, 68, 76, 56, 55, 45, 50, 43, 46, 47, 70, 24, 34, 54,43, 34, 45, 45, 45, 45)
datos
## [1] 40 60 50 45 65 70 95 90 45 60 43 56 65 80 45 70 45 75 45 54 35 46 47 50 50
## [26] 60 50 50 65 50 50 22 54 68 70 46 54 55 50 55 40 68 76 56 55 45 50 43 46 47
## [51] 70 24 34 54 43 34 45 45 45 45
Se identifican valores de los datos en posiciones específicas \(x_1\), \(x_2\), \(x_3\), \(x_n\), siendo \(n\) = 60.
El símbolo de “,” en R en una misma linea significa que se pueden tomar como diferentes instrucciones para ahorrar lineas o renglones en el bloque de código.
Se determina el valor de \(n\) o la cantidad de elementos en los datos con la función length().
datos[1]; datos[2]; datos[3]; datos[length(datos)]
## [1] 40
## [1] 60
## [1] 50
## [1] 45
La función paste() vista en otros casos, simplemente imprime en pantalla valores, posiblemente concatenados separados con la coma “,”.
n <- length(datos)
paste("Cantidad de elementos de la muestra = ", n)
## [1] "Cantidad de elementos de la muestra = 60"
Ahora realizar el cálculo de la media aritméticamente.
La función sum() suma aritméticamente todos los elementos de la muestra y round() redondea el resultado a ciertas posiciones decimales, por ejemplo round(valor, 2) redondeado a dos posiciones, siendo el valor el resultado obtenido.
sum(datos) / n
## [1] 53.16667
paste ("Una forma tradicional de sacar la media", round(sum(datos) / n, 2))
## [1] "Una forma tradicional de sacar la media 53.17"
Esto sería lo mismo que sumar datos[1] + datos[2] + datos[3] + datos[4] + datos[5] + … datos[60] y luego dividir entre \(n\).
En R la función mean() determina la media de un conjunto de datos, por ejemplo, edades de doce personas adultos y adultos mayores, las preguntas son: ¿Cuántos datos hay en la muestra?, ¿cuál es la media de los datos?, y ¿qué representa la media?.
La función round() redondea posiciones decimales.
media <- round(mean(datos),2)
paste("Usando mean(), para determinar la media de los datos = ", media)
## [1] "Usando mean(), para determinar la media de los datos = 53.17"
La media con valor de 53.17 es un estadístico que representa el promedio de los 60 datos de la muestra.
Otra medida de localización importante es la mediana. El propósito de la mediana es reflejar la tendencia central de la muestra, de otra manera que no esté influida por los valores extremos. Dado que las observaciones en una muestra son \(x_1\), \(x_2\), \(….., x_n\) , acomodamos en orden de magnitud creciente, es decir, ordenados ascendentemente, la mediana de los datos estará dada por alguna de las maneras dependiendo si el número de elementos es par o impar.
La mediana será representada por \(\tilde x\)
\[ \tilde{x} =\begin{Bmatrix}x_{(n+1)/2}\text{ Si n es impar,}\\ \frac{1}{2}\cdot(x_{n/2}+x_{n/2+1})\text{ Si n es par,} \end{Bmatrix} \]
La fórmula significa que si el número de elementos es impar, se toma el que está exactamente a la mitad de los datos ordenados y si por el contrario el número de datos es par se toman el promedio de los dos números continuos o seguidos, es decir que están a mitad de todos los datos ya ordenados.
Primero hacer un código para determinar si \(n\) es un número par o impar o non.
El siguiente código en R, determina si el valor de \(n\) es par o impar.
if (n %% 2 == 0){
n.par <- "par"
print ("n es par")
} else{
n.par <- "impar"
print("n es impar")
}
## [1] "n es par"
Para el caso de los datos hay que constatar y verificar si es par o impar la variable \(n\), con valor de 60 entonces es par, se elige la opción adecuada de la fórmula.
Toda vez de haber verificado si el valor de \(n\) es par o impar se hace el cálculo según la opción de la fórmula.
Segundo, se ordenan y se muestran los datos y luego se verifica el elemento que está exactamente a la mitad de entre todos los datos.
La ordenación para este ejemplo se hace con la función order que genera las posiciones en que se ordena el vector datos, los datos se reescriben ordenados.
datos.ordenados <- datos[order(datos)]
datos.ordenados
## [1] 22 24 34 34 35 40 40 43 43 43 45 45 45 45 45 45 45 45 45 45 46 46 46 47 47
## [26] 50 50 50 50 50 50 50 50 50 54 54 54 54 55 55 55 56 56 60 60 60 65 65 65 68
## [51] 68 70 70 70 70 75 76 80 90 95
Tercero, finalmente se aplica la fórmula según sea el caso par o impar.
if(n.par == 'impar'){
mediana <- (datos.ordenados[(n+1)/2])
}else{
mediana <- 1/2 * (datos.ordenados[n/2] + datos.ordenados[n/2+1])
}
mediana
## [1] 50
Para este ejemplo de 60 datos es sencillo para el cerebro encontrar la mediana y la media, sin embargo, R puede tratar y analizar grandes volúmenes de datos.
La manera más sencilla en R para determinar la mediana es mediante la función median(), la cual simplemente regresa el valor central de los datos ordenados, independientemente si el valor de \(n\) es par o impar, de hecho debe intuirse que el código de la fórmula está encapsulado en la función median().
medina <- median(datos)
print(mediana)
## [1] 50
La mediana refleja el valor central de los datos. Como lo dice Lind (2015) es el punto medio de los valores una vez que han sido ordenados de menor a mayor o de mayor a menor. [@lind_estadistica_2015]
Algunas veces, posiblemente cuando se detectan valores atípicos o outliers de la muestra, es necesario pensar en utilizar un concepto llamado media recortada la cual se calcula nuevamente pero habiendo quitado cierto porcentaje de los valores mayores y menores del conjunto.
La función subset() filtra bajo una expresión o condición un conjunto de datos que pueden ser vectores o data.frames. En este caso el resultado es un vector en R llamado datos.reducido.
datos.reducido <- subset(datos, datos >=40 & datos <=90)
datos
## [1] 40 60 50 45 65 70 95 90 45 60 43 56 65 80 45 70 45 75 45 54 35 46 47 50 50
## [26] 60 50 50 65 50 50 22 54 68 70 46 54 55 50 55 40 68 76 56 55 45 50 43 46 47
## [51] 70 24 34 54 43 34 45 45 45 45
mean(datos.reducido)
## [1] 54.55556
median(datos.reducido)
## [1] 50
Ahora los valores de media y mediana son mas cercanos.
La moda es el valor que se presenta con mayor frecuencia. [@anderson_estadistica_2008]. Walpole, 2012) indica que la moda muestral es el valor que ocurre con mayor frecuencia en los datos y es el punto sobre el eje horizontal donde la curva de una distribución de datos tiene su punto máximo. [@walpole_probabilidad_2012].
En R existen varias alternativas para determina la moda de un conjunto de datos.
Se puede utilizar la función table() para encontrar las frecuencias y posteriormente ordenar tabla tal vez descendentemente y el valor del conjunto de datos de frecuencias de la primera posición será la moda. Algunas veces hay dos o tres valores que se repite en el mismo número de ocasiones o que tienen la misma frecuencia, entonces hay que verificar si el conjunto de datos es bimodal o multimodal.
frecuencias <- table(datos)
frecuencias.ordenada <- frecuencias[order(frecuencias, decreasing = TRUE)]
frecuencias.ordenada
## datos
## 45 50 54 70 43 46 55 60 65 34 40 47 56 68 22 24 35 75 76 80 90 95
## 10 9 4 4 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 1 1 1
moda <- frecuencias.ordenada[1]
moda
## 45
## 10
Otra alternativa es utilizar la librería o el paquete modeest, antes que nada se deberá instalar el paguete install.packages(“modeest”), posteriormente, se podrá cargar la librería con library(modeest).
library(modeest)
Para determinar la moda se utiliza la función mfv(x) en donde \(x\) es el vector a utilizarse para encontrar la moda.
moda <- mfv(datos)
moda
## [1] 45
En cualquier distribución, cuando la la moda, la mediana y la media son iguales se interpreta como una distribución simétrica; si los valores de media, moda y mediana son diferentes, por el contrario será asimétrica si si los valores de media y mediana son diferentes[@lind_estadistica_2015].
La siguiente imagen muestra como se pueden presentar las gráficas conforme y de acuerdo al histograma y a su curva de densidad.
El paquete ggplot2 permite crear gráficas y visualizar datos de una manera más elegante y amigable, es uno de los paquete más utilizados en R para representar y visualizar datos.
Las siguiente instrucciones utilizan el paquete ggplot() previamente instalado con install.packages(“ggplot2”) es una librería.
Algunos tutoriales sobre ggplot se encuentran en los siguientes enlaces:
http://r-statistics.co/Complete-Ggplot2-Tutorial-Part1-With-R-Code.html
https://www.datanalytics.com/libro_r/introduccion-a-ggplot2.html
https://rstudio.com/wp-content/uploads/2015/04/ggplot2-spanish.pdf
library(ggplot2)
Las siguientes lineas permiten crear un conjunto de datos data.frame a partir del vector de datos. Esta transformación de datos tiene la finalidad de tratar con data.frame en lugar de vector y es más práctico para efecto de visualización de datos con ggplot().
df.datos <- data.frame(datos)
df.datos
## datos
## 1 40
## 2 60
## 3 50
## 4 45
## 5 65
## 6 70
## 7 95
## 8 90
## 9 45
## 10 60
## 11 43
## 12 56
## 13 65
## 14 80
## 15 45
## 16 70
## 17 45
## 18 75
## 19 45
## 20 54
## 21 35
## 22 46
## 23 47
## 24 50
## 25 50
## 26 60
## 27 50
## 28 50
## 29 65
## 30 50
## 31 50
## 32 22
## 33 54
## 34 68
## 35 70
## 36 46
## 37 54
## 38 55
## 39 50
## 40 55
## 41 40
## 42 68
## 43 76
## 44 56
## 45 55
## 46 45
## 47 50
## 48 43
## 49 46
## 50 47
## 51 70
## 52 24
## 53 34
## 54 54
## 55 43
## 56 34
## 57 45
## 58 45
## 59 45
## 60 45
ggplot(data = df.datos, mapping = aes(x = datos)) + geom_histogram(bins = 30) + ggtitle('Histograma de datos') + xlab( 'Valores') + ylab('Frecuencia')
titulo <- "HISTOGRAMA DE LOS DATOS"
subtit<- paste("MEDIA =", media, "MEDIANA = ", mediana, "MODA = ", moda)
ggplot(data = df.datos, mapping = aes(x=datos)) +
geom_histogram(bins=30) +
ggtitle(titulo, subtitle = subtit) +
xlab('Valores') + ylab('Frecuencia') +
geom_vline(aes(xintercept = media,
color = "media"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = mediana,
color = "mediana"),
linetype = "dashed",
size = 1) +
geom_vline(aes(xintercept = moda,
color = "moda"),
linetype = "dashed",
size = 1)
if ( media > mediana){
mensaje <- "De acuerdo y conforme a la gráfica la distrivución es asimétrica con seesgo positivo dado que la media es mayor que la mediana."
}else if(media< mediana){
mensaje <- "De acuerdo y conforme a la gráfica la disctribución es asimétrica con sesgo negativo dado que la media es menor que la mediana."
} else if(media == mediana && mediana == moda){
mensaje <- "De acuerdo y conforme a la gráfica la distribución es simétrica dado que la media es igual a la mediana y a la moda."
}
Interpretación : De acuerdo y conforme a la gráfica la distribución es asimétrica con sesgo positivo dado que la media es mayor que la mediana.
EJEMPLO:
Los valores máximos y mínimos de un conjunto de dato son los valores de la lista de valores más pequeños y mas grande en la lista de los datos. Se puede observar los valores máximos y mínimos con los datos ordenados y verificar el primer y último elemento de la lista. Se utiliza el vector de datos ordenados.
datos.ordenados
## [1] 22 24 34 34 35 40 40 43 43 43 45 45 45 45 45 45 45 45 45 45 46 46 46 47 47
## [26] 50 50 50 50 50 50 50 50 50 54 54 54 54 55 55 55 56 56 60 60 60 65 65 65 68
## [51] 68 70 70 70 70 75 76 80 90 95
Se puede determinar con las funciones max() y min() para encontrar los valores máximos y mínimos respectivamente.
max(datos)
## [1] 95
min(datos)
## [1] 22
El rango de un conjunto de datos es el intervalo que existe entre los valores, es decir desde el valor mínimo hasta el valor máximo.
Con los valores de máximo y mínimo la diferencia que existe entre ellos determina el rango.
datos.ordenados[n] - datos.ordenados[1]
## [1] 73
max(datos) - min(datos)
## [1] 73
Con la función range() en R, se obtiene los valores máximos y mínimos y con estos se obtienen el rango con la función diff()
range(datos)
## [1] 22 95
diff(range(datos))
## [1] 73
Los cuartiles son una herramienta que se usa en estadística y que sirve para administrar grupos de datos previamente ordenados.
Los cuartiles son los tres valores de la variable que dividen a un conjunto de datos ordenados en cuatro partes iguales.
cuartiles <- quantile(datos, c(0.25,0.59,0.75))
cuartiles
## 25% 59% 75%
## 45 54 60
El diagrama de caja representa los cuartiles de los datos e identifica los valores considerados outliers o valores extremos.
Diagrama de caja con la función ggplot() que requiere la librería ggplot2
ggplot()+geom_boxplot(aes(x = datos))
Diagrama de caja con la función boxplot().
boxplot(datos, horizontal = TRUE)
Existe una función en R llamada summary() muy utilizada que describe y presenta la mayoría de los estadísticos citados para cada caso; identifica los valores mínimos, máximo, media y mediana de un conjunto de datos.
summary(datos)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 22.00 45.00 50.00 53.17 60.00 95.00
La cantidad de elementos de los datos es de 60 , los valores máximos y mínimos están en un rango de 73 siendo los valores máximo y mínimos 95.
La media es de 53.17, la mediana es 50 y la moda es 45 , habiendo alguna diferencia en donde la media es mayor que la mediana la distribución es asíncrona con sesgo positivo.
Lo más importante que se puede apreciar en esté caso son los conceptos de media, mediana, moda, máximo, mínimo, rango y cuartiles así como su respectiva formula para llevar a cabo los cálculos a mano, sin embargo, utilizamos varias funciones propias de R para poder analizar y recabar los resultados.
Utilizamos funciones nuevas que calculan cada uno de los conceptos anteriormente mencionados, es importante destacar que se utilizó la herramienta ggplot para graficar, así como varios parámetros nuevos que no se habían utilizado en casos anteriores, igualmente ahora se puede comprender por completo la tabla que arroja la función summary.
A lo largo del caso podemos apreciar varios métodos para llegar al resultado de la media, mediana, moda, mínimo, máximo, rango y cuartil de los datos creados, algunas con un poco más de código que otras, por lo cual se puede analizar cual podría ser la mejor opción en casos futuros.