Estadística Descriptiva Unidimensional

Resumiendo, que es gerundio.
function
sum
length
return
median
table
which.max
as.double
rownames
mean
var
sqrt
quantile
min
max
as.numeric
abs
ineq
plot
data.frame
colnames
round
t
set.seed
if
ifelse
tapply
Author

Román Salmerón Gómez

Published

November 9, 2022

Las representaciones gráficas del post anterior se basan, aunque no se haya dicho, en una serie de medidas (de posición, dispersión, forma o concentración) que resumen el conjunto de datos en unos pocos números. En este documento se tiene un resumen de los comandos de R que permite calcular dichas medidas.

A continuación se tiene una función que permite calcular las principales caractarísticas unidimensionales de un conjunto de datos:

momentos = function(x, r, mp = 0) {
    m = sum((x-mp)^r)/length(x)
    return(m)
}

TODO = function(x, alfa = 0.95, graf = F) {
    n = length(x)
    media = momentos(x, 1)
    mediana = median(x)
    tabla.estadistica = table(x)
    posicion = which.max(table(x))
    moda = as.double(rownames(tabla.estadistica)[posicion])
    varianza = momentos(x, 2, mean(x))
    desv.tip = sqrt(varianza)
    Q1 = quantile(x, probs = 0.25)
    Q3 = quantile(x, probs = 0.75)
    percentil.alfa = quantile(x, probs = alfa)
    minimo = min(x)
    maximo = max(x)
    rango = maximo - minimo
    rango.int = as.numeric(Q3) - as.numeric(Q1)
    ca = maximo/minimo
    rango.re = rango/abs(media)
    cv = desv.tip/abs(media)
    pearson = (media-moda)/desv.tip
    m3 = momentos(x, 3, mean(x))
    simetria = m3/(desv.tip^3)
    m4 = momentos(x, 4, mean(x))
    kurtosis = m4/(varianza^2) - 3
    library(ineq)
    gini = ineq(x, type="Gini")
    if(graf == T) {plot(Lc(x), col="red", lwd=2)}
    salida = data.frame(n, media, mediana, moda, varianza, desv.tip, Q1, Q3, percentil.alfa, minimo, maximo, rango, rango.int, ca, rango.re, cv, pearson, simetria, kurtosis, gini)
    rownames(salida) = c("")
    return(salida)
}  

Adviértase que dento de la función TODO se hace uso de la función momentos. Para poder usar dichas funciones, simplemente hay que copiarlas y pegarlas en la consola de R.

Se puede observar que se usa la función momentos para calcular la varianza, esto se debe a que si se usa el comando var de R lo que realmente se calcula es la cuasivarianza muestral (que es el estimador insesgado de la varianza poblacional):

set.seed(2022) # para que siempre se realicen los cálculos con los mismos datos aleatorios
x = sample(1:1000, 100)
momentos(x, 2, mean(x)) # varianza muestral
[1] 83871.95
var(x) # cuasivarianza muestral
[1] 84719.14

Entrando en faena, supongamos que tenemos la siguiente información sobre la altura y peso de 50 personas:

altura = c(172, 167, 174, 169, 178, 196, 160, 168, 172, 181, 180, 181, 188, 170, 171, 
           160, 180, 177, 175, 186, 165, 180, 174, 180, 178, 179, 180, 180, 173, 165, 
           185, 165, 170, 174, 165, 168, 172, 181, 180, 181, 188, 170, 181, 180, 174, 
           180, 178, 179, 180, 180)
peso = c(60,  65,  75,  72,  78,  95,  50,  60,  74,  72,  70,  89, 100,  60,  73,  57,  
         65,  95,  67,  82,  59,  97,  68,  75,  71,  95,  85,  82,  60,  61,  91,  53,  
         60, 67,  52,  60,  74,  72,  70,  89, 100,  60,  89,  97,  68,  75,  71,  95,  85,  82)  

Para realizar un análisis estadístico unidimensional de cada variable es suficiente con usar el siguiente código:

# tabla = data.frame(t(TODO(altura, graf=T)), t(TODO(peso, graf=T)))
tabla = data.frame(t(TODO(altura)), t(TODO(peso)))
colnames(tabla) = c("Altura", "Peso")
round(tabla, digits = 3)
                Altura    Peso
n               50.000  50.000
media          175.800  74.440
mediana        178.000  72.000
moda           180.000  60.000
varianza        53.200 190.646
desv.tip         7.294  13.807
Q1             170.250  62.000
Q3             180.000  85.000
percentil.alfa 187.100  97.000
minimo         160.000  50.000
maximo         196.000 100.000
rango           36.000  50.000
rango.int        9.750  23.000
ca               1.225   2.000
rango.re         0.205   0.672
cv               0.041   0.185
pearson         -0.576   1.046
simetria        -0.023   0.281
kurtosis         0.077  -0.983
gini             0.023   0.106

No es la idea realizar aquí una interpretación exhaustiva de los resultados obtenidos, sin embargo, se podría decir (por ejemplo) que:

Con esta información se podrían contestar preguntas del tipo: ¿qué es más frecuente, los individuos altos o bajos? ¿los delgados o los gruesos? ¿es la media aritmética una medida de posición central representativa?

Incluso se podría empezar a plantear una análisis bidimensional, es decir, haciendo interactura a ambas variables. Así, por ejemplo, si se considera que una persona es baja si es inferior al percentil 25 y alta si supera el percentil 75, se podrían obtener las principales características del peso distinguiendo entre individuos altos, bajos y medios:

alturas = ifelse(altura > quantile(altura, probs=0.75), "Alto", 
               ifelse(altura < quantile(altura, probs=0.75), "Bajo", "Medio"))
tapply(peso, alturas, TODO)
$Alto
  n media mediana moda varianza desv.tip    Q1 Q3 percentil.alfa minimo maximo
 10  87.9      89   89    89.69  9.47048 83.75 94            100     72    100
 rango rango.int       ca  rango.re        cv    pearson   simetria   kurtosis
    28     10.25 1.388889 0.3185438 0.1077415 -0.1161504 -0.5074032 -0.8301741
       gini
 0.05904437

$Bajo
  n    media mediana moda varianza desv.tip Q1 Q3 percentil.alfa minimo maximo
 29 67.58621      67   60 137.1391 11.71064 60 73             95     50     95
 rango rango.int  ca  rango.re        cv   pearson simetria  kurtosis
    45        13 1.9 0.6658163 0.1732697 0.6478046 1.002436 0.5882239
       gini
 0.09232935

$Medio
  n    media mediana moda varianza desv.tip   Q1 Q3 percentil.alfa minimo
 11 80.27273      82   70 100.9256 10.04617 72.5 85             97     65
 maximo rango rango.int       ca rango.re        cv  pearson simetria
     97    32      12.5 1.492308 0.398641 0.1251505 1.022551 0.319055
   kurtosis       gini
 -0.8953109 0.07000927

Pero de análisis bidimensional hablaremos en el siguiente post.