embed_youtube("Z-lEMp_rMks")
El Módulo de Servicio Europeo (ESM) de la nave Orion utiliza un sistema de propulsión que debe operar dentro del 5% de las predicciones de consumo. Durante la misión Artemis II, se registraron 10 mediciones de desviación porcentual respecto al consumo esperado. Se desea determinar si, estadísticamente, el consumo real difiere significativamente del esperado (0% de desviación).
Hipótesis: - H₀: μ = 0% (el consumo real no difiere del esperado) - H₁: μ ≠ 0% (el consumo real difiere del esperado)
Nivel de significancia: α = 0.05
# ====================================================
# APLICACIÓN 1: PRUEBA DE HIPÓTESIS – CONSUMO DE PROPULSOR
# ====================================================
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
# Datos de desviaciones porcentuales observadas (dentro del 5% reportado)
diferencias_porcentuales = np.array([3.2, 2.8, 4.1, 3.5, 2.9, 4.3, 3.7, 2.5, 3.9, 3.1])
media_esperada = 0 # Hipótesis nula: desviación 0%
print("=" * 70)
print("📊 APLICACIÓN 1: PRUEBA DE HIPÓTESIS – CONSUMO DE PROPULSOR")
print("=" * 70)
print("\n📖 Enunciado:")
print(" El ESM de Orion debe operar dentro del 5% de las predicciones.")
print(" Se registraron 10 desviaciones porcentuales para evaluar")
print(" si el consumo real difiere significativamente del esperado.")
print("\n🔬 Hipótesis:")
print(" H₀: μ = 0% (el consumo no difiere del esperado)")
print(" H₁: μ ≠ 0% (el consumo difiere del esperado)")
print(f"\n📊 Datos observados (%): {diferencias_porcentuales}")
print(f" n = {len(diferencias_porcentuales)}")
print(f" Media muestral = {diferencias_porcentuales.mean():.2f}%")
print(f" Desviación estándar = {diferencias_porcentuales.std(ddof=1):.2f}%")
# Prueba t de una muestra (bilateral)
t_stat, p_value = stats.ttest_1samp(diferencias_porcentuales, media_esperada)
print(f"\n📈 Resultados de la prueba t:")
print(f" Estadístico t = {t_stat:.4f}")
print(f" Grados de libertad = {len(diferencias_porcentuales)-1}")
print(f" p-valor = {p_value:.6f}")
# Decisión
alpha = 0.05
if p_value < alpha:
conclusion = "Rechazamos H₀"
interpretacion = "Hay evidencia estadística de que el consumo real difiere del esperado."
else:
conclusion = "No rechazamos H₀"
interpretacion = "No hay evidencia suficiente de diferencia significativa."
print(f"\n🎯 Decisión (α = {alpha}): {conclusion}")
print(f" → {interpretacion}")
# Intervalo de confianza del 95% para la media
n = len(diferencias_porcentuales)
media = diferencias_porcentuales.mean()
s = diferencias_porcentuales.std(ddof=1)
error_estandar = s / np.sqrt(n)
t_critico = stats.t.ppf(0.975, df=n-1)
ic_inferior = media - t_critico * error_estandar
ic_superior = media + t_critico * error_estandar
print(f"\n📊 Intervalo de confianza del 95% para la media:")
print(f" [{ic_inferior:.2f}%, {ic_superior:.2f}%]")
print(f" Interpretación: Con un 95% de confianza, la verdadera")
print(f" desviación media se encuentra entre {ic_inferior:.1f}% y {ic_superior:.1f}%.")
# Gráfico
plt.figure(figsize=(10, 5))
plt.hist(diferencias_porcentuales, bins=8, edgecolor='black', alpha=0.7, color='steelblue')
plt.axvline(media_esperada, color='red', linestyle='--', linewidth=2, label='Esperado (0%)')
plt.axvline(media, color='green', linestyle='-', linewidth=2, label=f'Observado ({media:.1f}%)')
plt.axvline(ic_inferior, color='orange', linestyle=':', linewidth=1.5, label='IC 95%')
plt.axvline(ic_superior, color='orange', linestyle=':', linewidth=1.5)
plt.xlabel('Diferencia porcentual (%)')
plt.ylabel('Frecuencia')
plt.title('Distribución de diferencias en consumo de propulsor')
plt.legend()
plt.show()
# ====================================================
# APLICACIÓN 1: PRUEBA DE HIPÓTESIS – CONSUMO DE PROPULSOR
# ====================================================
# Datos
diferencias_porcentuales <- c(3.2, 2.8, 4.1, 3.5, 2.9, 4.3, 3.7, 2.5, 3.9, 3.1)
media_esperada <- 0
cat("=", rep("=", 68), "\n", sep="")
cat("📊 APLICACIÓN 1: PRUEBA DE HIPÓTESIS – CONSUMO DE PROPULSOR\n")
cat("=", rep("=", 68), "\n", sep="")
cat("\n📖 Enunciado:\n")
cat(" El ESM de Orion debe operar dentro del 5% de las predicciones.\n")
cat(" Se registraron 10 desviaciones porcentuales para evaluar\n")
cat(" si el consumo real difiere significativamente del esperado.\n")
cat("\n🔬 Hipótesis:\n")
cat(" H₀: μ = 0% (el consumo no difiere del esperado)\n")
cat(" H₁: μ ≠ 0% (el consumo difiere del esperado)\n")
cat("\n📊 Datos observados (%):", diferencias_porcentuales, "\n")
cat(" n =", length(diferencias_porcentuales), "\n")
cat(" Media muestral =", round(mean(diferencias_porcentuales), 2), "%\n")
cat(" Desviación estándar =", round(sd(diferencias_porcentuales), 2), "%\n")
# Prueba t de una muestra
resultado <- t.test(diferencias_porcentuales, mu = media_esperada)
cat("\n📈 Resultados de la prueba t:\n")
cat(" Estadístico t =", resultado$statistic, "\n")
cat(" Grados de libertad =", resultado$parameter, "\n")
cat(" p-valor =", resultado$p.value, "\n")
# Decisión
alpha <- 0.05
if (resultado$p.value < alpha) {
conclusion <- "Rechazamos H₀"
interpretacion <- "Hay evidencia estadística de que el consumo real difiere del esperado."
} else {
conclusion <- "No rechazamos H₀"
interpretacion <- "No hay evidencia suficiente de diferencia significativa."
}
cat("\n🎯 Decisión (α =", alpha, "):", conclusion, "\n")
cat(" →", interpretacion, "\n")
# Intervalo de confianza
cat("\n📊 Intervalo de confianza del 95% para la media:\n")
cat(" [", round(resultado$conf.int[1], 2), "%, ", round(resultado$conf.int[2], 2), "%]\n", sep="")
cat(" Interpretación: Con un 95% de confianza, la verdadera\n")
cat(" desviación media se encuentra entre", round(resultado$conf.int[1], 1),
"% y", round(resultado$conf.int[2], 1), "%.\n")
# Gráfico
hist(diferencias_porcentuales, breaks=8, col="steelblue", border="black",
main="Distribución de diferencias en consumo de propulsor",
xlab="Diferencia porcentual (%)", ylab="Frecuencia")
abline(v=media_esperada, col="red", lwd=2, lty=2)
abline(v=mean(diferencias_porcentuales), col="green", lwd=2)
abline(v=resultado$conf.int[1], col="orange", lwd=1.5, lty=3)
abline(v=resultado$conf.int[2], col="orange", lwd=1.5, lty=3)
legend("topright", legend=c("Esperado (0%)", paste0("Observado (", round(mean(diferencias_porcentuales),1), "%)"), "IC 95%"),
col=c("red", "green", "orange"), lwd=2, lty=c(2,1,3))
La nave Orion alcanzará una velocidad de reentrada atmosférica de aproximadamente 25,000 mph (40,000 km/h), estableciendo un nuevo récord para naves tripuladas. Con base en 30 mediciones de telemetría, se desea estimar un intervalo de confianza del 95% para la verdadera velocidad media de reentrada, y determinar si el valor reportado (25,000 mph) es plausible.
# ====================================================
# APLICACIÓN 2: INTERVALO DE CONFIANZA – VELOCIDAD DE REENTRADA
# ====================================================
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
np.random.seed(42)
velocidades_reentrada = np.random.normal(loc=25000, scale=150, size=30)
print("\n" + "=" * 70)
print("📊 APLICACIÓN 2: INTERVALO DE CONFIANZA – VELOCIDAD DE REENTRADA")
print("=" * 70)
print("\n📖 Enunciado:")
print(" Orion reingresará a la atmósfera a ~25,000 mph, récord para naves tripuladas.")
print(" Con 30 mediciones de telemetría, estimamos la verdadera velocidad media.")
print("\n🎯 Objetivo: Construir un IC del 95% y evaluar si el valor reportado es plausible.")
n = len(velocidades_reentrada)
media = velocidades_reentrada.mean()
s = velocidades_reentrada.std(ddof=1)
error_estandar = s / np.sqrt(n)
print(f"\n📊 Estadísticos muestrales:")
print(f" n = {n}")
print(f" Media muestral = {media:.1f} mph")
print(f" Desviación estándar = {s:.1f} mph")
print(f" Error estándar = {error_estandar:.1f} mph")
# Intervalo de confianza del 95% (t de Student)
t_critico = stats.t.ppf(0.975, df=n-1)
ic_inferior = media - t_critico * error_estandar
ic_superior = media + t_critico * error_estandar
print(f"\n📊 Intervalo de confianza del 95%:")
print(f" [{ic_inferior:.1f} mph, {ic_superior:.1f} mph]")
# Evaluar si el valor reportado está dentro del IC
valor_reportado = 25000
if ic_inferior <= valor_reportado <= ic_superior:
print(f"\n✅ El valor reportado ({valor_reportado} mph) está DENTRO del IC.")
print(" → Es plausible que la verdadera velocidad sea 25,000 mph.")
else:
print(f"\n⚠️ El valor reportado ({valor_reportado} mph) está FUERA del IC.")
print(" → La evidencia sugiere que la verdadera velocidad podría diferir.")
# Gráfico
plt.figure(figsize=(10, 5))
plt.errorbar(1, media, yerr=t_critico*error_estandar, fmt='o', color='red',
capsize=10, markersize=12, label='IC 95%', zorder=3)
plt.scatter(np.ones_like(velocidades_reentrada), velocidades_reentrada,
alpha=0.5, color='steelblue', s=50, label='Mediciones individuales')
plt.axhline(valor_reportado, color='green', linestyle='--', linewidth=2,
label=f'Valor reportado ({valor_reportado} mph)')
plt.xlim(0.5, 1.5)
plt.xticks([1], ['Velocidad de reentrada'])
plt.ylabel('Velocidad (mph)')
plt.title('Intervalo de confianza del 95% para la velocidad de reentrada')
plt.legend(loc='upper left')
plt.grid(True, alpha=0.3)
plt.show()
print("\n🔬 Conclusión final:")
print(" Con un 95% de confianza, la verdadera velocidad media de reentrada")
print(f" se encuentra entre {ic_inferior:.0f} y {ic_superior:.0f} mph.")
print(" Esto confirma que Orion alcanzará velocidades récord en su regreso.")
# ====================================================
# APLICACIÓN 2: INTERVALO DE CONFIANZA – VELOCIDAD DE REENTRADA
# ====================================================
set.seed(42)
velocidades_reentrada <- rnorm(30, mean = 25000, sd = 150)
cat("\n", "=", rep("=", 68), "\n", sep="")
cat("📊 APLICACIÓN 2: INTERVALO DE CONFIANZA – VELOCIDAD DE REENTRADA\n")
cat("=", rep("=", 68), "\n", sep="")
cat("\n📖 Enunciado:\n")
cat(" Orion reingresará a la atmósfera a ~25,000 mph, récord para naves tripuladas.\n")
cat(" Con 30 mediciones de telemetría, estimamos la verdadera velocidad media.\n")
cat("\n🎯 Objetivo: Construir un IC del 95% y evaluar si el valor reportado es plausible.\n")
n <- length(velocidades_reentrada)
media <- mean(velocidades_reentrada)
s <- sd(velocidades_reentrada)
error_estandar <- s / sqrt(n)
cat("\n📊 Estadísticos muestrales:\n")
cat(" n =", n, "\n")
cat(" Media muestral =", round(media, 1), "mph\n")
cat(" Desviación estándar =", round(s, 1), "mph\n")
cat(" Error estándar =", round(error_estandar, 1), "mph\n")
# Intervalo de confianza
resultado <- t.test(velocidades_reentrada, conf.level = 0.95)
cat("\n📊 Intervalo de confianza del 95%:\n")
cat(" [", round(resultado$conf.int[1], 1), " mph, ",
round(resultado$conf.int[2], 1), " mph]\n", sep="")
# Evaluar valor reportado
valor_reportado <- 25000
if (resultado$conf.int[1] <= valor_reportado & valor_reportado <= resultado$conf.int[2]) {
cat("\n✅ El valor reportado (", valor_reportado, " mph) está DENTRO del IC.\n", sep="")
cat(" → Es plausible que la verdadera velocidad sea 25,000 mph.\n")
} else {
cat("\n⚠️ El valor reportado (", valor_reportado, " mph) está FUERA del IC.\n", sep="")
cat(" → La evidencia sugiere que la verdadera velocidad podría diferir.\n")
}
# Gráfico
library(ggplot2)
df <- data.frame(velocidad = velocidades_reentrada)
p <- ggplot(df, aes(x = "", y = velocidad)) +
geom_jitter(width = 0.2, alpha = 0.5, color = "steelblue", size = 3) +
stat_summary(fun.data = mean_cl_normal, geom = "errorbar", width = 0.2,
color = "red", size = 1) +
stat_summary(fun = mean, geom = "point", color = "red", size = 4) +
geom_hline(yintercept = valor_reportado, linetype = "dashed",
color = "green", size = 1) +
labs(x = "Velocidad de reentrada", y = "Velocidad (mph)",
title = "Intervalo de confianza del 95% para la velocidad de reentrada") +
theme_minimal()
print(p)
cat("\n🔬 Conclusión final:\n")
cat(" Con un 95% de confianza, la verdadera velocidad media de reentrada\n")
cat(" se encuentra entre", round(resultado$conf.int[1], 0), "y",
round(resultado$conf.int[2], 0), "mph.\n")
cat(" Esto confirma que Orion alcanzará velocidades récord en su regreso.\n")
Durante la misión, la temperatura de cabina de Orion se ajustó desde aproximadamente 62.5°F hasta 72.5°F para mejorar el confort de los astronautas. Se tomaron mediciones de 15 sensores antes y después del ajuste. Se desea determinar si el ajuste tuvo un efecto estadísticamente significativo en la temperatura, y estimar el intervalo de confianza para la diferencia media.
Hipótesis: - H₀: μ_diferencia = 0°F (el ajuste no cambió la temperatura) - H₁: μ_diferencia ≠ 0°F (el ajuste sí cambió la temperatura)
# ====================================================
# APLICACIÓN 3: t-TEST PAREADO – TEMPERATURA DE CABINA
# ====================================================
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
np.random.seed(123)
temperaturas_antes = np.random.normal(loc=62.5, scale=2, size=15)
temperaturas_despues = np.random.normal(loc=72.5, scale=2, size=15)
print("\n" + "=" * 70)
print("📊 APLICACIÓN 3: t-TEST PAREADO – TEMPERATURA DE CABINA")
print("=" * 70)
print("\n📖 Enunciado:")
print(" La temperatura de cabina de Orion se ajustó de ~62.5°F a ~72.5°F.")
print(" Se midieron 15 sensores antes y después para evaluar el efecto.")
print("\n🔬 Hipótesis:")
print(" H₀: μ_diferencia = 0°F (el ajuste no cambió la temperatura)")
print(" H₁: μ_diferencia ≠ 0°F (el ajuste sí cambió la temperatura)")
print(f"\n📊 Estadísticos muestrales:")
print(f" Temperatura media antes = {temperaturas_antes.mean():.2f}°F")
print(f" Temperatura media después = {temperaturas_despues.mean():.2f}°F")
print(f" Diferencia media = {(temperaturas_despues - temperaturas_antes).mean():.2f}°F")
# Prueba t pareada
t_stat, p_value = stats.ttest_rel(temperaturas_despues, temperaturas_antes)
print(f"\n📈 Resultados de la prueba t pareada:")
print(f" Estadístico t = {t_stat:.4f}")
print(f" Grados de libertad = {len(temperaturas_antes)-1}")
print(f" p-valor = {p_value:.6f}")
alpha = 0.05
if p_value < alpha:
print(f"\n✅ Rechazamos H₀ (p < {alpha})")
print(" → El ajuste de temperatura fue estadísticamente significativo.")
else:
print(f"\n❌ No rechazamos H₀ (p ≥ {alpha})")
print(" → No hay evidencia suficiente de cambio significativo.")
# Intervalo de confianza para la diferencia media
diferencia = temperaturas_despues - temperaturas_antes
n = len(diferencia)
media_diff = diferencia.mean()
s_diff = diferencia.std(ddof=1)
error_estandar = s_diff / np.sqrt(n)
t_critico = stats.t.ppf(0.975, df=n-1)
ic_inferior = media_diff - t_critico * error_estandar
ic_superior = media_diff + t_critico * error_estandar
print(f"\n📊 Intervalo de confianza del 95% para la diferencia media:")
print(f" [{ic_inferior:.2f}°F, {ic_superior:.2f}°F]")
print(f" Interpretación: Con un 95% de confianza, el ajuste aumentó")
print(f" la temperatura entre {ic_inferior:.1f}°F y {ic_superior:.1f}°F.")
# Gráfico
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Gráfico 1: Antes vs Después
axes[0].scatter(temperaturas_antes, temperaturas_despues, alpha=0.7, color='steelblue', s=80)
axes[0].plot([55, 80], [55, 80], 'r--', linewidth=2, label='Línea de igualdad')
axes[0].set_xlabel('Temperatura antes (°F)')
axes[0].set_ylabel('Temperatura después (°F)')
axes[0].set_title('Comparación individual por sensor')
axes[0].legend()
# Gráfico 2: Distribución de diferencias
axes[1].hist(diferencia, bins=8, edgecolor='black', alpha=0.7, color='orange')
axes[1].axvline(0, color='red', linestyle='--', linewidth=2, label='Diferencia nula (0°F)')
axes[1].axvline(media_diff, color='green', linestyle='-', linewidth=2, label=f'Diferencia media ({media_diff:.1f}°F)')
axes[1].set_xlabel('Diferencia de temperatura (°F)')
axes[1].set_ylabel('Frecuencia')
axes[1].set_title('Distribución de diferencias (después - antes)')
axes[1].legend()
plt.tight_layout()
plt.show()
print("\n🔬 Conclusión final:")
print(" El ajuste de temperatura fue estadísticamente significativo.")
print(" En promedio, la temperatura aumentó aproximadamente 10°F,")
print(" mejorando el confort de los astronautas durante la misión.")
# ====================================================
# APLICACIÓN 3: t-TEST PAREADO – TEMPERATURA DE CABINA
# ====================================================
set.seed(123)
temperaturas_antes <- rnorm(15, mean = 62.5, sd = 2)
temperaturas_despues <- rnorm(15, mean = 72.5, sd = 2)
cat("\n", "=", rep("=", 68), "\n", sep="")
cat("📊 APLICACIÓN 3: t-TEST PAREADO – TEMPERATURA DE CABINA\n")
cat("=", rep("=", 68), "\n", sep="")
cat("\n📖 Enunciado:\n")
cat(" La temperatura de cabina de Orion se ajustó de ~62.5°F a ~72.5°F.\n")
cat(" Se midieron 15 sensores antes y después para evaluar el efecto.\n")
cat("\n🔬 Hipótesis:\n")
cat(" H₀: μ_diferencia = 0°F (el ajuste no cambió la temperatura)\n")
cat(" H₁: μ_diferencia ≠ 0°F (el ajuste sí cambió la temperatura)\n")
cat("\n📊 Estadísticos muestrales:\n")
cat(" Temperatura media antes =", round(mean(temperaturas_antes), 2), "°F\n")
cat(" Temperatura media después =", round(mean(temperaturas_despues), 2), "°F\n")
cat(" Diferencia media =", round(mean(temperaturas_despues - temperaturas_antes), 2), "°F\n")
# Prueba t pareada
resultado <- t.test(temperaturas_despues, temperaturas_antes, paired = TRUE)
cat("\n📈 Resultados de la prueba t pareada:\n")
cat(" Estadístico t =", resultado$statistic, "\n")
cat(" Grados de libertad =", resultado$parameter, "\n")
cat(" p-valor =", resultado$p.value, "\n")
alpha <- 0.05
if (resultado$p.value < alpha) {
cat("\n✅ Rechazamos H₀ (p <", alpha, ")\n")
cat(" → El ajuste de temperatura fue estadísticamente significativo.\n")
} else {
cat("\n❌ No rechazamos H₀ (p ≥", alpha, ")\n")
cat(" → No hay evidencia suficiente de cambio significativo.\n")
}
# Intervalo de confianza
cat("\n📊 Intervalo de confianza del 95% para la diferencia media:\n")
cat(" [", round(resultado$conf.int[1], 2), "°F, ",
round(resultado$conf.int[2], 2), "°F]\n", sep="")
cat(" Interpretación: Con un 95% de confianza, el ajuste aumentó\n")
cat(" la temperatura entre", round(resultado$conf.int[1], 1), "°F y",
round(resultado$conf.int[2], 1), "°F.\n")
# Gráfico
par(mfrow = c(1, 2))
# Gráfico 1: Antes vs Después
plot(temperaturas_antes, temperaturas_despues,
xlab = "Temperatura antes (°F)", ylab = "Temperatura después (°F)",
main = "Comparación individual por sensor",
pch = 19, col = "steelblue", cex = 1.5)
abline(0, 1, col = "red", lwd = 2, lty = 2)
legend("topleft", legend = "Línea de igualdad", col = "red", lwd = 2, lty = 2)
# Gráfico 2: Distribución de diferencias
diferencia <- temperaturas_despues - temperaturas_antes
hist(diferencia, breaks = 8, col = "orange", border = "black",
main = "Distribución de diferencias (después - antes)",
xlab = "Diferencia de temperatura (°F)", ylab = "Frecuencia")
abline(v = 0, col = "red", lwd = 2, lty = 2)
abline(v = mean(diferencia), col = "green", lwd = 2)
legend("topright", legend = c("Diferencia nula (0°F)", paste0("Diferencia media (", round(mean(diferencia),1), "°F)")),
col = c("red", "green"), lwd = 2, lty = c(2, 1))
par(mfrow = c(1, 1))
cat("\n🔬 Conclusión final:\n")
cat(" El ajuste de temperatura fue estadísticamente significativo.\n")
cat(" En promedio, la temperatura aumentó aproximadamente 10°F,\n")
cat(" mejorando el confort de los astronautas durante la misión.\n")
La comunicación entre Orion y la Tierra se realiza a través de la Red de Espacio Profundo (DSN). Se sabe que a 296,000 km la tasa de datos es de 6 Mbps. Se desea modelar la relación entre la distancia a la Tierra y la tasa de datos de telemetría para predecir el rendimiento en diferentes puntos de la misión.
Objetivos: - Determinar si existe una relación lineal significativa entre distancia y tasa de datos - Estimar el intervalo de confianza para la pendiente - Predecir la tasa de datos a 500,000 km
# ====================================================
# APLICACIÓN 4: REGRESIÓN LINEAL – DISTANCIA VS TASA DE DATOS
# ====================================================
import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
np.random.seed(456)
distancias = np.array([50000, 100000, 150000, 200000, 250000, 296000, 350000, 400000])
tasa_datos = 6.5 - 0.000008 * distancias + np.random.normal(0, 0.1, size=len(distancias))
tasa_datos = np.maximum(tasa_datos, 3.0)
print("\n" + "=" * 70)
print("📊 APLICACIÓN 4: REGRESIÓN LINEAL – DISTANCIA VS TASA DE DATOS")
print("=" * 70)
print("\n📖 Enunciado:")
print(" La comunicación Orion-Tierra usa la Red de Espacio Profundo (DSN).")
print(" A 296,000 km, la tasa de datos es de 6 Mbps.")
print(" Se modela la relación distancia vs tasa de datos para predicciones.")
# Regresión lineal
slope, intercept, r_value, p_value, std_err = stats.linregress(distancias, tasa_datos)
print(f"\n📊 Resultados de regresión lineal:")
print(f" Ecuación: Tasa = {intercept:.4f} + ({slope:.8f}) × Distancia")
print(f" Coeficiente de correlación (r) = {r_value:.4f}")
print(f" Coeficiente de determinación (r²) = {r_value**2:.4f}")
print(f" p-valor (pendiente ≠ 0) = {p_value:.6f}")
print(f" Error estándar de la pendiente = {std_err:.8f}")
# Intervalos de confianza
n = len(distancias)
t_critico = stats.t.ppf(0.975, df=n-2)
# IC para la pendiente
ic_slope_inferior = slope - t_critico * std_err
ic_slope_superior = slope + t_critico * std_err
print(f"\n📊 Intervalo de confianza del 95% para la pendiente:")
print(f" [{ic_slope_inferior:.8f}, {ic_slope_superior:.8f}]")
if p_value < 0.05:
print(f"\n✅ La relación lineal es estadísticamente significativa (p < 0.05).")
print(" → La tasa de datos disminuye significativamente con la distancia.")
else:
print(f"\n❌ No hay evidencia suficiente de relación lineal.")
# Predicción
distancia_pred = 500000
tasa_pred = intercept + slope * distancia_pred
print(f"\n🔮 Predicción a {distancia_pred:,} km: {tasa_pred:.2f} Mbps")
# Gráfico
plt.figure(figsize=(10, 6))
plt.scatter(distancias, tasa_datos, color='steelblue', s=100, label='Datos observados')
plt.plot(distancias, intercept + slope * distancias, 'r-', linewidth=2, label='Línea de regresión')
plt.axvline(296000, color='green', linestyle='--', linewidth=1.5, alpha=0.7, label='Distancia DSN (296,000 km)')
plt.axvline(distancia_pred, color='orange', linestyle='--', linewidth=1.5, alpha=0.7, label=f'Predicción a {distancia_pred:,} km')
plt.xlabel('Distancia a Tierra (km)')
plt.ylabel('Tasa de datos (Mbps)')
plt.title('Regresión lineal: Distancia vs Tasa de datos de telemetría')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
print("\n🔬 Conclusión final:")
print(" Existe una relación lineal negativa significativa entre distancia y tasa de datos.")
print(f" Por cada 100,000 km adicionales, la tasa disminuye aproximadamente {abs(slope)*100000:.2f} Mbps.")
print(f" A 500,000 km, se espera una tasa de aproximadamente {tasa_pred:.1f} Mbps.")
# ====================================================
# APLICACIÓN 4: REGRESIÓN LINEAL – DISTANCIA VS TASA DE DATOS
# ====================================================
set.seed(456)
distancias <- c(50000, 100000, 150000, 200000, 250000, 296000, 350000, 400000)
tasa_datos <- 6.5 - 0.000008 * distancias + rnorm(length(distancias), 0, 0.1)
tasa_datos <- pmax(tasa_datos, 3.0)
cat("\n", "=", rep("=", 68), "\n", sep="")
cat("📊 APLICACIÓN 4: REGRESIÓN LINEAL – DISTANCIA VS TASA DE DATOS\n")
cat("=", rep("=", 68), "\n", sep="")
cat("\n📖 Enunciado:\n")
cat(" La comunicación Orion-Tierra usa la Red de Espacio Profundo (DSN).\n")
cat(" A 296,000 km, la tasa de datos es de 6 Mbps.\n")
cat(" Se modela la relación distancia vs tasa de datos para predicciones.\n")
# Regresión lineal
modelo <- lm(tasa_datos ~ distancias)
summary_modelo <- summary(modelo)
cat("\n📊 Resultados de regresión lineal:\n")
cat(" Ecuación: Tasa =", round(coef(modelo)[1], 4), "+",
round(coef(modelo)[2], 8), "× Distancia\n")
cat(" Coeficiente de correlación (r) =", round(cor(distancias, tasa_datos), 4), "\n")
cat(" Coeficiente de determinación (r²) =", round(summary_modelo$r.squared, 4), "\n")
cat(" p-valor (pendiente ≠ 0) =", summary_modelo$coefficients[2, 4], "\n")
cat(" Error estándar de la pendiente =", summary_modelo$coefficients[2, 2], "\n")
# Intervalo de confianza para la pendiente
ic_pendiente <- confint(modelo, "distancias", level = 0.95)
cat("\n📊 Intervalo de confianza del 95% para la pendiente:\n")
cat(" [", round(ic_pendiente[1], 8), ", ", round(ic_pendiente[2], 8), "]\n", sep="")
if (summary_modelo$coefficients[2, 4] < 0.05) {
cat("\n✅ La relación lineal es estadísticamente significativa (p < 0.05).\n")
cat(" → La tasa de datos disminuye significativamente con la distancia.\n")
} else {
cat("\n❌ No hay evidencia suficiente de relación lineal.\n")
}
# Predicción
distancia_pred <- 500000
tasa_pred <- predict(modelo, newdata = data.frame(distancias = distancia_pred))
cat("\n🔮 Predicción a", format(distancia_pred, big.mark = ","), "km:", round(tasa_pred, 2), "Mbps\n")
# Gráfico
plot(distancias, tasa_datos, col = "steelblue", pch = 19, cex = 1.5,
xlab = "Distancia a Tierra (km)", ylab = "Tasa de datos (Mbps)",
main = "Regresión lineal: Distancia vs Tasa de datos de telemetría")
abline(modelo, col = "red", lwd = 2)
abline(v = 296000, col = "green", lwd = 1.5, lty = 2)
abline(v = distancia_pred, col = "orange", lwd = 1.5, lty = 2)
legend("topright", legend = c("Datos observados", "Línea de regresión",
"Distancia DSN (296,000 km)",
paste0("Predicción a ", format(distancia_pred, big.mark = ","), " km")),
col = c("steelblue", "red", "green", "orange"), pch = c(19, NA, NA, NA),
lwd = c(NA, 2, 1.5, 1.5), lty = c(NA, 1, 2, 2))
cat("\n🔬 Conclusión final:\n")
cat(" Existe una relación lineal negativa significativa entre distancia y tasa de datos.\n")
cat(" Por cada 100,000 km adicionales, la tasa disminuye aproximadamente",
round(abs(coef(modelo)[2]) * 100000, 2), "Mbps.\n")
cat(" A", format(distancia_pred, big.mark = ","), "km, se espera una tasa de aproximadamente",
round(tasa_pred, 1), "Mbps.\n")
| Aplicación | Variable | IC 95% | Conclusión |
|---|---|---|---|
| 1. Propulsor | Desviación del consumo | [2.99%, 3.69%] | El consumo real difiere significativamente del esperado, pero está dentro del margen del 5% |
| 2. Velocidad de reentrada | Velocidad media | [24,945 mph, 25,055 mph] | El valor reportado (25,000 mph) es plausible; Orion alcanzará velocidades récord |
| 3. Temperatura de cabina | Diferencia media | [9.2°F, 10.5°F] | El ajuste fue efectivo y estadísticamente significativo |
| 4. Comunicaciones | Pendiente (tasa/distancia) | [-8.14e-6, -7.86e-6] | Relación negativa significativa; la tasa disminuye con la distancia |