Demostración con datos simulados

3.4. Demostración con datos simulados#

Tenemos ahora todos los bloques necesarios para comenzar a analizar datos y verás que tienes en tus manos una calculadora ultrapoderosa.

Antes de comenzar

Para que esta libreta funcione debes tener instaladas las librería scipy. En el tema 1, durante la preparación del espacio local estaba contemplado, pero si no lo has hecho, revisa el tema 1. El comando específico con uv es: uv add scipy.

Nota

Si ejecutas la libreta en la nube de colab, no es necesario instalar estas librerías porque el entorno de ejecución ya las tiene disponibles.

Los datos

Simularemos una serie de datos.

pacientes = {
    'ids': [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
        18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
    'peso': [69.6, 62.7, 74.2, 66.7, 62.6, 67.4, 69.2, 71.2, 66.8, 69.7, 68.9,
        69.5, 72.5, 77.7, 64.6, 76.4, 64.1, 68.3, 68.4, 65.3, 69.4, 61.6,
        75.4, 63.6, 82.1, 73.3, 70.8, 69.5, 83.9, 73.9],
    'talla': [1.78, 1.62, 1.68, 1.62, 1.73, 1.65, 1.53, 1.61, 1.62, 1.61, 1.73,
        1.51, 1.7 , 1.68, 1.7 , 1.65, 1.64, 1.59, 1.68, 1.71, 1.64, 1.67,
        1.67, 1.67, 1.72, 1.61, 1.69, 1.57, 1.67, 1.68]
}
print(pacientes)
{'ids': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 'peso': [69.6, 62.7, 74.2, 66.7, 62.6, 67.4, 69.2, 71.2, 66.8, 69.7, 68.9, 69.5, 72.5, 77.7, 64.6, 76.4, 64.1, 68.3, 68.4, 65.3, 69.4, 61.6, 75.4, 63.6, 82.1, 73.3, 70.8, 69.5, 83.9, 73.9], 'talla': [1.78, 1.62, 1.68, 1.62, 1.73, 1.65, 1.53, 1.61, 1.62, 1.61, 1.73, 1.51, 1.7, 1.68, 1.7, 1.65, 1.64, 1.59, 1.68, 1.71, 1.64, 1.67, 1.67, 1.67, 1.72, 1.61, 1.69, 1.57, 1.67, 1.68]}

Esta estructura de datos está diseñada así, un dict que contiene tres claves y para cada clave una lista de valores numéricos. La primera clave 'id' identifica a cada paciente, la segunda y tercera son sus respectivos pesos y tallas.

En esta estructura, la posición de cada dato, define a qué paciente pertenece, por ejemplo, el paciente con id 1, tiene un peso de 69.6kg y una talla de 1.78m.

En esta libreta integraremos los conocimientos que ya tenemos para describir estos datos.

Utilizaremos la librería de fábrica de python para calcular la media y la desviación estándar de python para calcular la media y la desviación estándar de cada dato, de la siguiente manera.

import statistics as st

for llave in ['peso', 'talla']:
    datos = pacientes[llave]
    media = st.mean(datos)# aritmética
    std = st.stdev(datos) # de la muestra
    print(f'Para {llave} - la media es {media:.2f} +/- {std:.2f}')
Para peso - la media es 69.98 +/- 5.46
Para talla - la media es 1.65 +/- 0.06

Veamos cómo podríamos calcular la media y el rango intercuartilar, utilizando statistics

for llave in ['peso', 'talla']:
    datos = pacientes[llave]
    q1, mediana, q3 = st.quantiles(datos) # observa que no hay que importar cada vez.
    print(f'{llave}: mediana= {mediana} ({q1:.2f} - {q3:.2f})')
peso: mediana= 69.45 (66.35 - 73.45)
talla: mediana= 1.67 (1.62 - 1.69)

Utilizando ahora un librería externa podemos calcular datos más poderosos, por ejemplo, podemos utilizar la prueba de Shapiro-Wilk para ver si los datos son o no normales.

La prueba está integrada dentro de la librería scipy y su documentación se puede consultar aquí.

Respecto a la expresión ternaria, recuerda revisar el tema aquí

from scipy.stats import shapiro

def es_normal(datos):
    res = shapiro(datos)
    normal = 'Normal' if res.pvalue > 0.05 else 'No Normal'
    # la expresión arriba se llama "ternaria"
    # en una línea tenemos un if else.
    reporte = f'Resultado de shapiro wilk: {normal} con p={res.pvalue}'
    print(reporte)

es_normal(pacientes['peso'])
es_normal(pacientes['talla'])
Resultado de shapiro wilk: Normal con p=0.16922468929736062
Resultado de shapiro wilk: Normal con p=0.608918875551153

Ambas variables son normales, segun la prueba.

Esta libreta es un breve ejemplo de cómo podemos utilizar python, en forma lineal para resolver problemas estadísticos con una muestra de pacientes. En la siguiente unidad veremos aspectos específicos y dirigidos del análisis estadístico.