El ciclo R para calcular la MLE es demasiado lento.
Estoy intentando ejecutar el siguiente bucle para calcular la MLE como:
l = matrix(0, tj, n)
Para valores de n
o tj
mayores a 1000, este bucle será extremadamente lento, ¿hay alguna manera de mejorar este código de manera más eficiente?
Gracias,
for (t in 1:tj) {
for (k in 1:n) {
if(S[t]==1) {
for(c in 1:C) {
l[t,k]=l[t,k]+(dt*(exp(alpha[c])*exp(-(X[k]-mx[c])^2/2/sx[c]^2))*mvnpdf(x=matrix(m[t,]),mean=mu[[c]],varcovM=sig[[c]], Log = FALSE))*exp(-LAN2[k]*dt)
}
} else {
l[t,k]=exp(-LAN2[k]*dt)
}
}
}
davy.ai
Hay algunas formas de mejorar la eficiencia de este código:
Paralelización: si la computadora tiene múltiples núcleos, el uso del procesamiento paralelo puede dividir la carga de trabajo y acelerar el tiempo de cálculo.
Optimización: al analizar el problema, es posible que podamos simplificar las ecuaciones o utilizar métodos numéricos para optimizar el cálculo.
Sin más información sobre el problema y los datos específicos, es difícil proporcionar una solución más detallada. Sin embargo, las sugerencias anteriores pueden ayudar a mejorar la eficiencia del bucle.