Sumar Probabilidades de -∞ a x
En este paso, aprenderás a calcular la Función de Distribución Acumulativa (CDF) sumando las probabilidades desde menos infinito hasta un valor x dado utilizando la distribución normal estándar.
Modifiquemos el programa C anterior para implementar el cálculo de la CDF:
cd ~/project
nano cdf_calculator.c
Reemplaza el código anterior con la siguiente implementación:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Función de aproximación de la CDF normal estándar (Abramowitz y Stegun)
double standard_normal_cdf(double x) {
const double a1 = 0.254829592;
const double a2 = -0.284496736;
const double a3 = 1.421413741;
const double a4 = -1.453152027;
const double a5 = 1.061405429;
const double p = 0.3275911;
// Maneja valores negativos
int sign = (x < 0) ? -1 : 1;
x = fabs(x);
// Fórmula de aproximación
double t = 1.0 / (1.0 + p * x);
double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x * x);
return 0.5 * (1.0 + sign * y);
}
// Calcula la CDF para la distribución normal
double normal_cdf(double x, double mean, double std_dev) {
// Cálculo del puntaje Z
double z_score = (x - mean) / std_dev;
return standard_normal_cdf(z_score);
}
int main() {
// Parámetros de la distribución
double mean, std_dev;
double x_value;
// Solicita los parámetros de la distribución al usuario
printf("Introduce la media (μ): ");
scanf("%lf", &mean);
printf("Introduce la desviación estándar (σ): ");
scanf("%lf", &std_dev);
// Solicita al usuario el valor de x
printf("Introduce el valor de x para calcular la CDF: ");
scanf("%lf", &x_value);
// Calcula e imprime la CDF
double cdf_value = normal_cdf(x_value, mean, std_dev);
printf("\nResultados del cálculo de la CDF:\n");
printf("Media (μ): %.2f\n", mean);
printf("Desviación Estándar (σ): %.2f\n", std_dev);
printf("Valor de X: %.2f\n", x_value);
printf("CDF P(X ≤ x): %.4f\n", cdf_value);
return 0;
}
Compila el programa con la biblioteca matemática:
gcc cdf_calculator.c -o cdf_calculator -lm
Ejecuta el programa y prueba con entradas de muestra:
./cdf_calculator
Ejemplo de salida:
Introduce la media (μ): 5.0
Introduce la desviación estándar (σ): 2.0
Introduce el valor de x para calcular la CDF: 3.5
Resultados del cálculo de la CDF:
Media (μ): 5.00
Desviación Estándar (σ): 2.00
Valor de X: 3.50
CDF P(X ≤ x): 0.2525