A continuación le dejo un texto listo para copiar y pegar en Microsoft Teams.
Estadística Aplicada con Python y R
Probabilidad frecuentista y ajuste de variables experimentales a distribuciones de probabilidad teóricas
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:
fitter.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. |
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.
Comprender la relación entre frecuencia relativa y probabilidad desde el enfoque frecuentista.
Construir tablas de frecuencia e histogramas para variables cuantitativas continuas.
Ajustar variables experimentales a diferentes distribuciones de probabilidad teóricas.
Comparar distribuciones candidatas utilizando criterios gráficos y estadísticos.
Interpretar los resultados del ajuste en términos del contexto de ingeniería.
Elaborar conclusiones técnicas basadas en evidencia estadística.
Al finalizar la actividad, el estudiante deberá demostrar las siguientes competencias:
Competencia estadística: analiza variables cuantitativas mediante estadística descriptiva, visualización y ajuste probabilístico.
Competencia computacional: utiliza Python y R para procesar datos, ajustar distribuciones y generar resultados reproducibles.
Competencia interpretativa: relaciona los resultados estadísticos con problemas reales de Ingeniería Agrícola y Agroindustrial.
Competencia comunicativa: presenta resultados mediante tablas, gráficas, código documentado y conclusiones técnicas claras.
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.
Al entregar esta tarea, el estudiante estará en capacidad de:
Explicar cómo la frecuencia relativa se aproxima a la probabilidad cuando aumenta el número de observaciones.
Identificar la forma empírica de una variable mediante histogramas, curvas de densidad y tablas de frecuencia.
Ajustar distribuciones teóricas usando fitter en
Python.
Ajustar distribuciones teóricas usando fitdistrplus
en R.
Comparar distribuciones candidatas usando criterios como AIC, BIC, gráficos Q-Q, P-P, densidad acumulada y bondad de ajuste.
Seleccionar una distribución apropiada para una variable experimental y justificar técnicamente la elección.
fitterCada grupo debe abrir el notebook suministrado por el docente en Google Colab y realizar el análisis de las dos variables asignadas:
Conduc del dataset Soils.consumo del archivo
acero.csv.Para cada variable deben realizar los siguientes pasos:
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()
Para el dataset acero.csv:
variable_acero = acero["consumo"].dropna()
Para el dataset Soils:
variable_soils = soils["Conduc"].dropna()
Para cada variable deben calcular:
variable.describe()
Además, deben interpretar:
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()
fitterDeben 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()
Deben obtener la mejor distribución según el criterio utilizado por
fitter.
f.get_best()
Deben responder:
fitdistrplusCada grupo debe crear un documento en RMarkdown en
Posit Cloud o RStudio, y repetir el análisis usando el paquete
fitdistrplus.
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)
Soilsdata("Soils", package = "carData")
variable_soils <- na.omit(Soils$Conduc)
summary(variable_soils)
acero.csvacero <- read_csv("acero.csv")
variable_acero <- na.omit(acero$consumo)
summary(variable_acero)
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)
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:
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")
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"))
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:
Cada grupo debe responder las siguientes preguntas para cada variable:
¿Cuál es el contexto de la variable analizada?
¿Qué representa la variable en términos de ingeniería?
¿Cómo se comporta la variable según el histograma?
¿La variable parece simétrica o asimétrica?
¿Qué distribución seleccionó fitter en
Python?
¿Qué distribución parece más adecuada según
fitdistrplus en R?
¿Coinciden los resultados de Python y R?
Si no coinciden, ¿cuál distribución seleccionaría el grupo y por qué?
¿Qué criterio tuvo mayor peso en la decisión: AIC, BIC, gráficos o interpretación técnica?
¿Qué utilidad tendría conocer la distribución probabilística de esta variable en un contexto de ingeniería?
Cada grupo debe entregar en Microsoft Teams un único archivo en formato PDF, que contenga:
Portada con:
Introducción breve.
Objetivos del trabajo.
Análisis en Python con fitter.
Análisis en R con fitdistrplus.
Tablas descriptivas.
Histogramas y gráficas de ajuste.
Comparación de distribuciones candidatas.
Selección justificada de la mejor distribución para cada variable.
Conclusiones técnicas.
Evidencia del uso de herramientas computacionales.
Anexo con el código utilizado en Python y R.
El informe debe incluir capturas o salidas visibles de:
Lectura de los datos.
Estadística descriptiva.
Histograma de cada variable.
Resultado de fitter.summary().
Resultado de fitter.get_best().
Código en R con fitdist().
Gráficos de comparación de fitdistrplus.
Resultado de gofstat().
Conclusión final de la distribución seleccionada.
Se permite el uso de ChatGPT, Copilot, Gemini u otros asistentes de IA como apoyo para:
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.
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
| 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 |
| 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. |
Tarea_Ajuste_Distribuciones_Grupo_NombreDelGrupo.pdf
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.