#' @title MxC Indrun
#' @author Sindiso Nyathi
#' @description This function will read in a single run and group adolescents by gender and age, and find variable averages
#' @param home Parent directory path.
#' @param results The run .csv file with the adolescents.
#' @param run_number The run number.
#' @param filename String name of file with the runs eg. "Baseline"
#' @param simulation_length Length of the simulation
#' @return A file formatted, with required groupings and ages for the variables of interest.
#' @details This function will aggregate a run into age and gender groupings, find the averages for
#' the Time and Events variables.This is done by taking the variable values for each gender/age grouping
#' and finding the means, for each of these. The Gender age groupings processed are m6-9yrs, f6 - 9yrs, m10-15yrs, f10-15yrs,
#' m15-18yrs, f15-18yrs, as well as male overall, and female overall and all overall.
#'
#' @seealso {\code{\link{mxc_master}}, \code{\link{mxc_mulruns}}, \code{\link{mxc_dealsd}}}
#' @examples
#' mxc_indrun(home, mxc_run2.csv, 2, "Baseline", 5)
#' mxc_indrun(home, mxc_run34.csv, 34, "Intervention 1", 5)
#' @family
#'
#' @export
mxc_indrun <- function(home, results, run_number, filename, simulation_length)
{
#Run Number is run_number, i.e. in a set of 12 runs total, this could be the 5th or 7th run. That is run number.
#"filename" is the Run Set file we are storing the output in. Each set of runs has its own file to avoid mixing,
#.e. the 50 runs for baseline, the 50 runs for intervention 1 are in seperate folders.
#Create the DataFrame we want as an Output. 9 rows, 3 for the 3 male age groups, and 3 for female age groups, 1 for overall
#male, 1 for overall female and 1 for all adolescents, so 9 rows in total. We are interested in 11 values overall. So the dataframe
#will be a 9 by 11 dataframe.
#Groups is the number of rows.
groups <- 9
#Create the dataframe with the specified columns.
r_form <- data.frame(Gender = numeric(groups), Age = numeric(groups),
#Stores No. of MVPA Events
"Ave. No. of events/week" = numeric(groups),
"No. of Events (0 - 3)" = numeric(groups), "No. of Events (3 - 5)" = numeric(groups), "No. of Events (5 or more)" = numeric(groups),
#Stores Time in MVPA variables.
"Ave. Time in MVPA/week" = numeric(groups), "Ave. PE Time in MVPA/week" = numeric(groups), "Ave. ASPA Time in MVPA/week" = numeric(groups),
"Time in MVPA (0 - 3hrs)" = numeric(groups),"Time in MVPA (3 - 7hrs)" = numeric(groups), "Time in MVPA (7 or more hrs)" = numeric(groups),
#Stores the N's as a check these should always add up to nrow in the file.
"Sample Size" = numeric(groups))
#Retrieve the number of adolescents in the run and set simulation length to sim.
agents_n = nrow(results)
sim = simulation_length
#Get the age variable
results$age = results$initial_age
#Get the number of weeks in the simulation. Most of the groupings will be by week, e.g. No. of MVPA events per week or Time in MVPA per week.
weeks = (sim*365)/7
#Add columns with the Times and Events per week.
results['Total Events'] = (results$total_times_exercised)/weeks #The number of weeks in the simulation, ave events per week for each agent
#The value calculated in the previous statement will not be correct for all adolescents. Correct for the length of time
#an adolescent is in the model.
results$'Total Events'[results$age == 15] = (results$total_times_exercised)[results$age == 15]/((sim-1)*(365/7))
results$'Total Events'[results$age == 16] = (results$total_times_exercised)[results$age == 16]/((sim-2)*(365/7))
results$'Total Events'[results$age == 17] = (results$total_times_exercised)[results$age == 17]/((sim-3)*(365/7))
results$'Total Events'[results$age == 18] = (results$total_times_exercised)[results$age == 18]/((sim-4)*(365/7))
#Calculate the Time spent in MVPA per week in hours, by adding PE time and ASPA time and dividing by 60 to get time in hours.
results['Total Time'] = ((results$average_pe_minutes_per_day + results$average_aspa_minutes_per_day)*7)/60
#For each Gender and Age Calculate the N (no. of agents) and percentage.
#Here the n is the number of people who exercised 0 - 3, Low, 3 - 5, Intermediate, and 5 - 7, High. No. of events.
#Overall.
#Male
male_ave = mean(dplyr::filter(results, gender == 'MALE')$'Total Events')
male_low = nrow(dplyr::filter(results, gender == 'MALE' & results$'Total Events' < 3))
male_int = nrow(dplyr::filter(results, gender == 'MALE' & results$'Total Events' < 5 & results$'Total Events' >= 3))
male_hig = nrow(dplyr::filter(results, gender == 'MALE' & results$'Total Events' >= 5))
male_tot = nrow(dplyr::filter(results, gender == 'MALE'))
#Female
female_ave = mean(dplyr::filter(results, gender == 'FEMALE')$'Total Events')
female_low = nrow(dplyr::filter(results, gender == 'FEMALE' & results$'Total Events' < 3))
female_int = nrow(dplyr::filter(results, gender == 'FEMALE' & results$'Total Events' < 5, results$'Total Events' >= 3))
female_hig = nrow(dplyr::filter(results, gender == 'FEMALE' & results$'Total Events' >= 5))
female_tot = nrow(dplyr::filter(results, gender == 'FEMALE'))
#Males
#6 - 9.99yrs
male6_9ave = mean(dplyr::filter(results, gender == 'MALE' & age < 10)$'Total Events')
male6_9low = nrow(dplyr::filter(results, gender == 'MALE' & age < 10 & results$'Total Events' < 3))
male6_9int = nrow(dplyr::filter(results, gender == 'MALE' & age < 10 & results$'Total Events' < 5 & results$'Total Events' >= 3))
male6_9hig = nrow(dplyr::filter(results, gender == 'MALE' & age < 10 & results$'Total Events' >= 5))
male6_9tot = nrow(dplyr::filter(results, gender == 'MALE' & age < 10))
#10 - 14.99yrs
male10_14ave = mean(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10)$'Total Events')
male10_14low = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10 & results$'Total Events' < 3))
male10_14int = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10 & results$'Total Events' < 5 & results$'Total Events' >= 3))
male10_14hig = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10 & results$'Total Events' >= 5))
male10_14tot = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10))
#15 - 18.99
male15_18ave = mean(dplyr::filter(results, gender == 'MALE' & age >= 15)$'Total Events')
male15_18low = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15 & results$'Total Events' < 3))
male15_18int = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15 & results$'Total Events' < 5 & results$'Total Events' >= 3))
male15_18hig = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15 & results$'Total Events' >= 5))
male15_18tot = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15))
#Females
#6 - 9.99yrs
female6_9ave = mean(dplyr::filter(results, gender == 'FEMALE' & age < 10)$'Total Events')
female6_9low = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10 & results$'Total Events' < 3))
female6_9int = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10 & results$'Total Events' < 5, results$'Total Events' >= 3))
female6_9hig = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10 & results$'Total Events' >= 5))
female6_9tot = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10))
#10 - 14.99yrs
female10_14ave = mean(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10)$'Total Events')
female10_14low = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10 & results$'Total Events' < 3))
female10_14int = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10 & results$'Total Events' < 5 & results$'Total Events' >= 3))
female10_14hig = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10 & results$'Total Events' >= 5))
female10_14tot = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10))
#15 - 18.99
female15_18ave = mean(dplyr::filter(results, gender == 'FEMALE' & age >= 15)$'Total Events')
female15_18low = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15 & results$'Total Events' < 3))
female15_18int = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15 & results$'Total Events' < 5 & results$'Total Events' >= 3))
female15_18hig = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15 & results$'Total Events' >= 5))
female15_18tot = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15))
#Now add these values to the Table as percentages.
#Start with Generic Ages and Genders. Fill the columns.
r_form$Gender[1:3] = 'MALE'
r_form$Gender[4:6] = 'FEMALE'
r_form$Gender[7] = 'MALE'
r_form$Gender[8] = 'FEMALE'
r_form$Age[c(1,4)] = '6 - 9.99yrs'
r_form$Age[c(2,5)] = '10 - 14.99yrs'
r_form$Age[c(3,6)] = '15 - 18.99yrs'
r_form$Age[7] = "All"
r_form$Age[8] = "All"
#Additional Column for Totals.
r_form$Gender[9] = 'Total'
r_form$Age[9] = 'All All'
#Add the Actual Numbers
#Mean
r_form[1, 3] = male6_9ave
r_form[2, 3] = male10_14ave
r_form[3, 3] = male15_18ave
r_form[4, 3] = female6_9ave
r_form[5, 3] = female10_14ave
r_form[6, 3] = female15_18ave
r_form[7, 3] = male_ave
r_form[8, 3] = female_ave
#Low
r_form[1, 4] = (male6_9low/male6_9tot)*100 #Male 6-9 low
r_form[2, 4] = (male10_14low/male10_14tot)*100 #Male 6-9 low
r_form[3, 4] = (male15_18low/male15_18tot)*100 #Male 6-9 low
r_form[4, 4] = (female6_9low/female6_9tot)*100 #Female 6 - 9 low
r_form[5, 4] = (female10_14low/female10_14tot)*100 #Female 10 - 14 low
r_form[6, 4] = (female15_18low/female15_18tot)*100 #Female 15 - 18 low
r_form[7, 4] = (male_low/male_tot)*100
r_form[8, 4] = (female_low/female_tot)*100
#Intermediate
r_form[1, 5] = (male6_9int/male6_9tot)*100
r_form[2, 5] = (male10_14int/male10_14tot)*100
r_form[3, 5] = (male15_18int/male15_18tot)*100
r_form[4, 5] = (female6_9int/female6_9tot)*100
r_form[5, 5] = (female10_14int/female10_14tot)*100
r_form[6, 5] = (female15_18int/female15_18tot)*100
r_form[7, 5] = (male_int/male_tot)*100
r_form[8, 5] = (female_int/female_tot)*100
#High
r_form[1, 6] = (male6_9hig/male6_9tot)*100
r_form[2, 6] = (male10_14hig/male10_14tot)*100
r_form[3, 6] = (male15_18hig/male15_18tot)*100
r_form[4, 6] = (female6_9hig/female6_9tot)*100
r_form[5, 6] = (female10_14hig/female10_14tot)*100
r_form[6, 6] = (female15_18hig/female15_18tot)*100
r_form[7, 6] = (male_hig/male_tot)*100
r_form[8, 6] = (female_hig/female_tot)*100
#Repeat all of the above for Total Time as well.
#Overall
#Males.
male_avet = mean(dplyr::filter(results, gender == 'MALE')$"Total Time")
male_pet = mean(dplyr::filter(results, gender == 'MALE')$"average_pe_minutes_per_day")
male_pat = mean(dplyr::filter(results, gender == 'MALE')$"average_aspa_minutes_per_day")
male_lowt = nrow(dplyr::filter(results, gender == 'MALE' & results$"Total Time" < 3))
male_intt = nrow(dplyr::filter(results, gender == 'MALE' & results$"Total Time" < 7 & results$"Total Time" >= 3))
male_higt = nrow(dplyr::filter(results, gender == 'MALE' & results$"Total Time" >= 7))
#Females
female_avet = mean(dplyr::filter(results, gender == 'FEMALE')$"Total Time")
female_pet = mean(dplyr::filter(results, gender == 'FEMALE')$"average_pe_minutes_per_day")
female_pat = mean(dplyr::filter(results, gender == 'FEMALE')$"average_aspa_minutes_per_day")
female_lowt = nrow(dplyr::filter(results, gender == 'FEMALE' & results$"Total Time" < 3))
female_intt = nrow(dplyr::filter(results, gender == 'FEMALE' & results$"Total Time" < 7, results$"Total Time" >= 3))
female_higt = nrow(dplyr::filter(results, gender == 'FEMALE' & results$"Total Time" >= 7))
#Males
#6 - 9.99yrs
male6_9avet = mean(dplyr::filter(results, gender == 'MALE' & age < 10)$"Total Time")
male6_9pet = mean(dplyr::filter(results, gender == 'MALE' & age < 10)$"average_pe_minutes_per_day")
male6_9pat = mean(dplyr::filter(results, gender == 'MALE' & age < 10)$"average_aspa_minutes_per_day")
male6_9lowt = nrow(dplyr::filter(results, gender == 'MALE' & age < 10 & results$"Total Time" < 3))
male6_9intt = nrow(dplyr::filter(results, gender == 'MALE' & age < 10 & results$"Total Time" < 7 & results$"Total Time" >= 3))
male6_9higt = nrow(dplyr::filter(results, gender == 'MALE' & age < 10 & results$"Total Time" >= 7))
#10 - 14.99yrs
male10_14avet = mean(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10)$"Total Time")
male10_14pet = mean(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10)$"average_pe_minutes_per_day")
male10_14pat = mean(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10)$"average_aspa_minutes_per_day")
male10_14lowt = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10 & results$"Total Time" < 3))
male10_14intt = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10 & results$"Total Time" < 7 & results$"Total Time" >= 3))
male10_14higt = nrow(dplyr::filter(results, gender == 'MALE' & age < 15 & age >= 10 & results$"Total Time" >= 7))
#15 - 18.99
male15_18avet = mean(dplyr::filter(results, gender == 'MALE' & age >= 15)$"Total Time")
male15_18pet = mean(dplyr::filter(results, gender == 'MALE' & age >= 15)$"average_pe_minutes_per_day")
male15_18pat = mean(dplyr::filter(results, gender == 'MALE' & age >= 15)$"average_aspa_minutes_per_day")
male15_18lowt = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15 & results$"Total Time" < 3))
male15_18intt = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15 & results$"Total Time" < 7 & results$"Total Time" >= 3))
male15_18higt = nrow(dplyr::filter(results, gender == 'MALE' & age >= 15 & results$"Total Time" >= 7))
#Females
#6 - 9.99yrs
female6_9avet = mean(dplyr::filter(results, gender == 'FEMALE' & age < 10)$"Total Time")
female6_9pet = mean(dplyr::filter(results, gender == 'FEMALE' & age < 10)$"average_pe_minutes_per_day")
female6_9pat = mean(dplyr::filter(results, gender == 'FEMALE' & age < 10)$"average_aspa_minutes_per_day")
female6_9lowt = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10 & results$"Total Time" < 3))
female6_9intt = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10 & results$"Total Time" < 7, results$"Total Time" >= 3))
female6_9higt = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 10 & results$"Total Time" >= 7))
#10 - 14.99yrs
female10_14avet = mean(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10)$"Total Time")
female10_14pet = mean(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10)$"average_pe_minutes_per_day")
female10_14pat = mean(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10)$"average_aspa_minutes_per_day")
female10_14lowt = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10 & results$"Total Time" < 3))
female10_14intt = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10 & results$"Total Time" < 7 & results$"Total Time" >= 3))
female10_14higt = nrow(dplyr::filter(results, gender == 'FEMALE' & age < 15 & age >= 10 & results$"Total Time" >= 7))
#15 - 18.99
female15_18avet = mean(dplyr::filter(results, gender == 'FEMALE' & age >= 15)$"Total Time")
female15_18pet = mean(dplyr::filter(results, gender == 'FEMALE' & age >= 15)$"average_pe_minutes_per_day")
female15_18pat = mean(dplyr::filter(results, gender == 'FEMALE' & age >= 15)$"average_aspa_minutes_per_day")
female15_18lowt = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15 & results$"Total Time" < 3))
female15_18intt = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15 & results$"Total Time" < 7 & results$"Total Time" >= 3))
female15_18higt = nrow(dplyr::filter(results, gender == 'FEMALE' & age >= 15 & results$"Total Time" >= 7))
#Add the Actual percentages using the numbers
#Mean
r_form[1, 7] = male6_9avet
r_form[2, 7] = male10_14avet
r_form[3, 7] = male15_18avet
r_form[4, 7] = female6_9avet
r_form[5, 7] = female10_14avet
r_form[6, 7] = female15_18avet
r_form[7, 7] = male_avet
r_form[8, 7] = female_avet
r_form[1, 8] = male6_9pet
r_form[2, 8] = male10_14pet
r_form[3, 8] = male15_18pet
r_form[4, 8] = female6_9pet
r_form[5, 8] = female10_14pet
r_form[6, 8] = female15_18pet
r_form[7, 8] = male_pet
r_form[8, 8] = female_pet
r_form[1, 9] = male6_9pat
r_form[2, 9] = male10_14pat
r_form[3, 9] = male15_18pat
r_form[4, 9] = female6_9pat
r_form[5, 9] = female10_14pat
r_form[6, 9] = female15_18pat
r_form[7, 9] = male_pat
r_form[8, 9] = female_pat
#Low
r_form[1, 10] = (male6_9lowt/male6_9tot)*100 #Male 6-9 low
r_form[2, 10] = (male10_14lowt/male10_14tot)*100 #Male 6-9 low
r_form[3, 10] = (male15_18lowt/male15_18tot)*100 #Male 6-9 low
r_form[4, 10] = (female6_9lowt/female6_9tot)*100 #Male 6-9 low
r_form[5, 10] = (female10_14lowt/female10_14tot)*100 #Male 6-9 low
r_form[6, 10] = (female15_18lowt/female15_18tot)*100 #Male 6-9 low
r_form[7, 10] = (male_lowt/male_tot)*100
r_form[8, 10] = (female_lowt/female_tot)*100
#Intermediate
r_form[1, 11] = (male6_9intt/male6_9tot)*100 #Male 6-9 low
r_form[2, 11] = (male10_14intt/male10_14tot)*100 #Male 6-9 low
r_form[3, 11] = (male15_18intt/male15_18tot)*100 #Male 6-9 low
r_form[4, 11] = (female6_9intt/female6_9tot)*100 #Male 6-9 low
r_form[5, 11] = (female10_14intt/female10_14tot)*100 #Male 6-9 low
r_form[6, 11] = (female15_18intt/female15_18tot)*100 #Male 6-9 low
r_form[7, 11] = (male_intt/male_tot)*100
r_form[8, 11] = (female_intt/female_tot)*100
#High
r_form[1, 12] = (male6_9higt/male6_9tot)*100 #Male 6-9 low
r_form[2, 12] = (male10_14higt/male10_14tot)*100 #Male 6-9 low
r_form[3, 12] = (male15_18higt/male15_18tot)*100 #Male 6-9 low
r_form[4, 12] = (female6_9higt/female6_9tot)*100 #Male 6-9 low
r_form[5, 12] = (female10_14higt/female10_14tot)*100 #Male 6-9 low
r_form[6, 12] = (female15_18higt/female15_18tot)*100 #Male 6-9 low
r_form[7, 12] = (male_higt/male_tot)*100
r_form[8, 12] = (female_higt/female_tot)*100
#The Ns
r_form[1, 13] = male6_9tot
r_form[2, 13] = male10_14tot
r_form[3, 13] = male15_18tot
r_form[4, 13] = female6_9tot
r_form[5, 13] = female10_14tot
r_form[6, 13] = female15_18tot
r_form[7, 13] = male_tot
r_form[8, 13] = female_tot
#Use sum to give us row totals for n
r_form[9, 13] = sum(r_form[1:6, 13]) #This number should be number of agents
#Use apply to give us row means for Low Int. High, for male and female
r_form[9, 3:12] = apply(r_form[c(1:6), c(3:12)], 2, mean)
#Write the output summary file.
write.csv(r_form, paste("output run_", run_number, ".csv", sep = ""))
#Return r_form for further processing.
return(r_form)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.