pumf_2011 <- get_pumf("Census","2011") |>
label_pumf_data(rename_columns = FALSE) %>%
setNames(toupper(names(.))) |>
mutate(ef_lower=case_when(EFINC=="Under $2,000" ~ 0,
TRUE ~ as.numeric(gsub("\\$|,","",str_extract(as.character(EFINC),"^\\$[\\d,]+")))),
ef_upper=case_when(EFINC=="$250,000 and over" ~ 350000,
TRUE~as.numeric(gsub("\\$ *|,","",str_extract(as.character(EFINC),"\\$ *[\\d,]+$"))))) %>%
mutate(ef_income=(ef_lower+ef_upper)/2) |>
mutate(CMA=fct_recode(CMA,"Greater Sudbury – Thunder Bay"="Greater Sudbury / Grand Sudbury – Thunder Bay",
"Kelowna – Abbotsford-Mission"="Kelowna – Abbotsford"))
pumf_2016 <- get_pumf("Census","2016") |>
label_pumf_data(rename_columns = FALSE) %>%
set_names(names(.) %>% toupper) %>%
mutate(CMA=fct_recode(CMA,"Greater Sudbury – Thunder Bay"="Greater Sudbury / Grand Sudbury – Thunder Bay",
"Kelowna – Abbotsford-Mission"="Kelowna – Abbotsford")) %>%
mutate(ef_lower=case_when(EFINC=="Under $2,000" ~ 0,
TRUE ~ as.numeric(gsub("\\$|,","",str_extract(as.character(EFINC),"^\\$[\\d,]+")))),
ef_upper=case_when(EFINC=="$250,000 and over" ~ 350000,
TRUE~as.numeric(gsub("\\$|,","",str_extract(as.character(EFINC),"\\$[\\d,]+$"))))) %>%
mutate(ef_income=(ef_lower+ef_upper)/2) |>
mutate(across(c(SHELCO,VALUE),as.numeric))
pumf_2021 <- get_pumf("Census","2021") |>
label_pumf_data(rename_columns = FALSE) |>
mutate(ef_lower=case_when(EFINC=="Under $2,000" ~ 0,
TRUE ~ as.numeric(gsub("\\$|,","",str_extract(as.character(EFINC),"^\\$[\\d,]+")))),
ef_upper=case_when(EFINC=="$250,000 and over" ~ 350000,
TRUE~as.numeric(gsub("\\$|,","",str_extract(as.character(EFINC),"\\$[\\d,]+$"))))) %>%
mutate(ef_income=(ef_lower+ef_upper)/2)
large_cmas <- pumf_2016 %>%
count(CMA) %>%
filter(CMA!="Other census metropolitan areas, census agglomerations and other geographies") %>%
top_n(9,n) %>%
arrange(-n) %>%
pull(CMA)
census_dates <- as.Date(c("2011-05-01","2016-05-01","2021-05-01"))
mortgage_rates <- cansim::get_cansim("34-10-0145") |>
filter(Date %in% census_dates) |>
mutate(Year=strftime(Date,"%Y")) |>
select(Year,mortgage_rate=val_norm) |>
mutate(mortgage_rate=mortgage_rate-0.01) # 1% below posted rates
# live data
mortgage_data <- bind_rows(
cansim::get_cansim("10-10-0006-01") |>
select(Date, Components, `Unit of measure`, val_norm) |>
pivot_wider(names_from = `Unit of measure`, values_from = val_norm) |>
filter(Components %in% c("Total, funds advanced, residential mortgages, insured",
"Total, funds advanced, residential mortgages, uninsured")),
cansim::get_cansim("10-10-0006-01") |>
select(Date, Components, `Unit of measure`, val_norm) |>
pivot_wider(names_from = `Unit of measure`, values_from = val_norm) |>
filter(Components %in% c("Total, funds advanced, residential mortgages, insured",
"Total, funds advanced, residential mortgages, uninsured")) |>
group_by(Date) |>
summarise("Interest rate"=weighted.mean(`Interest rate`, Dollars),
Dollars=sum(Dollars)) |>
mutate(Components="Total, funds advanced, residential mortgages") |>
ungroup()
) |>
arrange(Date,Components) |>
filter(strftime(Date,"%m")=='05') |>
mutate(Year=strftime(Date,"%Y")) |>
filter(Date %in% census_dates,
Components=="Total, funds advanced, residential mortgages")
bank_dates <- census_dates |>
lapply(\(x)x+seq(0,6)) |>
unlist() |>
as.Date()
bank_rates <- cansim::get_cansim_vector("v80691310") |>
filter(Date %in% bank_dates) |>
mutate(Year=strftime(Date,"%Y")) |>
select(Year,rate=val_norm)|>
mutate(rate=rate/100)
#interest_rate <- 0.0225
mortgage_term <- 25
mortgage_term2 <- 30
percentiles <- seq(0,1,0.1)
potential_buyers_age <- c("20 to 24 years", "25 to 29 years", "30 to 34 years",
"35 to 39 years", "40 to 44 years", "45 to 49 years")
# Winnipeg https://wowa.ca/taxes/winnipeg-property-tax
property_taxes_w <- tibble(Year=c(2011,2016,2021),
tax_rate=c(3.176,2.7214,2.7755)/100,
CMA="Winnipeg")
property_taxes_v <- tibble(Year=c(2011,2016,2021),
tax_rate=c(4.17998,3.16567,2.92)/100,
CMA="Vancouver")
property_taxes_c <- tibble(Year=c(2011,2016,2021),
tax_rate=c(0.00605,0.0061738,0.0074068)/100,
CMA="Calgary")
# https://www.saskatoon.ca/sites/default/files/documents/asset-financial-management/finance-supply/Altus_Group_Canadian_Property_Tax_Benchmark_Report_2022%20%284%29.pdf
property_taxes_2021 <- tibble(Year="2021",
tax_rate=c(2.92,7.41,9.59,9.72,11.07,11.95,6.11,11.16,8.70,10.09,11.89)/1000,
CMA=c("Vancouver","Calgary","Edmonton","Saskatoon","Regina","Winnipeg","Toronto",
"Ottawa – Gatineau","Montréal","Québec","Halifax"))
# https://www.prosperityedmonton.com/wp-content/uploads/2018/07/2017-Cdn-Property-Tax-Rate-Benchmark-Report.pdf
property_taxes_2016 <- tibble(Year="2016",
tax_rate=c(3.17,6.17,8.00,9.29,10.01,11.78,6.88,10.52,9.89,12,12.08)/1000,
CMA=c("Vancouver","Calgary","Edmonton","Saskatoon","Regina","Winnipeg","Toronto",
"Ottawa – Gatineau","Montréal","Québec","Halifax"))
property_taxes_2011 <- tibble(Year="2011",
tax_rate=c(4.17998,6.05,7.50,15.05,17,14,7.8,13,13,14,15)/1000,
CMA=c("Vancouver","Calgary","Edmonton","Saskatoon","Regina","Winnipeg","Toronto",
"Ottawa – Gatineau","Montréal","Québec","Halifax"))
property_taxes <- bind_rows(property_taxes_2011,property_taxes_2016,property_taxes_2021)