changeset 103:4d9e40d8af0f draft

Uploaded
author greg
date Tue, 05 Dec 2017 11:01:23 -0500
parents ce996e90f5a7
children d6e37828b094
files insect_phenology_model.R
diffstat 1 files changed, 86 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/insect_phenology_model.R	Tue Dec 05 10:32:04 2017 -0500
+++ b/insect_phenology_model.R	Tue Dec 05 11:01:23 2017 -0500
@@ -83,9 +83,9 @@
     # Mean temperature for current row.
     curr_mean_temp <- 0.5 * (curr_min_temp + curr_max_temp)
     # Initialize degree day accumulation
-    degree_days <- 0
+    averages <- 0
     if (curr_max_temp < threshold) {
-        degree_days <- 0
+        averages <- 0
     }
     else {
         # Initialize hourly temperature.
@@ -138,9 +138,9 @@
                 }
             }
         }
-        degree_days <- sum(dh) / 24
+        averages <- sum(dh) / 24
     }
-    return(c(curr_mean_temp, degree_days))
+    return(c(curr_mean_temp, averages))
 }
 
 mortality.adult = function(temperature) {
@@ -197,15 +197,19 @@
                         group1, group2, group3, group1_std_error, group2_std_error, group3_std_error) {
     if (chart_type == "pop_size_by_life_stage") {
         title <- paste(insect, ": Total pop. by life stage :", location, ": Lat:", latitude, ":", start_date, "-", end_date, sep=" ")
-        legend("topleft", c("Egg", "Nymph", "Adult"), lty=c(1, 1, 1), col=c(4, 2, 1), cex=3)
+        legend_text <- c("Egg", "Nymph", "Adult")
+        columns <- c(4, 2, 1)
     } else if (chart_type == "pop_size_by_generation") {
         title <- paste(insect, ": Total pop. by generation :", location, ": Lat:", latitude, ":", start_date, "-", end_date, sep=" ")
-        legend("topleft", c("P", "F1", "F2"), lty=c(1, 1, 1), col=c(1, 2, 4), cex=3)
+        legend_text <- c("P", "F1", "F2")
+        columns <- col=c(1, 2, 4)
     } else if (chart_type == "adult_pop_size_by_generation") {
         title <- paste(insect, ": Adult pop. by generation :", location, ": Lat:", latitude, ":", start_date, "-", end_date, sep=" ")
-        legend("topleft", c("P", "F1", "F2"), lty=c(1, 1, 1), col=c(1, 2, 4), cex=3)
+        legend_text <- c("P", "F1", "F2")
+        columns <- col=c(1, 2, 4)
     }
     plot(days, group1, main=title, type="l", ylim=c(0, maxval), axes=F, lwd=2, xlab="", ylab="", cex=3, cex.lab=3, cex.axis=3, cex.main=3)
+    legend("topleft", legend_text, lty=c(1, 1, 1), columns, cex=3)
     lines(days, group2, lwd=2, lty=1, col=2)
     lines(days, group3, lwd=2, lty=1, col=4)
     axis(1, at=c(1:12) * 30 - 15, cex.axis=3, labels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
@@ -237,17 +241,20 @@
 Previtellogenic.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 Vitellogenic.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 Diapausing.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
+
 newborn.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
+adult.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 death.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
-adult.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
-population.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
+
 P.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
+P_adults.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 F1.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
+F1_adults.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 F2.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
-P_adults.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
-F1_adults.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 F2_adults.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
 
+population.replications <- matrix(rep(0, opt$num_days*opt$replications), ncol=opt$replications)
+
 # Process replications.
 for (N.replications in 1:opt$replications) {
     # During each replication start with 1000 individuals.
@@ -260,23 +267,28 @@
     # Complete matrix for the population.
     vector.matrix <- base::t(matrix(vector.matrix, nrow=5))
     # Time series of population size.
-    total.population <- NULL
-    overwintering_adult.population <- rep(0, opt$num_days)
-    first_generation.population <- rep(0, opt$num_days)
-    second_generation.population <- rep(0, opt$num_days)
     Eggs <- rep(0, opt$num_days)
     YoungNymphs <- rep(0, opt$num_days)
     OldNymphs <- rep(0, opt$num_days)
     Previtellogenic <- rep(0, opt$num_days)
     Vitellogenic <- rep(0, opt$num_days)
     Diapausing <- rep(0, opt$num_days)
+
+    N.newborn <- rep(0, opt$num_days)
+    N.adult <- rep(0, opt$num_days)
+    N.death <- rep(0, opt$num_days)
+
+    overwintering_adult.population <- rep(0, opt$num_days)
+    first_generation.population <- rep(0, opt$num_days)
+    second_generation.population <- rep(0, opt$num_days)
+
     P.adult <- rep(0, opt$num_days)
     F1.adult <- rep(0, opt$num_days)
     F2.adult <- rep(0, opt$num_days)
-    N.newborn <- rep(0, opt$num_days)
-    N.death <- rep(0, opt$num_days)
-    N.adult <- rep(0, opt$num_days)
-    degree_days.day <- rep(0, opt$num_days)
+
+    total.population <- NULL
+
+    averages.day <- rep(0, opt$num_days)
     # All the days included in the input temperature dataset.
     for (row in 1:opt$num_days) {
         # Get the integer day of the year for the current row.
@@ -285,18 +297,17 @@
         photoperiod <- temperature_data_frame$DAYLEN[row]
         temp.profile <- get_temperature_at_hour(latitude, temperature_data_frame, row, opt$num_days)
         mean.temp <- temp.profile[1]
-        degree_days.temp <- temp.profile[2]
-        degree_days.day[row] <- degree_days.temp
+        averages.temp <- temp.profile[2]
+        averages.day[row] <- averages.temp
         # Trash bin for death.
         death.vector <- NULL
         # Newborn.
         birth.vector <- NULL
         # All individuals.
         for (i in 1:num_insects) {
-            # Find individual record.
+            # Individual record.
             vector.individual <- vector.matrix[i,]
-            # First of all, still alive?
-            # Adjustment for late season mortality rate.
+            # Adjustment for late season mortality rate (still alive?).
             if (latitude < 40.0) {
                 post.mortality <- 1
                 day.kill <- 300
@@ -313,7 +324,7 @@
                 death.probability = opt$nymph_mortality * mortality.nymph(mean.temp)
             }
             else if (vector.individual[2] == 3 | vector.individual[2] == 4 | vector.individual[2] == 5) {
-                # For adult.
+                # Adult.
                 if (doy < day.kill) {
                     death.probability = opt$adult_mortality * mortality.adult(mean.temp)
                 }
@@ -322,14 +333,14 @@
                     death.probability = opt$adult_mortality * post.mortality * mortality.adult(mean.temp)
                 }
             }
-            # (or dependent on temperature and life stage?)
+            # Dependent on temperature and life stage?
             u.d <- runif(1)
             if (u.d < death.probability) {
                 death.vector <- c(death.vector, i)
             }
             else {
                 # Aggregrate index of dead bug.
-                # Event 1 end of diapause.
+                # End of diapause.
                 if (vector.individual[1] == 0 && vector.individual[2] == 3) {
                     # Overwintering adult (previttelogenic).
                     if (photoperiod > opt$photoperiod && vector.individual[3] > 68 && doy < 180) {
@@ -339,8 +350,8 @@
                         vector.matrix[i,] <- vector.individual
                     }
                     else {
-                        # Add to degree_days.
-                        vector.individual[3] <- vector.individual[3] + degree_days.temp
+                        # Add to # Add average temperature for current day..
+                        vector.individual[3] <- vector.individual[3] + averages.temp
                         # Add 1 day in current stage.
                         vector.individual[4] <- vector.individual[4] + 1
                         vector.matrix[i,] <- vector.individual
@@ -356,8 +367,8 @@
                         vector.matrix[i,] <- vector.individual
                     }
                     else {
-                        # Add to degree_days.
-                        vector.individual[3] <- vector.individual[3] + degree_days.temp
+                        # Add average temperature for current day.
+                        vector.individual[3] <- vector.individual[3] + averages.temp
                         # Add 1 day in current stage.
                         vector.individual[4] <- vector.individual[4] + 1
                         vector.matrix[i,] <- vector.individual
@@ -378,8 +389,8 @@
                             num_insects.birth = round(runif(1, 2, 8))
                         }
                     }
-                    # Add to degree_days.
-                    vector.individual[3] <- vector.individual[3] + degree_days.temp
+                    # Add average temperature for current day.
+                    vector.individual[3] <- vector.individual[3] + averages.temp
                     # Add 1 day in current stage.
                     vector.individual[4] <- vector.individual[4] + 1
                     vector.matrix[i,] <- vector.individual
@@ -410,8 +421,8 @@
                             num_insects.birth = round(runif(1, 2, 8))
                         }
                     }
-                    # Add to degree_days.
-                    vector.individual[3] <- vector.individual[3] + degree_days.temp
+                    # Add average temperature for current day.
+                    vector.individual[3] <- vector.individual[3] + averages.temp
                     # Add 1 day in current stage.
                     vector.individual[4] <- vector.individual[4] + 1
                     vector.matrix[i,] <- vector.individual
@@ -431,8 +442,8 @@
                 # Event 3.1 egg development to young nymph (vector.individual[2]=0 -> egg).
                 if (vector.individual[2] == 0) {
                     # Egg stage.
-                    # Add to degree_days.
-                    vector.individual[3] <- vector.individual[3] + degree_days.temp
+                    # Add average temperature for current day.
+                    vector.individual[3] <- vector.individual[3] + averages.temp
                     if (vector.individual[3] >= (68+opt$young_nymph_accumulation)) {
                         # From egg to young nymph, degree-days requirement met.
                         current.gen <- vector.individual[1]
@@ -448,8 +459,8 @@
                 # Event 3.2 young nymph to old nymph (vector.individual[2]=1 -> young nymph: determines diapause).
                 if (vector.individual[2] == 1) {
                     # Young nymph stage.
-                    # Add to degree_days.
-                    vector.individual[3] <- vector.individual[3] + degree_days.temp
+                    # Add average temperature for current day.
+                    vector.individual[3] <- vector.individual[3] + averages.temp
                     if (vector.individual[3] >= (250+opt$old_nymph_accumulation)) {
                         # From young to old nymph, degree_days requirement met.
                         current.gen <- vector.individual[1]
@@ -468,8 +479,8 @@
                 # Event 3.3 old nymph to adult: previttelogenic or diapausing?
                 if (vector.individual[2] == 2) {
                     # Old nymph stage.
-                    # Add to degree_days.
-                    vector.individual[3] <- vector.individual[3] + degree_days.temp
+                    # Add average temperature for current day.
+                    vector.individual[3] <- vector.individual[3] + averages.temp
                     if (vector.individual[3] >= (200+opt$adult_accumulation)) {
                         # From old to adult, degree_days requirement met.
                         current.gen <- vector.individual[1]
@@ -490,7 +501,7 @@
                 }
                 # Event 4 growing of diapausing adult (unimportant, but still necessary).
                 if (vector.individual[2] == 5) {
-                    vector.individual[3] <- vector.individual[3] + degree_days.temp
+                    vector.individual[3] <- vector.individual[3] + averages.temp
                     vector.individual[4] <- vector.individual[4] + 1
                     vector.matrix[i,] <- vector.individual
                 }
@@ -544,7 +555,7 @@
         N.adult[row] <- num_insects.adult
     }   # End of days specified in the input temperature data.
 
-    degree_days.cum <- cumsum(degree_days.day)
+    averages.cum <- cumsum(averages.day)
 
     # Define the output values.
     Eggs.replications[,N.replications] <- Eggs
@@ -565,40 +576,48 @@
     F2_adults.replications[,N.replications] <- F2.adult
 }
 
-# Mean value for adults.
-adults <- apply((Previtellogenic.replications+Vitellogenic.replications+Diapausing.replications), 1, mean)
-# Mean value for nymphs.
-nymphs <- apply((YoungNymphs.replications+OldNymphs.replications), 1, mean)
 # Mean value for eggs.
 eggs <- apply(Eggs.replications, 1, mean)
+# Standard error for eggs.
+eggs.std_error <- apply(Eggs.replications, 1, sd) / sqrt(opt$replications)
+
+# Mean value for nymphs.
+nymphs <- apply((YoungNymphs.replications+OldNymphs.replications), 1, mean)
+# Standard error for nymphs.
+nymphs.std_error <- apply((YoungNymphs.replications+OldNymphs.replications) / sqrt(opt$replications), 1, sd)
+
+# Mean value for adults.
+adults <- apply((Previtellogenic.replications+Vitellogenic.replications+Diapausing.replications), 1, mean)
+# Standard error for adults.
+adults.std_error <- apply((Previtellogenic.replications+Vitellogenic.replications+Diapausing.replications), 1, sd) / sqrt(opt$replications)
+
 # Mean value for P.
 P <- apply(P.replications, 1, mean)
+# Standard error for P.
+P.std_error <- apply(P.replications, 1, sd) / sqrt(opt$replications)
+
+# Mean value for P adults.
+P_adults <- apply(P_adults.replications, 1, mean)
+# Standard error for P_adult.
+P_adults.std_error <- apply(P_adults.replications, 1, sd) / sqrt(opt$replications)
+
 # Mean value for F1.
 F1 <- apply(F1.replications, 1, mean)
-# Mean value for F2.
-F2 <- apply(F2.replications, 1, mean)
-# Mean value for P adults.
-P_adults <- apply(P_adults.replications, 1, mean)
+# Standard error for F1.
+F1.std_error <- apply(F1.replications, 1, sd) / sqrt(opt$replications)
+
 # Mean value for F1 adults.
 F1_adults <- apply(F1_adults.replications, 1, mean)
+# Standard error for F1 adult.
+F1_adults.std_error <- apply(F1_adults.replications, 1, sd) / sqrt(opt$replications)
+
+# Mean value for F2.
+F2 <- apply(F2.replications, 1, mean)
+# Standard error for F2.
+F2.std_error <- apply(F2.replications, 1, sd) / sqrt(opt$replications)
+
 # Mean value for F2 adults.
 F2_adults <- apply(F2_adults.replications, 1, mean)
-# Standard error for adults.
-adults.std_error <- apply((Previtellogenic.replications+Vitellogenic.replications+Diapausing.replications), 1, sd) / sqrt(opt$replications)
-# Standard error for nymphs.
-nymphs.std_error <- apply((YoungNymphs.replications+OldNymphs.replications) / sqrt(opt$replications), 1, sd)
-# Standard error for eggs.
-eggs.std_error <- apply(Eggs.replications, 1, sd) / sqrt(opt$replications)
-# Standard error value for P.
-P.std_error <- apply(P.replications, 1, sd) / sqrt(opt$replications)
-# Standard error for F1.
-F1.std_error <- apply(F1.replications, 1, sd) / sqrt(opt$replications)
-# Standard error for F2.
-F2.std_error <- apply(F2.replications, 1, sd) / sqrt(opt$replications)
-# Standard error for P adult.
-P_adults.std_error <- apply(P_adults.replications, 1, sd) / sqrt(opt$replications)
-# Standard error for F1 adult.
-F1_adults.std_error <- apply(F1_adults.replications, 1, sd) / sqrt(opt$replications)
 # Standard error for F2 adult.
 F2_adults.std_error <- apply(F2_adults.replications, 1, sd) / sqrt(opt$replications)