Calcular Akaike Weights en R

Calculadora de Pesos Akaike (AIC Weights) en R – Guía Completa :root { –primary-color: #004a99; –success-color: #28a745; –background-color: #f8f9fa; –text-color: #333; –border-color: #ddd; –card-background: #fff; –error-color: #dc3545; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(–background-color); color: var(–text-color); line-height: 1.6; margin: 0; padding: 0; } .container { max-width: 960px; margin: 20px auto; padding: 20px; background-color: var(–card-background); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } h1, h2, h3 { color: var(–primary-color); text-align: center; margin-bottom: 20px; } h1 { font-size: 2.2em; } h2 { font-size: 1.8em; margin-top: 30px; border-bottom: 2px solid var(–primary-color); padding-bottom: 10px; } h3 { font-size: 1.4em; margin-top: 25px; } .calculator-section { background-color: var(–card-background); padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); margin-bottom: 30px; } .calculator-section h2 { margin-top: 0; margin-bottom: 25px; } .input-group { margin-bottom: 20px; text-align: left; } .input-group label { display: block; margin-bottom: 8px; font-weight: bold; color: var(–primary-color); } .input-group input[type="number"], .input-group input[type="text"], .input-group select { width: calc(100% – 22px); padding: 10px; border: 1px solid var(–border-color); border-radius: 4px; font-size: 1em; box-sizing: border-box; } .input-group input[type="number"]:focus, .input-group input[type="text"]:focus, .input-group select:focus { border-color: var(–primary-color); outline: none; box-shadow: 0 0 0 2px rgba(0, 74, 153, 0.2); } .input-group .helper-text { font-size: 0.85em; color: #6c757d; margin-top: 5px; display: block; } .error-message { color: var(–error-color); font-size: 0.85em; margin-top: 5px; display: none; /* Hidden by default */ height: 1.2em; /* Reserve space */ } .error-message.visible { display: block; } .button-group { display: flex; justify-content: space-between; margin-top: 25px; flex-wrap: wrap; gap: 10px; } .button-group button { padding: 12px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 1em; font-weight: bold; transition: background-color 0.3s ease, transform 0.2s ease; flex: 1; min-width: 150px; } .button-group button.primary { background-color: var(–primary-color); color: white; } .button-group button.primary:hover { background-color: #003366; transform: translateY(-2px); } .button-group button.secondary { background-color: #6c757d; color: white; } .button-group button.secondary:hover { background-color: #5a6268; transform: translateY(-2px); } .results-container { margin-top: 30px; padding: 25px; background-color: #e9ecef; border-radius: 8px; border: 1px solid var(–border-color); text-align: center; } .results-container h3 { margin-top: 0; color: var(–primary-color); } .main-result { font-size: 2.5em; font-weight: bold; color: var(–success-color); margin: 15px 0; padding: 15px; background-color: rgba(40, 167, 69, 0.1); border-radius: 5px; display: inline-block; min-width: 200px; } .intermediate-results div { margin-bottom: 10px; font-size: 1.1em; } .intermediate-results span { font-weight: bold; color: var(–primary-color); } .formula-explanation { font-size: 0.9em; color: #6c757d; margin-top: 20px; padding-top: 15px; border-top: 1px dashed var(–border-color); } .chart-container { margin-top: 30px; padding: 20px; background-color: var(–card-background); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); text-align: center; } .chart-container canvas { max-width: 100%; height: auto; } .chart-caption { font-size: 0.9em; color: #6c757d; margin-top: 10px; display: block; } .table-container { margin-top: 30px; overflow-x: auto; } .table-container table { width: 100%; border-collapse: collapse; margin-bottom: 20px; } .table-container th, .table-container td { padding: 12px 15px; border: 1px solid var(–border-color); text-align: right; } .table-container th { background-color: var(–primary-color); color: white; font-weight: bold; text-align: center; } .table-container td { background-color: var(–card-background); } .table-container tr:nth-child(even) td { background-color: #f2f2f2; } .table-caption { font-size: 0.9em; color: #6c757d; margin-bottom: 10px; display: block; text-align: center; } .article-content { margin-top: 40px; background-color: var(–card-background); padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); } .article-content p, .article-content ul, .article-content ol { margin-bottom: 15px; font-size: 1.05em; } .article-content ul, .article-content ol { padding-left: 25px; } .article-content li { margin-bottom: 8px; } .article-content a { color: var(–primary-color); text-decoration: none; font-weight: bold; } .article-content a:hover { text-decoration: underline; } .faq-item { margin-bottom: 15px; padding: 10px; border-left: 3px solid var(–primary-color); background-color: #fdfdfd; } .faq-item strong { color: var(–primary-color); display: block; margin-bottom: 5px; } .related-links ul { list-style: none; padding: 0; } .related-links li { margin-bottom: 10px; } .related-links a { font-weight: normal; } .related-links span { font-size: 0.9em; color: #6c757d; display: block; margin-top: 3px; } .highlight { background-color: var(–success-color); color: white; padding: 2px 5px; border-radius: 3px; font-weight: bold; } .text-center { text-align: center; } .text-primary { color: var(–primary-color); } .font-bold { font-weight: bold; } .mb-10 { margin-bottom: 10px; } .mt-20 { margin-top: 20px; } .pb-10 { padding-bottom: 10px; } .pt-10 { padding-top: 10px; } .w-100 { width: 100%; } .d-inline-block { display: inline-block; } .flex { display: flex; } .justify-content-center { justify-content: center; } .gap-10 { gap: 10px; } @media (max-width: 768px) { .container { margin: 10px; padding: 15px; } h1 { font-size: 1.8em; } h2 { font-size: 1.5em; } .button-group button { flex: 1 1 100%; min-width: unset; } }

Calculadora de Pesos Akaike (AIC Weights) en R

Compara modelos estadísticos y determina la importancia relativa de cada uno usando los pesos Akaike (AIC weights).

Calculadora de Pesos Akaike

Introduce los valores AIC de tus modelos, separados por comas.

Resultados

Fórmula Simplificada:
1. Calcular la diferencia mínima de AIC (ΔAIC) para cada modelo.
2. Calcular el factor de ponderación exponencial (exp(-0.5 * ΔAIC)).
3. Sumar todos los factores de ponderación.
4. Dividir cada factor de ponderación por la suma total para obtener los pesos Akaike (w_i).

Visualización de Pesos Akaike

Distribución de los Pesos Akaike entre los Modelos
Resumen de Modelos y Pesos Akaike
Modelo AIC ΔAIC exp(-0.5 * ΔAIC) Peso Akaike (w_i)

¿Qué son los Pesos Akaike (AIC Weights)?

Los pesos Akaike, también conocidos como AIC weights, son una métrica fundamental en la inferencia basada en el modelo de información de Akaike (AIC). En esencia, los pesos Akaike cuantifican la probabilidad relativa de que un modelo específico sea el mejor modelo dentro de un conjunto de modelos candidatos, dado el conjunto de datos observado. Cuando se trabaja con múltiples modelos estadísticos para explicar un fenómeno, es crucial poder compararlos y determinar cuáles son más plausibles. Los pesos Akaike proporcionan una forma robusta y matemáticamente fundamentada de hacer esta comparación, permitiendo a los investigadores tomar decisiones informadas sobre qué modelo(s) retener o utilizar para la predicción o inferencia.

¿Quién debería usar los Pesos Akaike? Cualquier investigador, analista de datos o estadístico que esté involucrado en la selección de modelos. Esto incluye a profesionales en campos como la ecología, la biología, la economía, la medicina, la ingeniería y las ciencias sociales, donde la modelización estadística es una herramienta común. Si te enfrentas a la tarea de elegir entre varias hipótesis o estructuras de modelos, los pesos Akaike son una herramienta invaluable.

Errores Comunes sobre los Pesos Akaike:

  • Confundirlos con p-valores: Los pesos Akaike no indican la significancia estadística de un modelo en el sentido tradicional de los p-valores. Se centran en la bondad de ajuste y la parsimonia, no en la probabilidad de observar los datos si la hipótesis nula fuera cierta.
  • Asumir que un peso del 100% es definitivo: Un peso Akaike alto para un modelo indica que es el más probable *dentro del conjunto evaluado*. No garantiza que sea el modelo "verdadero" o que funcionará bien con nuevos datos.
  • Ignorar la calidad del ajuste: Un modelo con un peso alto pero un AIC muy elevado puede no ser un buen modelo en términos absolutos, solo el "menos malo" de los comparados.

Fórmula y Explicación Matemática de los Pesos Akaike

El cálculo de los pesos Akaike (w_i) se deriva directamente del Criterio de Información de Akaike (AIC). El proceso general implica comparar el AIC de cada modelo con el AIC del modelo con el valor AIC más bajo dentro del conjunto de modelos considerados.

La fórmula para el AIC de un modelo i es:

AICi = 2ki – 2ln(Li)

Donde:

  • ki es el número de parámetros estimados en el modelo i.
  • Li es la verosimilitud máxima (maximum likelihood) del modelo i.

El proceso para calcular los pesos Akaike (wi) para un conjunto de K modelos es el siguiente:

  1. Calcular el AIC para cada modelo: Obtener AIC1, AIC2, …, AICK.
  2. Encontrar el AIC mínimo: Identificar el valor AIC más bajo en el conjunto: AICmin = min(AIC1, AIC2, …, AICK).
  3. Calcular la diferencia de AIC (ΔAIC): Para cada modelo i, calcular ΔAICi = AICi – AICmin. Esto indica cuánto peor es el modelo i en comparación con el mejor modelo.
  4. Calcular el factor de ponderación exponencial: Para cada modelo i, calcular el término de "evidencia relativa": exp(-0.5 * ΔAICi). Este término es proporcional a la probabilidad de que el modelo i sea el mejor.
  5. Sumar los factores exponenciales: Calcular la suma total de estos factores para todos los modelos: Σj=1K exp(-0.5 * ΔAICj).
  6. Calcular los Pesos Akaike (wi): Finalmente, el peso Akaike para el modelo i se calcula como:

    wi = exp(-0.5 * ΔAICi) / Σj=1K exp(-0.5 * ΔAICj)

La suma de todos los pesos Akaike (Σ wi) siempre será igual a 1. Un peso wi más alto indica una mayor probabilidad relativa de que el modelo i sea el mejor modelo dentro del conjunto considerado.

Tabla de Variables

Variable Significado Unidad Rango Típico
AICi Criterio de Información de Akaike para el modelo i Unidades de información (adimensional) Generalmente positivo, puede ser alto
ki Número de parámetros en el modelo i Conteo (entero) ≥ 1
ln(Li) Logaritmo natural de la verosimilitud máxima del modelo i Logaritmo de la verosimilitud (adimensional) Cualquier valor real (generalmente negativo)
AICmin Valor mínimo de AIC entre todos los modelos Unidades de información (adimensional) Igual o menor que cualquier AICi
ΔAICi Diferencia entre AICi y AICmin Unidades de información (adimensional) ≥ 0
exp(-0.5 * ΔAICi) Factor de evidencia relativa Adimensional (0, 1]
wi Peso Akaike del modelo i Probabilidad relativa (adimensional) [0, 1]

Ejemplos Prácticos (Casos de Uso Reales)

Los pesos Akaike son herramientas versátiles aplicadas en diversas áreas. Aquí presentamos dos ejemplos:

Ejemplo 1: Selección de un Modelo de Regresión en Ecología

Un ecólogo está estudiando la relación entre la biomasa de una planta (variable dependiente) y varios factores ambientales como la precipitación, la temperatura y la radiación solar (variables independientes). Ha ajustado cuatro modelos de regresión lineal múltiple:

  • Modelo 1: Biomasa ~ Precipitación + Temperatura
  • Modelo 2: Biomasa ~ Precipitación + Radiación Solar
  • Modelo 3: Biomasa ~ Precipitación
  • Modelo 4: Biomasa ~ Precipitación + Temperatura + Radiación Solar

Después de ajustar los modelos en R y obtener sus respectivos valores AIC, los resultados son:

  • Modelo 1 AIC: 150.5
  • Modelo 2 AIC: 145.2
  • Modelo 3 AIC: 160.1
  • Modelo 4 AIC: 148.0

Cálculo y Análisis:

  1. AICmin = 145.2 (Modelo 2)
  2. ΔAIC:
    • ΔAIC1 = 150.5 – 145.2 = 5.3
    • ΔAIC2 = 145.2 – 145.2 = 0.0
    • ΔAIC3 = 160.1 – 145.2 = 14.9
    • ΔAIC4 = 148.0 – 145.2 = 2.8
  3. Factores Exponenciales:
    • exp(-0.5 * 5.3) ≈ 0.067
    • exp(-0.5 * 0.0) = 1.000
    • exp(-0.5 * 14.9) ≈ 0.0005
    • exp(-0.5 * 2.8) ≈ 0.247
  4. Suma de Factores = 0.067 + 1.000 + 0.0005 + 0.247 ≈ 1.3145
  5. Pesos Akaike (wi):
    • w1 = 0.067 / 1.3145 ≈ 0.051 (5.1%)
    • w2 = 1.000 / 1.3145 ≈ 0.761 (76.1%)
    • w3 = 0.0005 / 1.3145 ≈ 0.0004 (0.04%)
    • w4 = 0.247 / 1.3145 ≈ 0.188 (18.8%)

Interpretación: El Modelo 2 (Biomasa ~ Precipitación + Radiación Solar) tiene el peso Akaike más alto (76.1%), lo que indica que es el modelo más probable dentro de este conjunto. El Modelo 4 también tiene un peso considerable (18.8%), sugiriendo que la adición de la temperatura podría ser útil, aunque no tan importante como la radiación solar. Los Modelos 1 y 3 son considerablemente menos probables. El ecólogo podría optar por usar el Modelo 2 para futuras predicciones o análisis, o considerar un modelo promediado ponderado por los pesos Akaike si el Modelo 4 también es de interés.

Ejemplo 2: Comparación de Modelos de Series Temporales en Finanzas

Un analista financiero está modelando el rendimiento diario de una acción y compara tres modelos:

  • Modelo A: AR(1) – Autoregresión de orden 1
  • Modelo B: MA(1) – Media Móvil de orden 1
  • Modelo C: ARMA(1,1) – Modelo combinado

Los valores AIC obtenidos son:

  • Modelo A AIC: 5420.8
  • Modelo B AIC: 5418.5
  • Modelo C AIC: 5415.1

Cálculo y Análisis:

  1. AICmin = 5415.1 (Modelo C)
  2. ΔAIC:
    • ΔAICA = 5420.8 – 5415.1 = 5.7
    • ΔAICB = 5418.5 – 5415.1 = 3.4
    • ΔAICC = 5415.1 – 5415.1 = 0.0
  3. Factores Exponenciales:
    • exp(-0.5 * 5.7) ≈ 0.050
    • exp(-0.5 * 3.4) ≈ 0.183
    • exp(-0.5 * 0.0) = 1.000
  4. Suma de Factores = 0.050 + 0.183 + 1.000 = 1.233
  5. Pesos Akaike (wi):
    • wA = 0.050 / 1.233 ≈ 0.041 (4.1%)
    • wB = 0.183 / 1.233 ≈ 0.148 (14.8%)
    • wC = 1.000 / 1.233 ≈ 0.811 (81.1%)

Interpretación: El Modelo C (ARMA(1,1)) es claramente el modelo preferido, con un peso Akaike del 81.1%. Los Modelos A y B tienen pesos mucho más bajos, indicando que son considerablemente menos probables que el Modelo C. El analista debería centrarse en el Modelo C para pronosticar los rendimientos futuros de la acción, ya que representa la mejor combinación de ajuste y parsimonia dentro de los modelos evaluados.

Cómo Usar Esta Calculadora de Pesos Akaike

Nuestra calculadora está diseñada para ser intuitiva y fácil de usar. Sigue estos pasos para obtener tus pesos Akaike:

  1. Introduce los Valores AIC: En el campo "Valores AIC de los Modelos", ingresa los valores AIC de cada uno de tus modelos estadísticos. Asegúrate de separarlos con comas. Por ejemplo: `150.5, 145.2, 160.1`.
  2. Haz Clic en "Calcular Pesos": Una vez que hayas introducido los valores, presiona el botón "Calcular Pesos". La calculadora procesará los números inmediatamente.
  3. Revisa los Resultados: Verás un resumen claro:
    • Resultado Principal: El peso Akaike más alto, indicando el modelo más probable.
    • Valores Intermedios: Se mostrarán el AIC mínimo, las diferencias de AIC (ΔAIC), los factores exponenciales y la suma total de estos factores.
    • Tabla Resumen: Una tabla detallada que compara cada modelo con su AIC, ΔAIC, factor exponencial y peso Akaike final.
    • Gráfico: Una visualización de barras que muestra la distribución de los pesos Akaike entre tus modelos.
  4. Interpreta los Pesos: Los pesos Akaike representan la probabilidad relativa de cada modelo. Un modelo con un peso de 0.7 (70%) es significativamente más probable que uno con un peso de 0.1 (10%). Puedes usar estos pesos para:
    • Seleccionar el mejor modelo.
    • Realizar inferencia promediada por modelos (model averaging), donde las estimaciones se basan en una combinación ponderada de los resultados de varios modelos.
    • Evaluar la plausibilidad de diferentes hipótesis representadas por los modelos.
  5. Usa los Botones Adicionales:
    • Restablecer: Borra las entradas y los resultados, devolviendo la calculadora a su estado inicial.
    • Copiar Resultados: Copia toda la información calculada (AIC, ΔAIC, pesos, etc.) al portapapeles para pegarla en un informe o documento.

Guía de Decisión:

  • Un modelo domina (wi > 0.9): Hay fuerte evidencia a favor de un único modelo.
  • Varios modelos son plausibles (varios wi > 0.1): Considera usar la inferencia promediada por modelos o investiga más para diferenciar entre estos modelos.
  • Todos los modelos tienen pesos bajos (todos wi < 0.1): Ninguno de los modelos propuestos se ajusta bien a los datos, o el conjunto de modelos es inadecuado. Podría ser necesario revisar la estructura de los modelos o considerar variables adicionales.

Factores Clave que Afectan los Resultados de los Pesos Akaike

Si bien el cálculo de los pesos Akaike es directo, la interpretación y la calidad de los resultados dependen de varios factores relacionados con los modelos y los datos:

  1. Calidad del Ajuste (AIC): El valor AIC en sí mismo es crucial. Un modelo puede tener el peso Akaike más alto, pero si su AIC es muy grande en comparación con un AIC de referencia absoluto (aunque no existe tal cosa universalmente definida), el modelo podría no ser útil en la práctica. El AIC penaliza la complejidad, pero un modelo simple con un mal ajuste no será favorecido.
  2. Número de Parámetros (k): El AIC penaliza modelos con más parámetros. Si dos modelos tienen un ajuste similar (similar ln(L)), el modelo con menos parámetros (menor k) tendrá un AIC más bajo y, por lo tanto, tenderá a recibir un peso Akaike mayor. Esto fomenta la parsimonia.
  3. Tamaño de la Muestra (n): Aunque no aparece explícitamente en la fórmula del AIC (que se basa en k y L), el tamaño de la muestra influye indirectamente. Con muestras más grandes, la estimación de la verosimilitud es más estable, y la penalización por parámetros adicionales se vuelve más significativa. El AIC tiende a favorecer modelos más complejos con muestras muy grandes, pero los pesos Akaike ayudan a cuantificar esta preferencia relativa.
  4. Conjunto de Modelos Candidatos: Los pesos Akaike son relativos al conjunto de modelos que se están comparando. Si el "verdadero" modelo generador de datos no está incluido en el conjunto, los pesos indicarán cuál de los modelos *evaluados* es el mejor, no necesariamente el mejor modelo posible. Es fundamental incluir modelos teóricamente justificados y competitivos.
  5. Supuestos del Modelo: Cada modelo tiene supuestos subyacentes (e.g., linealidad, independencia de errores, normalidad). Si estos supuestos se violan, el AIC y, por ende, los pesos Akaike calculados pueden ser engañosos. Es vital realizar diagnósticos de los residuos y verificar los supuestos del modelo.
  6. Calidad de los Datos: Errores en la medición, valores atípicos o datos faltantes pueden afectar la verosimilitud y, por lo tanto, el AIC y los pesos. La limpieza y el preprocesamiento adecuados de los datos son pasos previos esenciales antes de la modelización.
  7. Objetivo del Análisis: ¿El objetivo es la predicción o la inferencia? Para la predicción, un modelo con un peso ligeramente menor pero que captura mejor la dinámica subyacente podría ser preferible. Para la inferencia (entender las relaciones), la interpretabilidad y la significancia de los parámetros individuales son más importantes, y los pesos Akaike ayudan a priorizar qué modelos investigar más a fondo.

Preguntas Frecuentes (FAQ)

¿Qué significa si un modelo tiene un peso Akaike de 1.0?

Significa que ese modelo es el único modelo en tu conjunto que tiene el valor AIC más bajo (ΔAIC = 0), y todos los demás modelos tienen valores AIC más altos. En este caso, hay una fuerte evidencia a favor de ese modelo específico dentro del conjunto evaluado.

¿Puedo usar los pesos Akaike para probar hipótesis?

Sí, indirectamente. Puedes formular modelos que representen diferentes hipótesis y usar los pesos Akaike para evaluar la evidencia relativa a favor de cada hipótesis.

¿Qué hago si todos los pesos Akaike son muy bajos (e.g., < 0.1)?

Esto sugiere que ninguno de los modelos propuestos se ajusta bien a los datos, o que la incertidumbre entre los modelos es muy alta. Podrías necesitar considerar modelos más complejos, modelos más simples, o incluir variables predictoras adicionales.

¿Los pesos Akaike son lo mismo que la probabilidad de que el modelo sea "verdadero"?

No exactamente. Los pesos Akaike representan la probabilidad relativa de que un modelo sea el "mejor" modelo *dentro del conjunto de modelos considerados*, dado el conjunto de datos. No son una probabilidad absoluta de verdad.

¿Cómo se implementan los pesos Akaike en R?

Puedes calcularlos manualmente usando las fórmulas, pero paquetes como `MuMIn` (con la función `aictab`) o `AICcmodavg` simplifican enormemente este proceso, calculando AIC, ΔAIC, pesos y otras métricas útiles automáticamente.

¿Es necesario que los modelos tengan el mismo número de parámetros para usar AIC y pesos Akaike?

No, esa es una de las ventajas del AIC. Está diseñado para comparar modelos con diferente número de parámetros, penalizando la complejidad.

¿Qué pasa si uso AICc (AIC corregido) en lugar de AIC?

Si usas AICc (recomendado para muestras pequeñas), el proceso de cálculo de los pesos es idéntico, pero usarás las diferencias de AICc (ΔAICc) y los pesos derivados de ellas (wic). El principio es el mismo: comparar la bondad de ajuste y la parsimonia.

¿Puedo promediar predicciones de modelos usando los pesos Akaike?

Sí, esta es una aplicación común. La predicción promediada por modelos (model-averaged prediction) se calcula como la suma ponderada de las predicciones de cada modelo, donde los pesos son los pesos Akaike. Esto a menudo produce predicciones más robustas y precisas que las de cualquier modelo individual.

Herramientas Relacionadas y Recursos Internos

© 2023 Tu Sitio Web. Todos los derechos reservados.

var chartInstance = null; // Global variable to hold chart instance function getElement(id) { return document.getElementById(id); } function clearErrorMessages() { var errorElements = document.querySelectorAll('.error-message'); for (var i = 0; i < errorElements.length; i++) { errorElements[i].classList.remove('visible'); errorElements[i].textContent = ''; } } function displayError(elementId, message) { var errorElement = getElement(elementId + 'Error'); if (errorElement) { errorElement.textContent = message; errorElement.classList.add('visible'); } } function isValidNumber(value) { return !isNaN(parseFloat(value)) && isFinite(value); } function calculateAkaikeWeights() { clearErrorMessages(); var aicValuesInput = getElement('modelAICValues'); var aicValuesStr = aicValuesInput.value.trim(); if (aicValuesStr === "") { displayError('modelAICValues', 'Por favor, introduce los valores AIC.'); return; } var aicValues = aicValuesStr.split(',').map(function(val) { return parseFloat(val.trim()); }); var validAicValues = []; for (var i = 0; i < aicValues.length; i++) { if (!isValidNumber(aicValues[i])) { displayError('modelAICValues', 'Introduce solo números válidos separados por comas.'); return; } validAicValues.push(aicValues[i]); } if (validAicValues.length < 2) { displayError('modelAICValues', 'Se necesitan al menos dos valores AIC para comparar modelos.'); return; } var aicMin = Math.min.apply(null, validAicValues); var deltaAICs = []; var expFactors = []; var sumExpFactors = 0; for (var i = 0; i < validAicValues.length; i++) { var deltaAIC = validAicValues[i] – aicMin; deltaAICs.push(deltaAIC); var expFactor = Math.exp(-0.5 * deltaAIC); expFactors.push(expFactor); sumExpFactors += expFactor; } var akaikeWeights = []; for (var i = 0; i < expFactors.length; i++) { akaikeWeights.push(expFactors[i] / sumExpFactors); } var resultsContainer = getElement('results-container'); var mainResultElement = getElement('main-result'); var deltaAICElement = getElement('deltaAIC'); var relativeAICElement = getElement('relativeAIC'); var sumAICElement = getElement('sumAIC'); var maxWeight = Math.max.apply(null, akaikeWeights); var maxWeightIndex = akaikeWeights.indexOf(maxWeight); var bestModelName = "Modelo " + (maxWeightIndex + 1); mainResultElement.textContent = maxWeight.toFixed(4); deltaAICElement.innerHTML = "AIC Mínimo (AICmin): " + aicMin.toFixed(2) + ""; relativeAICElement.innerHTML = "Suma de Factores Exp: " + sumExpFactors.toFixed(4) + ""; sumAICElement.innerHTML = "Mejor Modelo Relativo: " + bestModelName + " (w = " + maxWeight.toFixed(4) + ")"; resultsContainer.style.display = 'block'; updateTable(validAicValues, deltaAICs, expFactors, akaikeWeights); updateChart(akaikeWeights, bestModelName); } function updateTable(aics, deltaAICs, expFactors, weights) { var tableBody = getElement('resultsTable').getElementsByTagName('tbody')[0]; tableBody.innerHTML = "; // Clear previous rows for (var i = 0; i < aics.length; i++) { var row = tableBody.insertRow(); var modelName = "Modelo " + (i + 1); var cellModel = row.insertCell(); cellModel.textContent = modelName; var cellAIC = row.insertCell(); cellAIC.textContent = aics[i].toFixed(2); var cellDeltaAIC = row.insertCell(); cellDeltaAIC.textContent = deltaAICs[i].toFixed(2); var cellExpFactor = row.insertCell(); cellExpFactor.textContent = expFactors[i].toFixed(4); var cellWeight = row.insertCell(); cellWeight.textContent = weights[i].toFixed(4); } } function updateChart(weights, bestModelName) { var ctx = getElement('weightsChart').getContext('2d'); // Destroy previous chart instance if it exists if (chartInstance) { chartInstance.destroy(); } var labels = []; var data = []; for (var i = 0; i < weights.length; i++) { labels.push("Modelo " + (i + 1)); data.push(weights[i]); } chartInstance = new Chart(ctx, { type: 'bar', data: { labels: labels, datasets: [{ label: 'Peso Akaike (w_i)', data: data, backgroundColor: 'rgba(0, 74, 153, 0.6)', borderColor: 'rgba(0, 74, 153, 1)', borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, title: { display: true, text: 'Probabilidad Relativa' }, ticks: { callback: function(value) { return value.toFixed(3); } } }, x: { title: { display: true, text: 'Modelos' } } }, plugins: { legend: { display: false // Hide legend as we only have one dataset }, title: { display: true, text: 'Distribución de Pesos Akaike' } } } }); } function resetCalculator() { getElement('modelAICValues').value = ''; getElement('results-container').style.display = 'none'; clearErrorMessages(); if (chartInstance) { chartInstance.destroy(); chartInstance = null; } var tableBody = getElement('resultsTable').getElementsByTagName('tbody')[0]; tableBody.innerHTML = ''; } function copyResults() { var mainResult = getElement('main-result').textContent; var deltaAIC = getElement('deltaAIC').textContent; var relativeAIC = getElement('relativeAIC').textContent; var sumAIC = getElement('sumAIC').textContent; var table = getElement('resultsTable'); var tableRows = table.getElementsByTagName('tbody')[0].rows; var assumptions = "Supuestos:\n- Modelos comparados: " + tableRows.length + "\n- Datos observados.\n\n"; var tableContent = "Resultados Principales:\n"; tableContent += "Mejor Modelo Relativo: " + mainResult + "\n"; tableContent += deltaAIC.replace(/]*>/g,"") + "\n"; // Remove span tags tableContent += relativeAIC.replace(/]*>/g,"") + "\n"; tableContent += sumAIC.replace(/]*>/g,"") + "\n\n"; tableContent += "Detalle por Modelo:\n"; tableContent += "Modelo\tAIC\tΔAIC\tExp(-0.5*ΔAIC)\tPeso Akaike (w_i)\n"; for (var i = 0; i < tableRows.length; i++) { var cells = tableRows[i].cells; tableContent += cells[0].textContent + "\t"; tableContent += cells[1].textContent + "\t"; tableContent += cells[2].textContent + "\t"; tableContent += cells[3].textContent + "\t"; tableContent += cells[4].textContent + "\n"; } var textToCopy = assumptions + tableContent; navigator.clipboard.writeText(textToCopy).then(function() { // Optionally provide feedback to the user var copyButton = getElement('copyButton'); // Assuming you add an ID to the copy button if (!copyButton) { // If no ID, find it by its onclick var buttons = document.querySelectorAll('.button-group button'); for(var i=0; i<buttons.length; i++) { if (buttons[i].onclick && buttons[i].onclick.toString().includes('copyResults')) { copyButton = buttons[i]; break; } } } if (copyButton) { var originalText = copyButton.textContent; copyButton.textContent = '¡Copiado!'; setTimeout(function() { copyButton.textContent = originalText; }, 2000); } }).catch(function(err) { console.error('Error al copiar resultados: ', err); alert('No se pudieron copiar los resultados. Por favor, cópialos manualmente.'); }); } // Add ID to copy button for easier access in copyResults function var buttons = document.querySelectorAll('.button-group button'); for(var i=0; i<buttons.length; i++) { if (buttons[i].onclick && buttons[i].onclick.toString().includes('copyResults')) { buttons[i].id = 'copyButton'; break; } } // Initial setup for chart canvas var canvas = document.getElementById('weightsChart'); if (canvas) { canvas.width = 700; // Set a default width canvas.height = 300; // Set a default height }

Leave a Comment