Advertisement
jmbm

Fig_08

Jul 13th, 2023
521
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.93 KB | None | 0 0
  1. # ¿BINOMIAL NEGATIVA?
  2.  
  3. #---- VARIABLES
  4. espacio <- 2500             # espacio total
  5. m <- 8                      # número de grupos
  6. n <- 50                     # número de individuos/grupo
  7. radio <- 40                 # radio del grupo
  8. nH <- 1000                  # número de hospedadores
  9. veces <- 1000               # veces que se repite la simulación
  10. picax <- 0:4                # nº posible de picaduras/hospedador
  11. clases <- length(picax)
  12. picam <- numeric(clases)         # tabla media picaduras
  13.  
  14. #---- BUCLE DE LAS VECES
  15. for (v in 1:veces){
  16.   S <- integer(espacio)       # posiciones hospedadores
  17.   Si <- S                     # posiciones hospedadores infestados
  18.  
  19.   #---- REPARTO DE HOSPEDADORES
  20.   S[sample(espacio, nH, replace = TRUE)] <- 1
  21.   nHreal <- sum(S)
  22.  
  23.   #---- REPARTO DE PARÁSITOS
  24.   mx <- sample(espacio, m, replace = TRUE)    # centro gravedad de cada grupo
  25.   for (i in 1:m) {            # poblar los m grupos
  26.     for (j in 1:n) {
  27.       nx <- sample((mx[i] - radio):(mx[i] + radio), 1)
  28.       nx <- nx %% espacio
  29.       if (nx == 0) {nx <- 1}
  30.       if (S[nx] == 1) { # ha pillado a un hospedador
  31.         Si[nx] <- Si[nx] + 1     # lo marcamos como infestado
  32.       }
  33.     }
  34.   }
  35.  
  36.   #---- DISTRIBUCIÓN DE PICADURAS
  37.   pica <- as.numeric(table(factor(Si, levels = picax)))
  38.   pica[1] <- nHreal - sum(pica[2:clases])
  39.   picam <- picam + pica
  40.  
  41. } # fin bucle veces
  42.  
  43. picam <- picam / veces
  44.  
  45. #---- RESULTADO GRÁFICO
  46. pdf("fig_08.pdf", width = 6, height = 6)
  47. par(bty = "n", las = 1)
  48. plot(picax, log10(picam), ylim = c(0, log10(nH)), xlim = c(-0.3, clases - 0.5), type = "h", xlab = "Nº ataques / hospedador", ylab = "Nº hospedadores", col = "black", lwd = 4, yaxt = "n")
  49. etiquetas <- c(1, 10, 25, 50, 100, 250, 500, 1000)
  50. axis(2, at = log10(etiquetas), labels = etiquetas)
  51. text(picax, log10(picam), round(picam), cex = 0.8, pos = 3, col = "black")
  52. nHreal <- sum(picam)
  53. media <- sum(picax*picam)/nHreal
  54. varia <- sum(picam*(picax-media)^2)/(nHreal - 1)
  55. poi <- nHreal*dpois(picax, media)
  56. points(picax - 0.1, log10(poi), type = "h", col = "cadetblue1", lwd = 4)
  57. text(picax - .1, log10(poi), round(poi), cex = 0.8, pos = 2, col = "darkgrey")
  58.  
  59. #---- AJUSTE BINOMIAL
  60. SDC2 <- function(par) { # mínimos cuadrados
  61.   ft <- nHreal*dnbinom(picax, size = par, mu = media)
  62.   SDCn = sum((picam - ft)^2)/(var(picam)*clases)
  63.   return(SDCn)
  64. }
  65. SDC <- function(par) { # mínimo chi2
  66.   ft <- nHreal*dnbinom(picax, size = par, mu = media)
  67.   SDCn = sum(((picam - ft)^2)/ft)
  68.   return(SDCn)
  69. }
  70. ajusteBN <- optim(par = c(0.18), SDC)
  71. k <- ajusteBN$par
  72. ft <- (1 + media/k)^(-k)
  73. pbn <- nHreal*dnbinom(picax, size = k, mu = media)
  74. points(picax + .1, log10(pbn), type = "h", col = "royalblue", lwd = 4)
  75. text(picax + .1, log10(pbn), round(pbn), cex = 0.8, pos = 4, col = "royalblue")
  76. legend("topright", c("Experimento", "Binomial negativa", "Poisson"), lty = 1, lwd = 2, col = c("black", "royalblue", "cadetblue1"), cex = 0.8, bty = "n")
  77. dev.off()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement