Cómo funciona la simulación.
La función principal recibe como argumentos:
Algoritmo:
- Se determina la posición (pos) inicial (n dimensiones) en 0.5
- Se determina la posición del óptimo (optimo)
- Antes de en entrar en el ciclo principal se determina el tiempo de ocurrencia (ciclo) del primer evento de variabilidad ambiental a partir de una distribución exponencial con promedio en amb.tau (de no consiserar un escenario sin variabilidad ambiental (amb.tau=NA))
- Se inicia el ciclo con un while que concluye cuando los ciclos igualan a max.time.
- Se controla si el ciclo en curso corresponde al momento de un evento de var.amb. en cuyo caso el óptimo se desplaza optimo <- o.muller.v(n,rnorm(1,mean=0,sd=var.amb))). Además se calcula el momento del sisuiente evento de variabilidad ambiental (como en 3).
- Se calcula un vector (mut) isotrópico según algoritmo de muller en n dimensiones que representa la mutación
- Se calcula la nueva posición (new.pos), suma vectorial mut + pos.
- Se calcula Zwt = sqrt(sum((pos-optimo)^2))
- Se calcula Zmut <- sqrt(sum((new.pos-optimo)^2))
- Una variable true/false (advantageos) marca true si la nueva posición está más cerca del óptimo que en el paso anterior.
- Se calcula s = exp((Zwt^2-Zmut^2)/2)-1
- Se calculan las probabilidades de fijación p <- p.fix(s,N) y p.Ninf <- p.fix(s,1e5). Según la fórmula p.fix <- function(s,N) (1-exp(-2s))/(1-exp(-2N*s))
- Se calculan las components para el cálculo de F (suma de dos integrales) f.drift <- f.drift + (p-p.Ninf) y f.sel <- f.sel + p.Ninf
- Se determina si la nueva mutación se fija o no en un sorteo considerando p (alculado en 12). Si el sorteo sale positivo, se calcula la distancia x que se avanza con la nueva mutación fijada, la distancia se escala para comparar entre diferentes números de dimensiones por sqrt(n). La distancia se almacena en un vector de largo variable R.adv o R.del según si la fijación fue ventajosa o deletérea (valor de advantageous). Luego la variable pos, que contiene el valor actual de la posición en la caminata asume el valor de new.pos. El ciclo comienza devuevo.
- La función devuelve una lista list(fixs=muts,adv=R.adv,del=R.del,drift=f.drift,selection=f.sel,N=N,muts=max.time,K=muts/max.time). Contiene (en orden) el número de fijaciones, los vectores de mutaciones ventajosas y deletéreas, las componentes integradas de drift y selección, el tamaño poblacional, las mutaciones totales (ciclos de la simulación) y K que es fixs/muts. Por ejemplo hoy chequeamos a partir de esta lista de multiples y versátiles datos, que KN es igual a N(drift+selection)/muts. Ya que ambos son F según las definiciones. Otras funciones ad-hoc pueden llamar a esta función principal para barrer diferentes valores de uno o varios parámetros, colectar los resultados y construir la(s) curva(s) que se desee….
Chan….. chan…!!!! Escribir código es entrete pero escribir su explicación es lata pura!!!!!! Jajaja.