#Perform an extract of the 2019 5 Year ACS data:

library(ipumsr)
## Warning: package 'ipumsr' was built under R version 4.1.3
ddi <- read_ipums_ddi("C:/Users/shahi/OneDrive - University of Texas at San Antonio/Desktop/Spring'22/Dem 5093 (GIS)/usa_00006.xml")
data <- read_ipums_micro(ddi)
## Use of data from IPUMS USA is subject to conditions including that users should
## cite the data appropriately. Use command `ipums_conditions()` for more details.
data<-haven::zap_labels(data) #necessary to avoid problems with "labelled" data class
names(data)<-tolower(names(data))

Load some other packages

library(survey, quietly = T)
library(tidyverse, quietly = T)
library(car, quietly = T)
library(ggplot2, quietly = T)
library(tigris, quietly = T)
library(classInt, quietly = T)
library(tmap, quietly = T)
library(janitor,quietly = T)
## Warning: package 'janitor' was built under R version 4.1.3
library(mapview, quietly= T)
library(knitr, quietly = T)

#Using these data, create estimates for Californian PUMAs of the % of the population that lived in the same house last year:

options(tigris_class = "sf")
pumas<-pumas(state = "CA",
             year = 2019,
             cb = T)
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |=                                                                     |   2%
  |                                                                            
  |===                                                                   |   5%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |======                                                                |   8%
  |                                                                            
  |=======                                                               |  11%
  |                                                                            
  |=========                                                             |  13%
  |                                                                            
  |==========                                                            |  14%
  |                                                                            
  |===========                                                           |  16%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |==============                                                        |  19%
  |                                                                            
  |===============                                                       |  22%
  |                                                                            
  |================                                                      |  23%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |====================                                                  |  28%
  |                                                                            
  |======================                                                |  32%
  |                                                                            
  |========================                                              |  35%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |============================                                          |  40%
  |                                                                            
  |==============================                                        |  44%
  |                                                                            
  |==================================                                    |  49%
  |                                                                            
  |=====================================                                 |  52%
  |                                                                            
  |======================================                                |  55%
  |                                                                            
  |========================================                              |  58%
  |                                                                            
  |===========================================                           |  61%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |==================================================                    |  72%
  |                                                                            
  |=====================================================                 |  75%
  |                                                                            
  |=======================================================               |  79%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |===========================================================           |  84%
  |                                                                            
  |=============================================================         |  87%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |===================================================================   |  96%
  |                                                                            
  |======================================================================| 100%
plot(pumas["GEOID10"],
     main = "Public Use Microdata Areas in California")

mapview::mapview(pumas, zcol= "GEOID10")

Prepare variables

Here I recode several demographic variables

data$pwt <- data$perwt
data$hwt <- data$hhwt
#Migration
data$migration<- Recode(data$migrate1, recodes = "1=1; 2:4=0; else=NA")

Generate survey design object

Here we identify the person weights and the survey design variables.

des<-svydesign(ids = ~cluster,
               strata = ~ strata,
               weights = ~pwt,
               data = data)
puma_est_migration<-svyby( ~I(migration==1),
                    by = ~puma,
                    design = des,
                    FUN=svymean,
                    na.rm = TRUE ) %>% 
  clean_names() %>% 
  mutate(Pctsh=round((i_migration_1_true*100),1), Pctnsh=round((i_migration_1_false*100),1)) %>% 
  rename(propnsh=i_migration_1_false,
         propsh=i_migration_1_true,
         Stderr=se_i_migration_1_true) %>% 
  select(puma,Pctsh,Pctnsh,Stderr)

join to geography

pumas<- pumas(state = "CA",
              year = 2019,
              cb= T) %>% 
  mutate(puma=as.numeric(PUMACE10))

geo1<-left_join(pumas, puma_est_migration, by=c("puma"= "puma"))

Map estimates:

Residintial stability rates by PUMA

tmap_mode("view")
## tmap mode set to interactive viewing
tm_basemap("OpenStreetMap.Mapnik")
  tm_shape(geo1)+
  tm_polygons("Pctsh",
              style="kmeans",
              title=c("Percent Estimates"),
              palette="Blues",
              n=8,
              legend.hist = TRUE) +
  tm_layout(legend.outside = TRUE,
            title = "Percent of the population living in the same house in California PUMAs \n 2015-2019",
            title.size =1.5,
            legend.frame = TRUE,
            ) +  tm_compass(position = c("left","top")) + tm_format("World",
            legend.position =  c("left", "bottom"),
            main.title.position =c("center")) + tm_scale_bar(position = c("left","bottom"))
## Compass not supported in view mode.
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
LS0tDQp0aXRsZTogIkhvbWV3b3JrIDciDQphdXRob3I6ICJNYWhtdWRhIFN1bHRhbmEiDQpkYXRlOiAiNC82LzIwMjIiDQpvdXRwdXQ6DQogICAgaHRtbF9kb2N1bWVudDoNCiAgICAgIGRmX3ByaW50OiBwYWdlZA0KICAgICAgZmlnX2hlaWdodDogNw0KICAgICAgZmlnX3dpZHRoOiA3DQogICAgICB0b2M6IHllcw0KICAgICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KI1BlcmZvcm0gYW4gZXh0cmFjdCBvZiB0aGUgMjAxOSA1IFllYXIgQUNTIGRhdGE6DQoNCg0KYGBge3J9DQpsaWJyYXJ5KGlwdW1zcikNCmRkaSA8LSByZWFkX2lwdW1zX2RkaSgiQzovVXNlcnMvc2hhaGkvT25lRHJpdmUgLSBVbml2ZXJzaXR5IG9mIFRleGFzIGF0IFNhbiBBbnRvbmlvL0Rlc2t0b3AvU3ByaW5nJzIyL0RlbSA1MDkzIChHSVMpL3VzYV8wMDAwNi54bWwiKQ0KZGF0YSA8LSByZWFkX2lwdW1zX21pY3JvKGRkaSkNCmRhdGE8LWhhdmVuOjp6YXBfbGFiZWxzKGRhdGEpICNuZWNlc3NhcnkgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCAibGFiZWxsZWQiIGRhdGEgY2xhc3MNCm5hbWVzKGRhdGEpPC10b2xvd2VyKG5hbWVzKGRhdGEpKQ0KYGBgDQoNCiMjIExvYWQgc29tZSBvdGhlciBwYWNrYWdlcw0KYGBge3IsIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KHN1cnZleSwgcXVpZXRseSA9IFQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSwgcXVpZXRseSA9IFQpDQpsaWJyYXJ5KGNhciwgcXVpZXRseSA9IFQpDQpsaWJyYXJ5KGdncGxvdDIsIHF1aWV0bHkgPSBUKQ0KbGlicmFyeSh0aWdyaXMsIHF1aWV0bHkgPSBUKQ0KbGlicmFyeShjbGFzc0ludCwgcXVpZXRseSA9IFQpDQpsaWJyYXJ5KHRtYXAsIHF1aWV0bHkgPSBUKQ0KbGlicmFyeShqYW5pdG9yLHF1aWV0bHkgPSBUKQ0KbGlicmFyeShtYXB2aWV3LCBxdWlldGx5PSBUKQ0KbGlicmFyeShrbml0ciwgcXVpZXRseSA9IFQpDQoNCmBgYA0KDQojVXNpbmcgdGhlc2UgZGF0YSwgY3JlYXRlIGVzdGltYXRlcyBmb3IgQ2FsaWZvcm5pYW4gUFVNQXMgb2YgdGhlICUgb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBsaXZlZCBpbiB0aGUgc2FtZSBob3VzZSBsYXN0IHllYXI6DQoNCg0KDQpgYGB7cn0NCm9wdGlvbnModGlncmlzX2NsYXNzID0gInNmIikNCnB1bWFzPC1wdW1hcyhzdGF0ZSA9ICJDQSIsDQogICAgICAgICAgICAgeWVhciA9IDIwMTksDQogICAgICAgICAgICAgY2IgPSBUKQ0KDQoNCnBsb3QocHVtYXNbIkdFT0lEMTAiXSwNCiAgICAgbWFpbiA9ICJQdWJsaWMgVXNlIE1pY3JvZGF0YSBBcmVhcyBpbiBDYWxpZm9ybmlhIikNCg0KDQptYXB2aWV3OjptYXB2aWV3KHB1bWFzLCB6Y29sPSAiR0VPSUQxMCIpDQpgYGANCg0KIyMgUHJlcGFyZSB2YXJpYWJsZXMNCkhlcmUgSSByZWNvZGUgc2V2ZXJhbCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMNCg0KYGBge3J9DQoNCmRhdGEkcHd0IDwtIGRhdGEkcGVyd3QNCmRhdGEkaHd0IDwtIGRhdGEkaGh3dA0KI01pZ3JhdGlvbg0KZGF0YSRtaWdyYXRpb248LSBSZWNvZGUoZGF0YSRtaWdyYXRlMSwgcmVjb2RlcyA9ICIxPTE7IDI6ND0wOyBlbHNlPU5BIikNCg0KYGBgDQoNCg0KIyMgR2VuZXJhdGUgc3VydmV5IGRlc2lnbiBvYmplY3QNCkhlcmUgd2UgaWRlbnRpZnkgdGhlIHBlcnNvbiB3ZWlnaHRzIGFuZCB0aGUgc3VydmV5IGRlc2lnbiB2YXJpYWJsZXMuDQoNCmBgYHtyfQ0KZGVzPC1zdnlkZXNpZ24oaWRzID0gfmNsdXN0ZXIsDQogICAgICAgICAgICAgICBzdHJhdGEgPSB+IHN0cmF0YSwNCiAgICAgICAgICAgICAgIHdlaWdodHMgPSB+cHd0LA0KICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEpDQpgYGANCg0KDQpgYGB7cn0NCnB1bWFfZXN0X21pZ3JhdGlvbjwtc3Z5YnkoIH5JKG1pZ3JhdGlvbj09MSksDQogICAgICAgICAgICAgICAgICAgIGJ5ID0gfnB1bWEsDQogICAgICAgICAgICAgICAgICAgIGRlc2lnbiA9IGRlcywNCiAgICAgICAgICAgICAgICAgICAgRlVOPXN2eW1lYW4sDQogICAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSApICU+JSANCiAgY2xlYW5fbmFtZXMoKSAlPiUgDQogIG11dGF0ZShQY3RzaD1yb3VuZCgoaV9taWdyYXRpb25fMV90cnVlKjEwMCksMSksIFBjdG5zaD1yb3VuZCgoaV9taWdyYXRpb25fMV9mYWxzZSoxMDApLDEpKSAlPiUgDQogIHJlbmFtZShwcm9wbnNoPWlfbWlncmF0aW9uXzFfZmFsc2UsDQogICAgICAgICBwcm9wc2g9aV9taWdyYXRpb25fMV90cnVlLA0KICAgICAgICAgU3RkZXJyPXNlX2lfbWlncmF0aW9uXzFfdHJ1ZSkgJT4lIA0KICBzZWxlY3QocHVtYSxQY3RzaCxQY3Ruc2gsU3RkZXJyKQ0KYGBgDQoNCg0KDQoNCiMjIGpvaW4gdG8gZ2VvZ3JhcGh5DQoNCmBgYHtyfQ0KcHVtYXM8LSBwdW1hcyhzdGF0ZSA9ICJDQSIsDQogICAgICAgICAgICAgIHllYXIgPSAyMDE5LA0KICAgICAgICAgICAgICBjYj0gVCkgJT4lIA0KICBtdXRhdGUocHVtYT1hcy5udW1lcmljKFBVTUFDRTEwKSkNCg0KZ2VvMTwtbGVmdF9qb2luKHB1bWFzLCBwdW1hX2VzdF9taWdyYXRpb24sIGJ5PWMoInB1bWEiPSAicHVtYSIpKQ0KDQoNCmBgYA0KDQojIyBNYXAgZXN0aW1hdGVzOg0KDQojIyMgUmVzaWRpbnRpYWwgc3RhYmlsaXR5IHJhdGVzIGJ5IFBVTUENCmBgYHtyfQ0KdG1hcF9tb2RlKCJ2aWV3IikNCnRtX2Jhc2VtYXAoIk9wZW5TdHJlZXRNYXAuTWFwbmlrIikNCiAgdG1fc2hhcGUoZ2VvMSkrDQogIHRtX3BvbHlnb25zKCJQY3RzaCIsDQogICAgICAgICAgICAgIHN0eWxlPSJrbWVhbnMiLA0KICAgICAgICAgICAgICB0aXRsZT1jKCJQZXJjZW50IEVzdGltYXRlcyIpLA0KICAgICAgICAgICAgICBwYWxldHRlPSJCbHVlcyIsDQogICAgICAgICAgICAgIG49OCwNCiAgICAgICAgICAgICAgbGVnZW5kLmhpc3QgPSBUUlVFKSArDQogIHRtX2xheW91dChsZWdlbmQub3V0c2lkZSA9IFRSVUUsDQogICAgICAgICAgICB0aXRsZSA9ICJQZXJjZW50IG9mIHRoZSBwb3B1bGF0aW9uIGxpdmluZyBpbiB0aGUgc2FtZSBob3VzZSBpbiBDYWxpZm9ybmlhIFBVTUFzIFxuIDIwMTUtMjAxOSIsDQogICAgICAgICAgICB0aXRsZS5zaXplID0xLjUsDQogICAgICAgICAgICBsZWdlbmQuZnJhbWUgPSBUUlVFLA0KICAgICAgICAgICAgKSArICB0bV9jb21wYXNzKHBvc2l0aW9uID0gYygibGVmdCIsInRvcCIpKSArIHRtX2Zvcm1hdCgiV29ybGQiLA0KICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIGMoImxlZnQiLCAiYm90dG9tIiksDQogICAgICAgICAgICBtYWluLnRpdGxlLnBvc2l0aW9uID1jKCJjZW50ZXIiKSkgKyB0bV9zY2FsZV9iYXIocG9zaXRpb24gPSBjKCJsZWZ0IiwiYm90dG9tIikpDQoNCmBgYA0KDQoNCg==