**********************************;
/* Establecer semilla aleatoria para reproducibilidad */
datos _nulo_;
llamar a streaminit(1234);
correr;
/* Número de simulaciones */
%let num_simulaciones = 100000;
/* Número de civilizaciones a generar */
%let num_civilizaciones = 2364;
/* Radio galáctico y altura en años luz */
% let galactic_radius = 50000;
% deja altura galáctica = 1300;
/* Posición de la Tierra (se supone que es 3/4 del radio galáctico) */
% let Earth_position_x = &galactic_radius * 3/4;
% let Earth_position_y = 0;
% let Earth_position_z = 0;
/* Crear un conjunto de datos para almacenar las posiciones de las civilizaciones */
datos de posiciones_civilización;
longitud Civilización $10;
entrada Civilización $ Posición_X Posición_Y Posición_Z;
líneas de datos;
Tierra &posición_tierra_x &posición_tierra_y &posición_tierra_z
;
correr;
/* Generar posiciones aleatorias para otras civilizaciones */
datos de posiciones_civilización;
definir las posiciones de la civilización;
es i = 1 en &num_civilizaciones;
Posición_X = rand(«Uniforme») * &galactic_radius;
Posición_Y = rand(«Uniforme») * 2 * &galactic_height – &galactic_height;
Posición_Z = rand(«Uniforme») * 2 * &galactic_height – &galactic_height;
Civilización = “Civilización” || tira(poner(i, 8.));
salir;
FIN;
Lo dejé ir;
correr;
/* Calcula la distancia entre las civilizaciones y la Tierra */
datos de distancias_civilización;
definir las posiciones de la civilización;
Distancia = sqrt((Posición_X – &posición_tierra_x)**2 + (Posición_Y – &posición_tierra_y)**2 + (Posición_Z – &posición_tierra_z)**2);
correr;
/* Calcula la distancia mínima a la Tierra para cada civilización */
procedimiento sql;
crear la tabla civilizacion_min_distancia como
seleccione Civilización, Distancia como Min_Distance
distancias de la civilización
ordenar por distancia;
irse;
/* Calcula la probabilidad de encontrar civilizaciones en función de la distancia */
probabilidad_encuentro de datos;
definir civilización_min_distancia;
Probabilidad = 1 / (1 + Distancia_Mín);
correr;
/* Calcular la probabilidad promedio para cada banda de distancia */
procedimiento sql;
crear una tabla de probabilidad_promedio como
seleccionar caso
cuando Min_Distance <= 1000 entonces "Cerrar"
cuando Min_Distance > 1000 y Min_Distance <= 3000 entonces “Promedio”
cuando Min_Distance > 3000 entonces “Lejos”
termina con Distance_Band,
promedio (probabilidad) como probabilidad_promedio
de probabilidad_encuentro
grupo por caso
cuando Min_Distance <= 1000 entonces "Cerrar"
cuando Min_Distance > 1000 y Min_Distance <= 3000 entonces “Promedio”
cuando Min_Distance > 3000 entonces “Lejos”
FIN;
irse;
/* Imprime el resultado */
proc imprimir datos=probabilidad_promedio;
correr;
/*Selecciona la civilización más cercana a la Tierra y su probabilidad asociada */
procedimiento sql;
crear la tabla de civilización_más cercana como
seleccione Civilización, Min_Distance, Probabilidad
de probabilidad_encuentro
donde Min_Distance = (seleccione min(Min_Distance) de probabilidad_encuentro);
irse;
/* Imprime el resultado */
proc print data=civilización_más cercana;
correr;
/*Análisis bayesiano de la probabilidad de encontrar extraterrestres en el pasado o en el futuro*/
/* Establecer semilla para reproducibilidad */
%let num_iterations = 100;
/* Crear un conjunto de datos de análisis bayesiano */
análisis de datos bayesianos;
llamar a streaminit(123);
/* Definir variables para probabilidades posteriores */
matriz_pasada posterior[&num_iterations];
tabla posterior_futuro[&num_iterations];
¿I = 1 a &num_iterations;
/* Muestra de probabilidades anteriores y de encuentros pasados */
prior_past = rand(«Uniforme», 0.0001, 0.01); /* P(Reunión pasada) */
probabilidad_encuentro_pasado = rand(«Uniforme», 0.001, 0.1); /* P(Sin contacto | Reunión pasada) */
probabilidad_no_encuentro_pasado = rand(«Uniforme», 0,8, 0,99); /* P(Sin contacto | Sin reunión) */
/* Calcula la probabilidad posterior de un encuentro pasado usando el teorema de Bayes */
numerador_pasado = anterior_pasado * probabilidad_reunión_pasada;
pasado_denominador = pasado_numerador + (1 – pasado_pasado) * probabilidad_no_encuentros_pasados;
posterior_pasado[i] = numerador_pasado / denominador_pasado;
/* Muestra de probabilidades anteriores y de encuentros futuros */
prior_future = rand(«Uniforme», 0.001, 0.05); /* P(Reunión futura) */
probabilidad_encuentro_futuro = rand(«Uniforme», 0.01, 0.1); /* P(Sin contacto | Futura reunión) */
probabilidad_no_encuentro_futuro = rand(«Uniforme», 0,8, 0,99); /* P(Sin contacto | Sin reunión) */
/* Calcula la probabilidad posterior de un encuentro futuro usando el teorema de Bayes */
numerador_futuro = futuro_anterior * probabilidad_encuentro_futuro;
denominador_futuro = numerador_futuro + (1 – futuro_anterior) * probabilidad_no_reunión_futuro;
futuro_posterior[i] = numerador_futuro / denominador_futuro;
FIN;
/* Mostrar resultados */
¿I = 1 a &num_iterations;
valor_posterior_pasado = pasado_posterior[i];
futuro_posterior_valor = futuro_posterior[i];
salir;
FIN;
mantener valor_pasado_posterior valor_futuro_posterior;
correr;
/* Estadísticas resumidas para probabilidades posteriores */
proc significa datos = Bayesian_analysis significa std min max;
var posterior_past_value posterior_future_value;
correr;
/* Histogramas de distribución para probabilidades posteriores */
proc sgplot data=bayesian_analysis;
histograma posterior_past_value / transparencia=0.5 fillattrs=(color=azul) binwidth=0.00001;
título “Distribución de probabilidades posteriores para encuentros pasados”;
correr;
proc sgplot data=bayesian_analysis;
histograma posterior_future_value / transparencia=0.5 fillattrs=(color=verde) binwidth=0.0001;
título “Distribución de probabilidades posteriores para encuentros futuros”;
correr;