A continuación le dejo un texto listo para copiar y pegar en Microsoft Teams.


Tarea: Ajuste de datos experimentales a distribuciones de probabilidad teóricas con Python y R

Asignatura

Estadística Aplicada con Python y R

Tema

Probabilidad frecuentista y ajuste de variables experimentales a distribuciones de probabilidad teóricas

Propósito de la tarea

En esta actividad los estudiantes aplicarán el concepto de probabilidad frecuentista y el análisis de una variable cuantitativa mediante el ajuste de datos experimentales a distribuciones de probabilidad teóricas.

El trabajo se realizará usando dos herramientas:

  1. Python, mediante el paquete fitter.
  2. R, mediante el paquete fitdistrplus.

Cada grupo deberá analizar dos variables:

Área Dataset Variable sugerida Justificación
Ingeniería Agrícola Soils del paquete carData Conduc Variable relacionada con la conductividad del suelo, útil para analizar variabilidad físico-química en suelos.
Ingeniería Agroindustrial acero.csv consumo Variable asociada al consumo en un proceso productivo, útil para analizar variabilidad operativa en procesos agroindustriales o industriales.

Objetivo general

Ajustar datos experimentales de variables cuantitativas a distribuciones de probabilidad teóricas, comparando los resultados obtenidos en Python con fitter y en R con fitdistrplus, para interpretar probabilísticamente el comportamiento de variables de interés en Ingeniería Agrícola e Ingeniería Agroindustrial.


Objetivos específicos

  1. Comprender la relación entre frecuencia relativa y probabilidad desde el enfoque frecuentista.

  2. Construir tablas de frecuencia e histogramas para variables cuantitativas continuas.

  3. Ajustar variables experimentales a diferentes distribuciones de probabilidad teóricas.

  4. Comparar distribuciones candidatas utilizando criterios gráficos y estadísticos.

  5. Interpretar los resultados del ajuste en términos del contexto de ingeniería.

  6. Elaborar conclusiones técnicas basadas en evidencia estadística.


Competencias a desarrollar

Al finalizar la actividad, el estudiante deberá demostrar las siguientes competencias:

  1. Competencia estadística: analiza variables cuantitativas mediante estadística descriptiva, visualización y ajuste probabilístico.

  2. Competencia computacional: utiliza Python y R para procesar datos, ajustar distribuciones y generar resultados reproducibles.

  3. Competencia interpretativa: relaciona los resultados estadísticos con problemas reales de Ingeniería Agrícola y Agroindustrial.

  4. Competencia comunicativa: presenta resultados mediante tablas, gráficas, código documentado y conclusiones técnicas claras.

  5. Competencia ética en el uso de IA: utiliza herramientas de inteligencia artificial como apoyo, sin reemplazar el análisis propio ni la responsabilidad académica.


Resultados de aprendizaje

Al entregar esta tarea, el estudiante estará en capacidad de:

  1. Explicar cómo la frecuencia relativa se aproxima a la probabilidad cuando aumenta el número de observaciones.

  2. Identificar la forma empírica de una variable mediante histogramas, curvas de densidad y tablas de frecuencia.

  3. Ajustar distribuciones teóricas usando fitter en Python.

  4. Ajustar distribuciones teóricas usando fitdistrplus en R.

  5. Comparar distribuciones candidatas usando criterios como AIC, BIC, gráficos Q-Q, P-P, densidad acumulada y bondad de ajuste.

  6. Seleccionar una distribución apropiada para una variable experimental y justificar técnicamente la elección.


Actividades que debe realizar cada grupo

Parte 1. Análisis en Python con fitter

Cada grupo debe abrir el notebook suministrado por el docente en Google Colab y realizar el análisis de las dos variables asignadas:

  1. Variable Conduc del dataset Soils.
  2. Variable consumo del archivo acero.csv.

Para cada variable deben realizar los siguientes pasos:

Paso 1. Cargar los datos

Para Soils, deben usar el paquete correspondiente en Python o cargar los datos según la orientación del notebook.

Para acero.csv, deben subir el archivo a Google Colab y leerlo con pandas.

import pandas as pd

acero = pd.read_csv("acero.csv")
acero.head()

Paso 2. Seleccionar la variable de análisis

Para el dataset acero.csv:

variable_acero = acero["consumo"].dropna()

Para el dataset Soils:

variable_soils = soils["Conduc"].dropna()

Paso 3. Realizar estadística descriptiva

Para cada variable deben calcular:

variable.describe()

Además, deben interpretar:

  • Media.
  • Mediana.
  • Desviación estándar.
  • Mínimo.
  • Máximo.
  • Cuartiles.
  • Posible presencia de asimetría.

Paso 4. Construir histograma y curva de densidad

Deben generar una gráfica que permita observar la forma de la distribución empírica.

import seaborn as sns
import matplotlib.pyplot as plt

sns.histplot(variable, kde=True)
plt.title("Histograma y curva de densidad")
plt.xlabel("Valores observados")
plt.ylabel("Frecuencia")
plt.show()

Paso 5. Ajustar distribuciones con fitter

Deben usar el paquete fitter para comparar distribuciones teóricas.

from fitter import Fitter, get_common_distributions

f = Fitter(
    variable,
    distributions=get_common_distributions()
)

f.fit()
f.summary()

Paso 6. Identificar la mejor distribución

Deben obtener la mejor distribución según el criterio utilizado por fitter.

f.get_best()

Deben responder:

  1. ¿Cuál fue la distribución seleccionada?
  2. ¿Qué parámetros estimó el modelo?
  3. ¿La distribución seleccionada se ajusta visualmente bien al histograma?
  4. ¿Tiene sentido esta distribución para la variable analizada?

Parte 2. Análisis en R con fitdistrplus

Cada grupo debe crear un documento en RMarkdown en Posit Cloud o RStudio, y repetir el análisis usando el paquete fitdistrplus.


Paso 1. Instalar y cargar paquetes

install.packages("fitdistrplus")
install.packages("carData")
install.packages("ggplot2")
install.packages("readr")
install.packages("dplyr")

library(fitdistrplus)
library(carData)
library(ggplot2)
library(readr)
library(dplyr)

Paso 2. Cargar el dataset Soils

data("Soils", package = "carData")

variable_soils <- na.omit(Soils$Conduc)
summary(variable_soils)

Paso 3. Cargar el archivo acero.csv

acero <- read_csv("acero.csv")

variable_acero <- na.omit(acero$consumo)
summary(variable_acero)

Paso 4. Explorar la variable gráficamente

Para cada variable:

hist(variable_soils,
     probability = TRUE,
     main = "Histograma de Conduc - Soils",
     xlab = "Conduc",
     col = "gray")

lines(density(variable_soils), lwd = 2)

Para acero:

hist(variable_acero,
     probability = TRUE,
     main = "Histograma de consumo - acero",
     xlab = "Consumo",
     col = "gray")

lines(density(variable_acero), lwd = 2)

Paso 5. Analizar la forma de los datos

Antes de ajustar distribuciones, deben usar:

descdist(variable_soils, boot = 100)

y para acero:

descdist(variable_acero, boot = 100)

Deben interpretar si los datos parecen:

  • Simétricos.
  • Asimétricos a la derecha.
  • Asimétricos a la izquierda.
  • Cercanos a una distribución normal.
  • Más compatibles con distribuciones como lognormal, gamma o Weibull.

Paso 6. Ajustar distribuciones candidatas

Para Soils$Conduc:

fit_norm_soils <- fitdist(variable_soils, "norm")
fit_lnorm_soils <- fitdist(variable_soils, "lnorm")
fit_gamma_soils <- fitdist(variable_soils, "gamma")
fit_weibull_soils <- fitdist(variable_soils, "weibull")

Para acero$consumo:

fit_norm_acero <- fitdist(variable_acero, "norm")
fit_lnorm_acero <- fitdist(variable_acero, "lnorm")
fit_gamma_acero <- fitdist(variable_acero, "gamma")
fit_weibull_acero <- fitdist(variable_acero, "weibull")

Paso 7. Comparar gráficamente los ajustes

Para Soils$Conduc:

denscomp(list(fit_norm_soils,
              fit_lnorm_soils,
              fit_gamma_soils,
              fit_weibull_soils),
         legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

cdfcomp(list(fit_norm_soils,
             fit_lnorm_soils,
             fit_gamma_soils,
             fit_weibull_soils),
        legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

qqcomp(list(fit_norm_soils,
            fit_lnorm_soils,
            fit_gamma_soils,
            fit_weibull_soils),
       legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

ppcomp(list(fit_norm_soils,
            fit_lnorm_soils,
            fit_gamma_soils,
            fit_weibull_soils),
       legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

Para acero$consumo:

denscomp(list(fit_norm_acero,
              fit_lnorm_acero,
              fit_gamma_acero,
              fit_weibull_acero),
         legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

cdfcomp(list(fit_norm_acero,
             fit_lnorm_acero,
             fit_gamma_acero,
             fit_weibull_acero),
        legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

qqcomp(list(fit_norm_acero,
            fit_lnorm_acero,
            fit_gamma_acero,
            fit_weibull_acero),
       legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

ppcomp(list(fit_norm_acero,
            fit_lnorm_acero,
            fit_gamma_acero,
            fit_weibull_acero),
       legendtext = c("Normal", "Lognormal", "Gamma", "Weibull"))

Paso 8. Comparar con criterios numéricos

Para Soils$Conduc:

gofstat(list(fit_norm_soils,
             fit_lnorm_soils,
             fit_gamma_soils,
             fit_weibull_soils),
        fitnames = c("Normal", "Lognormal", "Gamma", "Weibull"))

Para acero$consumo:

gofstat(list(fit_norm_acero,
             fit_lnorm_acero,
             fit_gamma_acero,
             fit_weibull_acero),
        fitnames = c("Normal", "Lognormal", "Gamma", "Weibull"))

Cada grupo debe comparar:

  • AIC.
  • BIC.
  • Estadísticos de bondad de ajuste.
  • Gráficos de densidad.
  • Gráficos Q-Q.
  • Gráficos P-P.
  • Curvas acumuladas.

Preguntas orientadoras para el informe

Cada grupo debe responder las siguientes preguntas para cada variable:

  1. ¿Cuál es el contexto de la variable analizada?

  2. ¿Qué representa la variable en términos de ingeniería?

  3. ¿Cómo se comporta la variable según el histograma?

  4. ¿La variable parece simétrica o asimétrica?

  5. ¿Qué distribución seleccionó fitter en Python?

  6. ¿Qué distribución parece más adecuada según fitdistrplus en R?

  7. ¿Coinciden los resultados de Python y R?

  8. Si no coinciden, ¿cuál distribución seleccionaría el grupo y por qué?

  9. ¿Qué criterio tuvo mayor peso en la decisión: AIC, BIC, gráficos o interpretación técnica?

  10. ¿Qué utilidad tendría conocer la distribución probabilística de esta variable en un contexto de ingeniería?


Producto final que debe entregar cada grupo

Cada grupo debe entregar en Microsoft Teams un único archivo en formato PDF, que contenga:

  1. Portada con:

    • Nombre de la asignatura.
    • Nombre de los integrantes.
    • Programa académico.
    • Nombre del docente.
    • Fecha.
  2. Introducción breve.

  3. Objetivos del trabajo.

  4. Análisis en Python con fitter.

  5. Análisis en R con fitdistrplus.

  6. Tablas descriptivas.

  7. Histogramas y gráficas de ajuste.

  8. Comparación de distribuciones candidatas.

  9. Selección justificada de la mejor distribución para cada variable.

  10. Conclusiones técnicas.

  11. Evidencia del uso de herramientas computacionales.

  12. Anexo con el código utilizado en Python y R.


Evidencias obligatorias

El informe debe incluir capturas o salidas visibles de:

  1. Lectura de los datos.

  2. Estadística descriptiva.

  3. Histograma de cada variable.

  4. Resultado de fitter.summary().

  5. Resultado de fitter.get_best().

  6. Código en R con fitdist().

  7. Gráficos de comparación de fitdistrplus.

  8. Resultado de gofstat().

  9. Conclusión final de la distribución seleccionada.


Uso permitido de inteligencia artificial

Se permite el uso de ChatGPT, Copilot, Gemini u otros asistentes de IA como apoyo para:

  • Comprender errores de código.
  • Explicar funciones de Python y R.
  • Mejorar la redacción del informe.
  • Interpretar resultados.

Sin embargo, cada grupo debe demostrar comprensión propia del procedimiento realizado.

No se aceptarán entregas que sean solamente texto generado por IA sin código, sin resultados y sin interpretación del grupo.


Recomendación técnica importante para Google Colab

Para evitar errores de instalación en Google Colab, los estudiantes deben usar la siguiente celda de instalación:

!pip install -q --force-reinstall \
    "numpy==2.0.2" \
    "pandas==2.2.2" \
    "scipy==1.14.1" \
    "matplotlib==3.10.0" \
    "seaborn==0.13.2" \
    "fitter==1.7.1" \
    "pydataset==0.2.0" \
    "openpyxl==3.1.5"

Después de instalar, deben reiniciar la sesión de Colab:

Entorno de ejecución → Reiniciar sesión


Rúbrica de evaluación

Criterio Descripción Puntaje
1. Comprensión conceptual Explica correctamente la relación entre frecuencia relativa, probabilidad frecuentista y distribución teórica. 1.0
2. Análisis descriptivo Presenta estadística descriptiva, histogramas e interpretación inicial de las variables. 1.0
3. Ajuste en Python con fitter Ejecuta correctamente el ajuste, presenta resultados y selecciona una distribución candidata. 1.0
4. Ajuste en R con fitdistrplus Ejecuta correctamente fitdist(), compara distribuciones y usa gráficos y criterios de bondad de ajuste. 1.0
5. Interpretación técnica y conclusiones Justifica la distribución seleccionada y relaciona los resultados con el contexto de ingeniería. 0.7
6. Presentación del informe El informe está organizado, claro, con tablas, gráficas, código y conclusiones bien presentadas. 0.3
Total 5.0

Escala de valoración

Nota Nivel de desempeño
4.5 – 5.0 Excelente: análisis completo, interpretación clara y comparación adecuada entre Python y R.
4.0 – 4.4 Bueno: cumple la mayoría de los aspectos con pequeñas debilidades de interpretación o presentación.
3.0 – 3.9 Aceptable: presenta los procedimientos básicos, pero con interpretación limitada o errores menores.
2.0 – 2.9 Insuficiente: el análisis está incompleto, con errores importantes de código o interpretación.
0.0 – 1.9 Deficiente: no evidencia comprensión del tema ni ejecución adecuada del procedimiento.

Criterios de entrega

  • La tarea debe entregarse en Microsoft Teams.
  • Formato de entrega: PDF.
  • El archivo debe llamarse:
Tarea_Ajuste_Distribuciones_Grupo_NombreDelGrupo.pdf
  • Solo debe entregar un integrante por grupo.
  • Todos los integrantes deben aparecer en la portada.
  • No se aceptan entregas sin código, sin gráficas o sin interpretación.

Nota final

Esta actividad busca que el estudiante comprenda que los datos experimentales no solo se resumen mediante promedios o gráficas, sino que también pueden modelarse probabilísticamente. El ajuste a distribuciones permite estimar comportamientos esperados, probabilidades de ocurrencia y rangos de variabilidad, lo cual es fundamental en la toma de decisiones en ingeniería.