############################################################################################################################## ############################################################################################################################## ##R CODE FOR POP NEXT YEAR SHINY APP ## ##EDDIE HUNSINGER (AFFILIATION: ALASKA DEPARTMENT OF LABOR AND WORKFORCE DEVELOPMENT), MARCH 2017 ##http://www.demog.berkeley.edu/~eddieh/ ##edyhsgr@gmail.com ## ##THIS IS BASED ON R CODE AVAILABLE AT: https://plus.google.com/+AppliedDemographyToolbox/posts/TPFmUnch3tQ ##IF YOU WOULD LIKE TO USE, SHARE OR REPRODUCE ANY INFORMATION OR IDEAS FROM THIS WORK, BE SURE TO CITE THE SOURCE ## ## ##THE INPUTS USED HERE ARE NOT OFFICIAL OR CAREFULLY DEVELOPED, AND SHOULD ONLY BE USED FOR EXAMPLE ##THERE IS NO WARRANTY FOR THIS CODE ##THIS CODE HAS NOT BEEN CAREFULLY REVIEWED ############################################################################################################################## ############################################################################################################################## library(shiny) ui<-fluidPage( tags$h3("Alaska 2017 Population Possibilities Reviewer"), p("Related information and ", tags$a(href="https://www.r-project.org/", "R"), "code available at: ", tags$a(href="https://plus.google.com/+AppliedDemographyToolbox/posts/TPFmUnch3tQ", "Applied Demography Toolbox Google+ post") ), hr(), sidebarLayout( sidebarPanel( numericInput(inputId = "StartingPop", label = "2016 population estimate", value = 739828, min = 0, max = 10000000000,width=250,step=100), sliderInput("Births", label = "Births (uniform distribution)", min = 0, max = 20000, value = c(9000, 14000),step=100), sliderInput("Deaths", label = "Deaths (uniform distribution)", min = 0, max = 10000, value = c(4000, 5000),step= 100), sliderInput("InMigration", label = "In-migration (uniform distribution)", min = 0, max = 100000, value = c(30000,50000),step=1000), sliderInput("OutMigration", label = "Out-migration (uniform distribution)", min = 0, max = 100000, value = c(40000,70000),step=1000), tags$small(paste0( "If graph is not visible, try edyhsgr.shinyapps.io/alaska2017. This interface was made with Shiny for R (shiny.rstudio.com). Eddie Hunsinger, March 2017." )), width=3 ), mainPanel( plotOutput("plots"),width=3 )) ) server<-function(input, output) { output$plots<-renderPlot({ par(mfrow=c(1,1)) ############################################################################################################################## ############################################################################################################################## # Number of iterations iter<-100000 # Starting population StartingPop<-input$StartingPop # Components of change for the period (year) # Uniform distribution guesses for components (iter, low bound, highbound) Deaths<-runif(iter,input$Deaths[1],input$Deaths[2]) Births<-runif(iter,input$Births[1],input$Births[2]) InMigration<-runif(iter,input$InMigration[1],input$InMigration[2]) OutMigration<-runif(iter,input$OutMigration[1],input$OutMigration[2]) # Sampling NextYearPop<-array(0,iter) for(i in 1:iter){NextYearPop[i]<-(StartingPop - Deaths[i] + Births[i] - OutMigration[i] + InMigration[i])} # Output #quantile(NextYearPop-StartingPop,c(.005,.05,.1,.25,.5,.75,.90,.95,.995)) #quantile(NextYearPop,c(.005,.05,.1,.25,.5,.75,.90,.95,.995)) #hist(NextYearPop-StartingPop) hist(NextYearPop,50,main=paste("Histogram of 2017 Population (100,000 possibles)"),xlab = "2017 Population",col="lightgreen") mtext(side=1,line=-31,adj=.025,text="Min: ",font=1,cex=1,col=1) mtext(side=1,line=-31,adj=.25,text=round(quantile(NextYearPop,0),0),font=1,cex=1,col=1) mtext(side=1,line=-30,adj=.025,text="5th Percentile: ",font=1,cex=1,col=1) mtext(side=1,line=-30,adj=.25,text=round(quantile(NextYearPop,.05),0),font=1,cex=1,col=1) mtext(side=1,line=-29,adj=.025,text="25th Percentile: ",font=1,cex=1,col=1) mtext(side=1,line=-29,adj=.25,text=round(quantile(NextYearPop,.25),0),font=1,cex=1,col=1) mtext(side=1,line=-28,adj=.025,text="Median: ",font=1,cex=1,col="red") mtext(side=1,line=-28,adj=.25,text=round(quantile(NextYearPop,.5),0),font=1,cex=1,col="red") mtext(side=1,line=-27,adj=.025,text="75th Percentile: ",font=1,cex=1,col=1) mtext(side=1,line=-27,adj=.25,text=round(quantile(NextYearPop,.75),0),font=1,cex=1,col=1) mtext(side=1,line=-26,adj=.025,text="95th Percentile: ",font=1,cex=1,col=1) mtext(side=1,line=-26,adj=.25,text=round(quantile(NextYearPop,.95),0),font=1,cex=1,col=1) mtext(side=1,line=-25,adj=.025,text="Max: ",font=1,cex=1,col=1) mtext(side=1,line=-25,adj=.25,text=round(quantile(NextYearPop,1),0),font=1,cex=1,col=1) },height=600,width=600) } shinyApp(ui = ui, server = server)