# Instalar paquetes necesarios sino están instalados
if(!require(psych)){install.packages("psych")}
if(!require(ggplot2)){install.packages("ggplot2")}
if(!require(gapminder)){install.packages("gapminder")}

Cargar librerías necesarias

library(gapminder)
library(ggplot2)
library(psych)

Distintos Tipos de Medias

# 1. Media Aritmética
# La media aritmética es la suma de todos los valores dividida por el número de valores.
datos = c(1, 2, 3, 4, 5)
media_aritmetica <- mean(datos)
paste("Media Aritmética:", media_aritmetica)
# en este caso la frase "los valores son" se recicla tantas veces como elementos tiene el vector media_aritmetica, que son 5
paste('los valores son', datos)
# 2. Media Ponderada
# La media ponderada tiene en cuenta la importancia relativa de cada valor.
valores <- c(10, 20, 30, 50) # esto es un vector, cuando aparece la letra c seguida de ()
pesos <- c(0.4, 0.3, 0.2, 0.1)
media_ponderada <- weighted.mean(valores, pesos)
paste("Media Ponderada:", media_ponderada)
# uso de la función paste, que es pegar. Es importante mencionar que en excel
# también existe la función paste que se usa para pegar en una celda el contenido
# de varias celdas
paste('la media', 'ponderada','tiene un valor de',media_ponderada )

Calculo “manual” o valor a valor, de la media ponderada

10*0.4+ 20*.3 + 30*0.2 + 40*0.1
# 3. Media Armónica
# La media armónica es el recíproco de la media aritmética de los recíprocos.
# esta es una función que se define para hacer su cálculo. Opcional comprender
# el código

harmonic_mean <- function(x) {
  n <- length(x)
  n / sum(1/x)
}
datos <- c(40, 60)
media_armonica <- harmonic_mean(datos)
print(paste("Media Armónica:", media_armonica))
# obtener cantidad de elementos que contiene el vector pesos
length(pesos)
# 4. Media Geométrica
# La media geométrica es la raíz enésima del producto de n números.  Útil para tasas de cambio.
geometric_mean <- function(x) {
  return(prod(x)^(1/length(x)))
}
tasas <- c(1.10, 1.20, 1.05)
media_geometrica <- geometric_mean(tasas)
paste("Media Geométrica (función creada):", media_geometrica)
paste("Media Geométrica(usando paquete psych):", geometric.mean(tasas))

Trabajando con el Conjunto de Datos Gapminder

# Seleccionar valores de datos para continente Americas en 2007. En este caso
# se usa la función subset
gap_2007 <- subset(gapminder,
                   continent == 'Americas' & year == 2007)

# ver primeras líneas del nuevo conjunto de datos
head(gap_2007)
# Estadística Descriptiva
paste("Desviación típica de la vidaExp:", sd(gap_2007$lifeExp))
paste("Rango Inter Quartil (IQR) de lifeExp:", IQR(gap_2007$lifeExp))
"Datos resumen de lifeExp:"
summary(gap_2007$lifeExp)
# calculo manual del RIC
76.38- 71.75
paste("1er Cuartil de lifeExp:", quantile(gap_2007$lifeExp, 0.25))
# valores que componen la expectativa de vida en "Americas"
gap_2007$lifeExp
# valor para el 10%, o primer decil
quantile(gap_2007$lifeExp, .1)

Percentiles

Un percentil es una medida estadística que divide un conjunto de datos ordenados en cien partes iguales. El percentil \(k\) (denotado como \(P_k\)) es el valor por debajo del cual se encuentra aproximadamente el \(k\%\) de los datos.

En otras palabras, si un valor de dato se encuentra en el percentil \(k\), significa que aproximadamente el \(k\%\) de los datos en el conjunto son menores o iguales a ese valor.

Puntos importantes sobre los percentiles:

  • Los percentiles se calculan para datos cuantitativos (numéricos) que han sido ordenados de menor a mayor.
  • Existen 99 percentiles que dividen los datos en 100 partes: \(P_1, P_2, \ldots, P_{99}\).
  • Algunos percentiles tienen nombres especiales:
    • El percentil 25 (\(P_{25}\)) también se conoce como el primer cuartil (\(Q_1\)).
    • El percentil 50 (\(P_{50}\)) también se conoce como la mediana (\(Me\) o \(Q_2\)).
    • El percentil 75 (\(P_{75}\)) también se conoce como el tercer cuartil (\(Q_3\)).
paste("10 y 90 percentiles de lifeExp:", quantile(gap_2007$lifeExp, c(0.1, 0.9)))
# método alterno a summary para calcular tabla resumen,
quantile(gap_2007$lifeExp, c(0, 0.25, 0.50, 0.75 ,1))
paste("1ero y 99 avo percentiles de lifeExp:", quantile(gap_2007$lifeExp, c(0.01, 0.99)))

Deciles

Los deciles son medidas estadísticas que dividen un conjunto de datos ordenados en diez partes iguales. Específicamente, existen nueve deciles, denotados como \(D_1, D_2, \ldots, D_9\), donde:

  • \(D_1\) es el valor por debajo del cual se encuentra el 10% de los datos.
  • \(D_2\) es el valor por debajo del cual se encuentra el 20% de los datos.
  • \(D_9\) es el valor por debajo del cual se encuentra el 90% de los datos.

En esencia, cada decil representa un punto de corte que separa el 10% de los datos del siguiente.

Relación con los percentiles:

Los deciles son un caso especial de los percentiles. De hecho, el decil \(k\) (\(D_k\)) corresponde al percentil \(10 \times k\) (\(P_{10k}\)). Por ejemplo:

  • El primer decil (\(D_1\)) es el mismo que el percentil 10 (\(P_{10}\)).
  • El quinto decil (\(D_5\)) es el mismo que el percentil 50 (\(P_{50}\)), que también es la mediana.
  • El noveno decil (\(D_9\)) es el mismo que el percentil 90 (\(P_{90}\)).

Cómo se utilizan los deciles:

Los deciles se utilizan para segmentar un conjunto de datos en 10 grupos iguales, lo que facilita la identificación de la distribución y la comparación entre diferentes partes del conjunto de datos. Son útiles para:

  • Identificar los grupos superior e inferior del 10% de los datos.
  • Analizar la dispersión de los datos.
  • Comparar subgrupos dentro de una población.
  • En economía, por ejemplo, para analizar la distribución del ingreso (deciles de ingreso).
  • En educación, para analizar el rendimiento académico de los estudiantes (deciles de calificaciones).

Al igual que con los percentiles, el cálculo preciso de los deciles puede variar ligeramente dependiendo de la convención utilizada para manejar los casos donde la posición del decil no es un número entero. Generalmente, se utiliza la interpolación entre los valores adyacentes en el conjunto de datos ordenado.

print(paste("Deciles de lifeExp:", (seq(0.1, 1, by = 0.1))*100,'%: ' ,quantile(gap_2007$lifeExp, seq(0.1, 1, by = 0.1))))
 # nos ayudamos con la funcion seq para generar la secuencia de los deciles:
 # 0.1 , 0.2, etc.

 seq(0.1, 1, by = 0.1)
# nos ayudamos de la función seq donde cada valor se multiplica por cien a los
# efectos de imprimir el nombre del decil

seq(0.1, 1, by = 0.1)*100
# cálculo 3 er cuartil
paste("3er Cuartil de lifeExp:", quantile(gap_2007$lifeExp, 0.75))
# Detección de Valores Atípicos usando el RIC
banda_superior <- quantile(gap_2007$lifeExp, 0.75) + (1.5 * IQR(gap_2007$lifeExp))
banda_inferior <- quantile(gap_2007$lifeExp, 0.25) - (1.5 * IQR(gap_2007$lifeExp))
# ver valor
banda_superior
banda_inferior
# revisar si existen valores atípicos viendo los valores extremos
summary(gap_2007$lifeExp)
paste("Banda Superior para valores extremos:", banda_superior)
paste("Banda Inferior para valores extremos:", banda_inferior)
paste("Mínimo de lifeExp:", min(gap_2007$lifeExp))
# --- Boxplots ---
# Basico
boxplot(data = gapminder, gdpPercap ~ continent, col = 'orange', main = "GDP per Capita por Continente")
# Boxplot for 2007
boxplot(data = gapminder, gdpPercap ~ continent, subset = year == 2007, col = 'orange', main = "GDP per Capita por Continente (2007)")
boxplot(data= gapminder, gapminder$lifeExp ~ gapminder$year, subset = gapminder$year == 2007, col = 'orange', main = "Expectativa de Vida por Continente (2007)")
boxplot(data = gapminder, lifeExp ~ continent, subset = year == 2007, col = 'orange', main = "Expectativa de Vida por Continente (2007)")
boxplot(data= gapminder, gapminder$lifeExp , subset = gapminder$year == 2007, col = 'orange', main = "Expectativa de Vida por Continente (2007)")
# Boxplot for Americas in 2007
boxplot(data = gap_2007, gdpPercap ~ continent, col = 'orange', main = "GDP per Capita en America (2007)")
boxplot(data = gap_2007, gdpPercap ~ continent, col = 'orange', main = "GDP per Capita en America (2007)")

Gráfico BoxPlot (de caja) con sistema ggplot

ggplot(data=gap_2007,aes(continent,lifeExp))+
  geom_boxplot(fill='orange')
ggplot(data=gap_2007,aes(continent,lifeExp))+
  geom_boxplot(fill='orange',
               outlier.colour = "red",
               outlier.shape = 1)