diff --git a/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.Rmd b/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.Rmd index 6dfc5ce..04cb8d0 100644 --- a/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.Rmd +++ b/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.Rmd @@ -5,29 +5,686 @@ date: '2022-05-26' output: html_document --- +```{css, echo=FALSE} +body .main-container { + max-width: 1480px !important; + width: 1480px !important; +} +body { + max-width: 1480px !important; +} +``` + + + ```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) -# SURVEY OF HOUSEHOLD ECONOMICS AND DECISIONMAKING +knitr::opts_chunk$set(echo = TRUE, size = "small", tidy = FALSE) +options(width = 170) + + + +# or_glm function adapted from "oddsratio" package so it can +# handle svyglm functions: + +or_svyglm <- function (data, model, incr, ci = 0.95) +{ + if (any(class(model) %in% "glm")) { + preds <- names(coefficients(model))[2:length(coefficients(model))] + coef <- coefficients(model)[2:length(coefficients(model))] + } + increments <- list() + odds_ratios <- list() + ci_low <- list() + ci_high <- list() + for (i in preds) { + if (any(class(model) %in% "glm")) { + ci_list <- data.frame(suppressMessages(confint(model, + level = ci)))[-1, ] + } + if (is.numeric(data[[i]]) | is.integer(data[[i]])) { + odds_ratios[[i]] <- round(exp(as.numeric(coef[[i]]) * + as.numeric(incr[[i]])), 3) + if (!class(model)[1] == "glmmPQL") { + ci_low[[i]] <- round(exp(ci_list[i, 1] * as.numeric(incr[[i]])), + 3) + ci_high[[i]] <- round(exp(ci_list[i, 2] * as.numeric(incr[[i]])), + 3) + } + increments[[i]] <- as.numeric(incr[[i]]) + or <- odds_ratios[[i]] + } + else { + odds_ratios[[i]] <- round(exp(as.numeric(coef[[i]])), + 3) + if (!class(model)[1] == "glmmPQL") { + ci_low[[i]] <- round(exp(ci_list[i, 1]), 3) + ci_high[[i]] <- round(exp(ci_list[i, 2]), 3) + } + increments[[i]] <- "Indicator variable" + or <- odds_ratios[[i]] + } + } + result <- data.frame(predictor = names(odds_ratios), oddsratio = unlist(odds_ratios, + use.names = FALSE), ci_low = unlist(ci_low, use.names = FALSE), + ci_high = unlist(ci_high, use.names = FALSE), increment = unlist(increments, + use.names = FALSE)) + if (any(class(model) %in% "glm")) { + col_names <- gsub("\\.\\.", replacement = "", names(ci_list)) + col_names <- gsub("X", replacement = "", col_names) + colnames(result)[3] <- paste0("ci_low (", col_names[1], + ")") + colnames(result)[4] <- paste0("ci_high (", col_names[2], + ")") + } + return(result) +} + +``` + +## Load packages + +```{r load-packages} +# install.packages("readstata13") +# install.packages("survey") +# install.packages("corrplot") + +library(readstata13) +library(survey) +library(corrplot) + +``` + + +## Download and import data + +```{r get-data} + +# download.file("https://www.federalreserve.gov/consumerscommunities/files/SHED_public_use_data_2021_(Stata).zip", +# "data/SHED_public_use_data_2021_(Stata).zip") +# unzip("data/SHED_public_use_data_2021_(Stata).zip", exdir = "data") + + +SHED <- readstata13::read.dta13("data/public2021.dta", generate.factors = TRUE, nonint.factors = TRUE) + +# S16_b +# In the past year, have you done the following +# with cryptocurrency, such as Bitcoin or Ethereum? +# - Used to buy something or make a payment +SHED$crypto.used.as.payment <- SHED$S16_b == "Yes" + +# BK1 +# Do you and/or your spouse or partner +# currently have a checking, savings or money +# market account? +SHED$does.not.have.bank.account <- SHED$BK1 == "No" + +# C2A +# Do you currently have at least one credit card? +SHED$does.not.have.credit.card <- SHED$C2A == "No" + +# ppgender +# Gender [Ipsos source] +SHED$is.male <- SHED$ppgender == "Male" + +# race_5cat Race 5 categories +SHED$race <- SHED$race_5cat + +# ED0 +# What is the highest level of school you have +# completed or the highest degree you have +# received? +SHED$education.level <- relevel(SHED$ED0, "High school degree or GED") + +# ED1 +# Which one of the following broad categories +# best describes your (current/most recent) +# educational program? +SHED$education.subject <- relevel(SHED$ED1, "Business/management") + +# pppa_lgb [Ipsos source] +# Q230: Which of the following best describes how you think of yourself? +SHED$lgbtq <- relevel(SHED$pppa_lgb, "Straight, that is, not gay") + +# ppp20197 [Ipsos source] +# QEG22: Are you a citizen of the United States? +SHED$is.noncitizen <- SHED$ppp20197 == "No" + +# I40 +# Which of the following categories best +# describes the total income that you and/or +# your spouse or partner received from all +# sources, before taxes and deductions, in the +# past 12 months? +SHED$income.category <- SHED$I40 + +# B2 +# Overall, which one of the following best +# describes how well you are managing +# financially these days? +SHED$overall.financial.wellbeing <- SHED$B2 + +# I41_b +# Supplemental Nutrition Assistance Program +# (SNAP or food stamps) - In the past 12 +# months, have you received any of the +# following? +SHED$received.food.stamps <- SHED$I41_b + +# FL0 +# On a scale from zero to ten, where zero is +# not at all willing to take risks and ten is +# very willing to take risks, what number would +# you be on the scale? + +SHED$risk.tolerance <- as.numeric(SHED$FL0) - 1 + +# B10 +# Overall, on a scale from zero to ten, where +# zero is not at all satisfied and ten is +# completely satisfied, how satisfied are you +# with life as a whole these days? +SHED$life.satisfaction <- as.numeric(SHED$B10) - 1 + +# ppage +# Age [Ipsos source] +# ppcmdate +# Date member completed Core survey +# Must correct age variable for time of initial Ipsos survey +SHED$age <- SHED$ppage + (2021 - as.numeric(substr(SHED$ppcmdate, 1, 4))) + +# ind1 +# IND1: Industry (tight scale) in current or main job +SHED$job.industry <- relevel(SHED$ind1, "Retail/Stores/Shopping (including Online Retail)") + +# ppcm0160 [Ipsos source] +# Q26: Occupation (detailed) in current or main job +SHED$job.occupation <- relevel(SHED$ppcm0160, "Retail Sales") + +# ppcm1301 [Ipsos source] +# GOVEMP1: Employer type +SHED$employer.type <- relevel(SHED$ppcm1301, "Private-for-profit company") + +# ppmsacat +# MSA Status [Ipsos source] +SHED$resides.in.metro.statistical.area <- SHED$ppmsacat == "Metro" + +# ppfs0596 [Ipsos source] +# Q22: What is the approximate total amount of +# your household's savings and investments? +SHED$total.household.savings <- relevel(SHED$ppfs0596, "$100,000 - $249,999") + +# A1_a +# In the past 12 months, has each of the following happened to you: +# - Turned down for credit +SHED$rejected.for.credit <- SHED$A1_a == "Yes" + +# BK2_a +# In the past 12 months, did you and/or spouse or partner: +# - Purchase a money order from a place other than a bank +SHED$purchase.non.bank.money.order <- SHED$BK2_a == "Yes" + +# BK2_b +# In the past 12 months, did you and/or spouse or partner: +# - Cash a check at a place other than a bank +SHED$cash.check.non.bank <- SHED$BK2_b == "Yes" + +# BK2_c +# In the past 12 months, did you and/or spouse or partner: +# - Take out a payday loan or payday advance +SHED$take.payday.loan <- SHED$BK2_c == "Yes" + +# BK2_d +# In the past 12 months, did you and/or spouse or partner: +# - Take out a pawn shop loan or an auto title loan +SHED$take.auto.or.pawn.shop.loan <- SHED$BK2_d == "Yes" + +# BK2_e +# In the past 12 months, did you and/or spouse or partner: +# - Obtain a tax refund advance to receive your refund faster +SHED$take.tax.refund.advance <- SHED$BK2_e == "Yes" + +# BNPL1 +# In the past year, have you used a “Buy Now +# Pay Later” service to buy something? +SHED$used.buy.now.pay.later <- SHED$BNPL1 == "Yes" + +# ppfs1482 [Ipsos source] +# Q108: Where do you think your credit score falls +SHED$perceived.credit.score <- relevel(SHED$ppfs1482, "Fair") + +# GE2A +# Some people earn money by selling items at +# places like flea markets and garage sales or +# through online marketplaces like eBay or +# Etsy. In the past month, have you made money +# by selling items in any of these ways? + +SHED$informal.selling.of.goods <- SHED$GE2A == "Yes" + +# GE1A +# In the past month, have you done any +# freelance or gig-work, either to supplement +# your income or as your main job? + +SHED$freelance.or.gig.work <- SHED$GE1A == "Yes" + +# E7 +# During the past 12 months, have you +# personally experienced discrimination or +# unfair treatment because of your race, +# ethnicity, age, religion, disability status, +# sexual orientation, gender, or gender +# identity? +SHED$experienced.discrimination <- SHED$E7 == "Yes" + +# E8_b +# In the past 12 months, did you personally experience +# discrimination or unfair treatment while +# doing any of the following? +# - Banking or applying for a loan +SHED$experienced.discrimination.in.banking <- SHED$E8_b %in% "Yes" + +# xlaptop +# Is R a KP laptop user? +SHED$is.kp.laptop.user <- SHED$xlaptop %in% "Yes" + +# devicetype2 +# DOV: Device Type - at the end of survey +SHED$respondent.device.type <- relevel(SHED$devicetype2, "WinPC") + + +SHED <- svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop) + +# weight_pop used as survey weights, in accordance with suggestion by: +# https://www.federalreserve.gov/consumerscommunities/files/SHED_2021codebook.pdf ``` -## R Markdown +## Checking correlations between main variables -This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see . -When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this: +```{r initial-correlations} + + +svyvar.covariance <- svyvar(~ age + is.male + crypto.used.as.payment + + does.not.have.bank.account + does.not.have.credit.card, SHED, na.rm = TRUE) +attr(svyvar.covariance, "var") <- NULL +svyvar.correlation <- cov2cor(as.matrix(svyvar.covariance)) + +print(round(svyvar.correlation, 3)) + +corrplot(svyvar.correlation, tl.col = "darkred", tl.srt = 35, + method = "shade", number.digits = 2, addshade = "all", diag = FALSE, + title = "\n\n Correlation Plot", + addCoef.col = "black", type = "lower") -```{r cars} -summary(cars) ``` -## Including Plots +# Main results + +## does.not.have.bank.account + +```{r main-results-does-not-have-bank-account} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + does.not.have.bank.account, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## does.not.have.credit.card + +```{r main-results-does-not-have-credit-card} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + does.not.have.credit.card, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + + +``` + +# Additional results on financial marginalization + +## rejected.for.credit + +```{r other-financial-marginalization-rejected-for-credit} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + rejected.for.credit, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## purchase.non.bank.money.order + +```{r other-financial-marginalization-purchase-non-bank-money-order} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + purchase.non.bank.money.order, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## cash.check.non.bank + +```{r other-financial-marginalization-cash-check-non-bank} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + cash.check.non.bank, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## take.payday.loan + +```{r other-financial-marginalization-take-payday-loan} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + take.payday.loan, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## take.auto.or.pawn.shop.loan + +```{r other-financial-marginalization-take-auto-or-pawn-shop-loan} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + take.auto.or.pawn.shop.loan, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## take.tax.refund.advance + +```{r other-financial-marginalization-take-tax-refund-advance} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + take.tax.refund.advance, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## used.buy.now.pay.later + +```{r other-financial-marginalization-used-buy-now-pay-later} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + used.buy.now.pay.later, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## experienced.discrimination.in.banking + +```{r other-financial-marginalization-experienced-discrimination-in-banking} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + experienced.discrimination.in.banking, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## perceived.credit.score + +```{r other-financial-marginalization-perceived-credit-score} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + perceived.credit.score, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +# General societal marginalization + +## experienced.discrimination + +```{r general-societal-marginalization-experienced-discrimination} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + experienced.discrimination, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## race + +```{r general-societal-marginalization-race} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + race, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## is.noncitizen + +```{r general-societal-marginalization-is.noncitizen} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + is.noncitizen, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## lgbtq + +```{r general-societal-marginalization-lgbtq} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + lgbtq, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +# Data quality sanity checks + +## education.subject + +```{r data-quality-checks-education-subject} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + education.subject, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## job.industry + +```{r data-quality-checks-job-industry} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + job.industry, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## job.occupation + +```{r data-quality-checks-job-occupation} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + job.occupation, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## risk.tolerance + +```{r data-quality-checks-risk-tolerance} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + risk.tolerance, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1, risk.tolerance = 1)) + + +``` + + +# Miscellaneous + +## education.level + +```{r miscellaneous-education-level} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + education.level, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## income.category + +```{r miscellaneous-income-category} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + income.category, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## total.household.savings + +```{r miscellaneous-total-household-savings} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + total.household.savings, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## overall.financial.wellbeing + +```{r miscellaneous-overall-financial-wellbeing} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + overall.financial.wellbeing, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## received.food.stamps + +```{r miscellaneous-received-food-stamps} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + received.food.stamps, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## life.satisfaction + +```{r miscellaneous-life-satisfaction} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + life.satisfaction, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1, life.satisfaction = 1)) + +``` + +## employer.type + +```{r miscellaneous-employer-type} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + employer.type, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## employer.type = Self-employed & job.occupation = Computer and Mathematical + +```{r miscellaneous-self-employed-computer-industry} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + + I(employer.type == "Self-employed") * I(job.occupation == "Computer and Mathematical"), + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +print(or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))) + +``` + +## informal.selling.of.goods + +```{r miscellaneous-informal-selling-of-goods} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + informal.selling.of.goods, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## freelance.or.gig.work + +```{r miscellaneous-freelance-or-gig-work} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + freelance.or.gig.work, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## resides.in.metro.statistical.area + +```{r miscellaneous-resides-in-metro-statistical-area} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + resides.in.metro.statistical.area, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## respondent.device.type + +```{r miscellaneous-respondent-device-type} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + respondent.device.type, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) + +``` + +## is.kp.laptop.user + +```{r miscellaneous-is-kp-laptop-user} + +svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + is.kp.laptop.user, + SHED, family = stats::quasibinomial(link = "logit")) +summary(svyglm.fit) +or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)) -You can also embed plots, for example: -```{r pressure, echo=FALSE} -plot(pressure) ``` -Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot. diff --git a/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.html b/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.html index e9b1c7c..8105d66 100644 --- a/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.html +++ b/Financial-Marginalization-and-Cryptocurrency/Financial-Marginalization-and-Cryptocurrency-Payments.html @@ -371,31 +371,1550 @@ Cryptocurrency Payments -
-

R Markdown

-

This is an R Markdown document. Markdown is a simple formatting -syntax for authoring HTML, PDF, and MS Word documents. For more details -on using R Markdown see http://rmarkdown.rstudio.com.

-

When you click the Knit button a document will be -generated that includes both content as well as the output of any -embedded R code chunks within the document. You can embed an R code -chunk like this:

-
summary(cars)
-
##      speed           dist       
-##  Min.   : 4.0   Min.   :  2.00  
-##  1st Qu.:12.0   1st Qu.: 26.00  
-##  Median :15.0   Median : 36.00  
-##  Mean   :15.4   Mean   : 42.98  
-##  3rd Qu.:19.0   3rd Qu.: 56.00  
-##  Max.   :25.0   Max.   :120.00
+ +
+

Load packages

+
# install.packages("readstata13")
+# install.packages("survey")
+# install.packages("corrplot")
+
+library(readstata13)
+library(survey)
+
## Loading required package: grid
+
## Loading required package: Matrix
+
## Loading required package: survival
+
## 
+## Attaching package: 'survey'
+
## The following object is masked from 'package:graphics':
+## 
+##     dotchart
+
library(corrplot)
+
## corrplot 0.92 loaded
+
+
+

Download and import data

+
# download.file("https://www.federalreserve.gov/consumerscommunities/files/SHED_public_use_data_2021_(Stata).zip", 
+#   "data/SHED_public_use_data_2021_(Stata).zip")
+# unzip("data/SHED_public_use_data_2021_(Stata).zip", exdir = "data")
+
+
+SHED <- readstata13::read.dta13("data/public2021.dta", generate.factors = TRUE, nonint.factors = TRUE)
+
## Warning in readstata13::read.dta13("data/public2021.dta", generate.factors = TRUE, : 
+##    Duplicated factor levels for variables
+## 
+##    ind1, pph12003, pph12004, pph12005, pph12006
+## 
+##    Unique labels for these variables have been generated.
+
# S16_b
+# In the past year, have you done the following
+# with cryptocurrency, such as Bitcoin or Ethereum?
+# - Used to buy something or make a payment
+SHED$crypto.used.as.payment <- SHED$S16_b == "Yes"
+
+# BK1
+# Do you and/or your spouse or partner
+# currently have a checking, savings or money
+# market account?
+SHED$does.not.have.bank.account <- SHED$BK1 == "No"
+
+# C2A
+# Do you currently have at least one credit card?
+SHED$does.not.have.credit.card <- SHED$C2A == "No"
+
+# ppgender
+# Gender [Ipsos source]
+SHED$is.male <- SHED$ppgender == "Male"
+
+# race_5cat Race 5 categories
+SHED$race <- SHED$race_5cat
+
+# ED0
+# What is the highest level of school you have
+# completed or the highest degree you have
+# received?
+SHED$education.level <- relevel(SHED$ED0, "High school degree or GED")
+
+# ED1
+# Which one of the following broad categories
+# best describes your (current/most recent)
+# educational program?
+SHED$education.subject <- relevel(SHED$ED1, "Business/management")
+
+# pppa_lgb [Ipsos source]
+# Q230: Which of the following best describes how you think of yourself?
+SHED$lgbtq <- relevel(SHED$pppa_lgb, "Straight, that is, not gay")
+
+# ppp20197 [Ipsos source]
+# QEG22: Are you a citizen of the United States?
+SHED$is.noncitizen <- SHED$ppp20197 == "No"
+
+# I40
+# Which of the following categories best
+# describes the total income that you and/or
+# your spouse or partner received from all
+# sources, before taxes and deductions, in the
+# past 12 months?
+SHED$income.category <- SHED$I40
+
+# B2
+# Overall, which one of the following best
+# describes how well you are managing
+# financially these days?
+SHED$overall.financial.wellbeing <- SHED$B2
+
+# I41_b
+# Supplemental Nutrition Assistance Program
+# (SNAP or food stamps) - In the past 12
+# months, have you received any of the
+# following?
+SHED$received.food.stamps <- SHED$I41_b
+
+# FL0
+# On a scale from zero to ten, where zero is
+# not at all willing to take risks and ten is
+# very willing to take risks, what number would
+# you be on the scale?
+
+SHED$risk.tolerance <- as.numeric(SHED$FL0) - 1
+
+# B10
+# Overall, on a scale from zero to ten, where
+# zero is not at all satisfied and ten is
+# completely satisfied, how satisfied are you
+# with life as a whole these days?
+SHED$life.satisfaction <- as.numeric(SHED$B10) - 1
+
+# ppage
+# Age [Ipsos source]
+# ppcmdate
+# Date member completed Core survey
+# Must correct age variable for time of initial Ipsos survey
+SHED$age <- SHED$ppage + (2021 - as.numeric(substr(SHED$ppcmdate, 1, 4)))
+
+# ind1
+# IND1: Industry (tight scale) in current or main job
+SHED$job.industry <- relevel(SHED$ind1, "Retail/Stores/Shopping (including Online Retail)")
+
+# ppcm0160 [Ipsos source]
+# Q26: Occupation (detailed) in current or main job
+SHED$job.occupation <- relevel(SHED$ppcm0160, "Retail Sales")
+
+# ppcm1301 [Ipsos source]
+# GOVEMP1: Employer type
+SHED$employer.type <- relevel(SHED$ppcm1301, "Private-for-profit company")
+
+# ppmsacat
+# MSA Status [Ipsos source]
+SHED$resides.in.metro.statistical.area <- SHED$ppmsacat == "Metro"
+
+# ppfs0596 [Ipsos source]
+# Q22: What is the approximate total amount of
+# your household's savings and investments?
+SHED$total.household.savings <- relevel(SHED$ppfs0596, "$100,000 - $249,999")
+
+# A1_a
+# In the past 12 months, has each of the following happened to you:
+# - Turned down for credit
+SHED$rejected.for.credit <- SHED$A1_a == "Yes"
+
+# BK2_a
+# In the past 12 months, did you and/or spouse or partner:
+# - Purchase a money order from a place other than a bank
+SHED$purchase.non.bank.money.order <- SHED$BK2_a == "Yes"
+
+# BK2_b
+# In the past 12 months, did you and/or spouse or partner:
+# - Cash a check at a place other than a bank
+SHED$cash.check.non.bank <- SHED$BK2_b == "Yes"
+
+# BK2_c
+# In the past 12 months, did you and/or spouse or partner:
+# - Take out a payday loan or payday advance
+SHED$take.payday.loan <- SHED$BK2_c == "Yes"
+
+# BK2_d
+# In the past 12 months, did you and/or spouse or partner:
+# - Take out a pawn shop loan or an auto title loan
+SHED$take.auto.or.pawn.shop.loan <- SHED$BK2_d == "Yes"
+
+# BK2_e
+# In the past 12 months, did you and/or spouse or partner:
+# - Obtain a tax refund advance to receive your refund faster
+SHED$take.tax.refund.advance <- SHED$BK2_e == "Yes"
+
+# BNPL1
+# In the past year, have you used a “Buy Now
+# Pay Later” service to buy something?
+SHED$used.buy.now.pay.later <- SHED$BNPL1 == "Yes"
+
+# ppfs1482 [Ipsos source]
+# Q108: Where do you think your credit score falls
+SHED$perceived.credit.score <- relevel(SHED$ppfs1482, "Fair")
+
+# GE2A
+# Some people earn money by selling items at
+# places like flea markets and garage sales or
+# through online marketplaces like eBay or
+# Etsy. In the past month, have you made money
+# by selling items in any of these ways?
+
+SHED$informal.selling.of.goods <- SHED$GE2A == "Yes"
+
+# GE1A
+# In the past month, have you done any
+# freelance or gig-work, either to supplement
+# your income or as your main job?
+
+SHED$freelance.or.gig.work <- SHED$GE1A == "Yes"
+
+# E7
+# During the past 12 months, have you
+# personally experienced discrimination or
+# unfair treatment because of your race,
+# ethnicity, age, religion, disability status,
+# sexual orientation, gender, or gender
+# identity?
+SHED$experienced.discrimination <- SHED$E7 == "Yes"
+
+# E8_b 
+# In the past 12 months, did you personally experience
+# discrimination or unfair treatment while
+# doing any of the following?
+# - Banking or applying for a loan
+SHED$experienced.discrimination.in.banking <- SHED$E8_b %in% "Yes"
+
+# xlaptop
+# Is R a KP laptop user?
+SHED$is.kp.laptop.user <- SHED$xlaptop %in% "Yes"
+
+# devicetype2
+# DOV: Device Type - at the end of survey
+SHED$respondent.device.type <- relevel(SHED$devicetype2, "WinPC")
+
+
+SHED <- svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+
+# weight_pop used as survey weights, in accordance with suggestion by:
+# https://www.federalreserve.gov/consumerscommunities/files/SHED_2021codebook.pdf
+
+
+

Checking correlations between main variables

+
svyvar.covariance <- svyvar(~ age + is.male + crypto.used.as.payment +
+    does.not.have.bank.account + does.not.have.credit.card, SHED, na.rm = TRUE)
+attr(svyvar.covariance, "var") <- NULL
+svyvar.correlation <- cov2cor(as.matrix(svyvar.covariance))
+
+print(round(svyvar.correlation, 3))
+
##                               age is.male crypto.used.as.payment does.not.have.bank.account does.not.have.credit.card
+## age                         1.000  -0.024                 -0.070                     -0.106                    -0.201
+## is.male                    -0.024   1.000                  0.033                      0.011                     0.030
+## crypto.used.as.payment     -0.070   0.033                  1.000                      0.035                     0.035
+## does.not.have.bank.account -0.106   0.011                  0.035                      1.000                     0.364
+## does.not.have.credit.card  -0.201   0.030                  0.035                      0.364                     1.000
+## attr(,"statistic")
+## [1] "variance"
+
corrplot(svyvar.correlation, tl.col = "darkred", tl.srt = 35, 
+  method = "shade", number.digits = 2, addshade = "all", diag = FALSE,
+         title = "\n\n Correlation Plot",
+         addCoef.col = "black", type = "lower")
+

+
+
+

Main results

+
+

does.not.have.bank.account

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + does.not.have.bank.account, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + does.not.have.bank.account, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                 Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                    -2.913447   0.226073 -12.887  < 2e-16 ***
+## age                            -0.031695   0.004137  -7.662 1.97e-14 ***
+## is.maleTRUE                     0.466379   0.168780   2.763  0.00573 ** 
+## does.not.have.bank.accountTRUE  0.581630   0.285850   2.035  0.04190 *  
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.958345)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables$variables, svyglm.fit, incr = list(age = 1))
+
##                        predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                            age     0.969        0.961          0.977 Indicator variable
+## 2                    is.maleTRUE     1.594        1.145          2.219 Indicator variable
+## 3 does.not.have.bank.accountTRUE     1.789        1.022          3.133 Indicator variable
+
+
+

does.not.have.credit.card

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + does.not.have.credit.card, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + does.not.have.credit.card, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                   -2.952972   0.234628 -12.586  < 2e-16 ***
+## age                           -0.031084   0.004205  -7.392 1.54e-13 ***
+## is.maleTRUE                    0.466022   0.168684   2.763  0.00574 ** 
+## does.not.have.credit.cardTRUE  0.304096   0.214471   1.418  0.15625    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9559624)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                       predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                           age     0.969        0.961          0.977                  1
+## 2                   is.maleTRUE     1.594        1.145          2.218 Indicator variable
+## 3 does.not.have.credit.cardTRUE     1.355        0.890          2.064 Indicator variable
+
+
+
+

Additional results on financial marginalization

+
+

rejected.for.credit

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + rejected.for.credit, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + rejected.for.credit, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                          Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)             -3.186410   0.331091  -9.624  < 2e-16 ***
+## age                     -0.028757   0.006194  -4.643 3.54e-06 ***
+## is.maleTRUE              0.674391   0.236384   2.853  0.00435 ** 
+## rejected.for.creditTRUE  1.149878   0.234934   4.894 1.02e-06 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9739901)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                 predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                     age     0.972        0.960          0.984                  1
+## 2             is.maleTRUE     1.963        1.235          3.120 Indicator variable
+## 3 rejected.for.creditTRUE     3.158        1.992          5.005 Indicator variable
+
+
+

purchase.non.bank.money.order

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + purchase.non.bank.money.order, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + purchase.non.bank.money.order, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                    Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                       -3.021632   0.222077 -13.606  < 2e-16 ***
+## age                               -0.032421   0.004118  -7.874 3.75e-15 ***
+## is.maleTRUE                        0.481844   0.168482   2.860  0.00425 ** 
+## purchase.non.bank.money.orderTRUE  1.092477   0.208685   5.235 1.68e-07 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9680346)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                           predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                               age     0.968        0.960          0.976                  1
+## 2                       is.maleTRUE     1.619        1.164          2.253 Indicator variable
+## 3 purchase.non.bank.money.orderTRUE     2.982        1.981          4.489 Indicator variable
+
+
+

cash.check.non.bank

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + cash.check.non.bank, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + cash.check.non.bank, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                          Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)             -3.011138   0.224701 -13.401  < 2e-16 ***
+## age                     -0.031117   0.004085  -7.616 2.81e-14 ***
+## is.maleTRUE              0.462410   0.168842   2.739  0.00618 ** 
+## cash.check.non.bankTRUE  1.098875   0.236800   4.641 3.51e-06 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9459723)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                 predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                     age     0.969        0.962          0.977                  1
+## 2             is.maleTRUE     1.588        1.140          2.211 Indicator variable
+## 3 cash.check.non.bankTRUE     3.001        1.886          4.773 Indicator variable
+
+
+

take.payday.loan

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + take.payday.loan, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + take.payday.loan, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                       Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)          -3.056315   0.236834 -12.905  < 2e-16 ***
+## age                  -0.030550   0.004233  -7.218 5.61e-13 ***
+## is.maleTRUE           0.477396   0.169847   2.811  0.00495 ** 
+## take.payday.loanTRUE  1.971401   0.285394   6.908 5.18e-12 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9662311)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##              predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                  age     0.970        0.962          0.978                  1
+## 2          is.maleTRUE     1.612        1.155          2.249 Indicator variable
+## 3 take.payday.loanTRUE     7.181        4.104         12.564 Indicator variable
+
+
+

take.auto.or.pawn.shop.loan

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + take.auto.or.pawn.shop.loan, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + take.auto.or.pawn.shop.loan, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                  Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                     -2.952696   0.224047 -13.179  < 2e-16 ***
+## age                             -0.032423   0.004156  -7.802 6.63e-15 ***
+## is.maleTRUE                      0.513780   0.169932   3.023   0.0025 ** 
+## take.auto.or.pawn.shop.loanTRUE  1.794029   0.314689   5.701 1.22e-08 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9682661)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                         predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                             age     0.968        0.960          0.976                  1
+## 2                     is.maleTRUE     1.672        1.198          2.332 Indicator variable
+## 3 take.auto.or.pawn.shop.loanTRUE     6.014        3.245         11.144 Indicator variable
+
+
+

take.tax.refund.advance

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + take.tax.refund.advance, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + take.tax.refund.advance, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                              Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                 -2.965486   0.221710 -13.376  < 2e-16 ***
+## age                         -0.031918   0.004147  -7.697 1.51e-14 ***
+## is.maleTRUE                  0.506136   0.169424   2.987  0.00282 ** 
+## take.tax.refund.advanceTRUE  2.164352   0.325035   6.659 2.88e-11 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9810652)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                     predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                         age     0.969        0.961          0.976                  1
+## 2                 is.maleTRUE     1.659        1.190          2.312 Indicator variable
+## 3 take.tax.refund.advanceTRUE     8.709        4.605         16.469 Indicator variable
+
+
+

used.buy.now.pay.later

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + used.buy.now.pay.later, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + used.buy.now.pay.later, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                             Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                -3.229942   0.237390 -13.606  < 2e-16 ***
+## age                        -0.030738   0.004186  -7.343 2.23e-13 ***
+## is.maleTRUE                 0.567811   0.173233   3.278  0.00105 ** 
+## used.buy.now.pay.laterTRUE  1.371553   0.191151   7.175 7.65e-13 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9898529)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                    predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                        age     0.970        0.962          0.978                  1
+## 2                is.maleTRUE     1.764        1.256          2.478 Indicator variable
+## 3 used.buy.now.pay.laterTRUE     3.941        2.710          5.733 Indicator variable
+
+
+

experienced.discrimination.in.banking

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + experienced.discrimination.in.banking, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + experienced.discrimination.in.banking, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                            Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                               -2.885342   0.218007 -13.235  < 2e-16 ***
+## age                                       -0.032679   0.004104  -7.963 1.84e-15 ***
+## is.maleTRUE                                0.466326   0.168406   2.769  0.00563 ** 
+## experienced.discrimination.in.bankingTRUE  1.972172   0.372336   5.297 1.20e-07 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.974156)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                   predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                       age     0.968        0.960          0.976                  1
+## 2                               is.maleTRUE     1.594        1.146          2.218 Indicator variable
+## 3 experienced.discrimination.in.bankingTRUE     7.186        3.464         14.910 Indicator variable
+
+
+

perceived.credit.score

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + perceived.credit.score, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + perceived.credit.score, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                   Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                      -2.410328   0.296635  -8.126 4.98e-16 ***
+## age                              -0.031818   0.005248  -6.062 1.39e-09 ***
+## is.maleTRUE                       0.507430   0.189572   2.677  0.00745 ** 
+## perceived.credit.scoreVery poor   0.335551   0.411302   0.816  0.41462    
+## perceived.credit.scorePoor       -0.081567   0.405853  -0.201  0.84072    
+## perceived.credit.scoreGood       -0.652273   0.284365  -2.294  0.02182 *  
+## perceived.credit.scoreExcellent  -0.694903   0.251690  -2.761  0.00577 ** 
+## perceived.credit.scoreDon’t know -0.875283   0.451036  -1.941  0.05233 .  
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9339766)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                          predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                              age     0.969        0.959          0.979                  1
+## 2                      is.maleTRUE     1.661        1.145          2.409 Indicator variable
+## 3  perceived.credit.scoreVery poor     1.399        0.625          3.132 Indicator variable
+## 4       perceived.credit.scorePoor     0.922        0.416          2.042 Indicator variable
+## 5       perceived.credit.scoreGood     0.521        0.298          0.910 Indicator variable
+## 6  perceived.credit.scoreExcellent     0.499        0.305          0.817 Indicator variable
+## 7 perceived.credit.scoreDon’t know     0.417        0.172          1.009 Indicator variable
+
+
+
+

General societal marginalization

+
+

experienced.discrimination

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + experienced.discrimination, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + experienced.discrimination, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                 Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                    -3.004836   0.228625 -13.143  < 2e-16 ***
+## age                            -0.031571   0.004086  -7.727 1.19e-14 ***
+## is.maleTRUE                     0.501519   0.169039   2.967 0.003014 ** 
+## experienced.discriminationTRUE  0.797020   0.214670   3.713 0.000206 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9644662)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                        predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                            age     0.969        0.961          0.977                  1
+## 2                    is.maleTRUE     1.651        1.186          2.300 Indicator variable
+## 3 experienced.discriminationTRUE     2.219        1.457          3.380 Indicator variable
+
+
+

race

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + race, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + race, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##               Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)  -3.148536   0.241717 -13.026  < 2e-16 ***
+## age          -0.031111   0.004158  -7.482 7.86e-14 ***
+## is.maleTRUE   0.481631   0.167887   2.869 0.004128 ** 
+## raceBlack     0.808073   0.216699   3.729 0.000193 ***
+## raceHispanic  0.542806   0.221510   2.450 0.014281 *  
+## raceAsian     0.121512   0.397317   0.306 0.759738    
+## raceOther    -0.030294   0.462447  -0.066 0.947770    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9471295)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##      predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1          age     0.969        0.961          0.977                  1
+## 2  is.maleTRUE     1.619        1.165          2.250 Indicator variable
+## 3    raceBlack     2.244        1.467          3.431 Indicator variable
+## 4 raceHispanic     1.721        1.115          2.656 Indicator variable
+## 5    raceAsian     1.129        0.518          2.460 Indicator variable
+## 6    raceOther     0.970        0.392          2.402 Indicator variable
+
+
+

is.noncitizen

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + is.noncitizen, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + is.noncitizen, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                    Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)       -2.926938   0.239581 -12.217  < 2e-16 ***
+## age               -0.031523   0.004323  -7.292 3.27e-13 ***
+## is.maleTRUE        0.436785   0.177799   2.457  0.01404 *  
+## is.noncitizenTRUE  0.974701   0.375482   2.596  0.00945 ** 
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9647507)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##           predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1               age     0.969        0.961          0.977                  1
+## 2       is.maleTRUE     1.548        1.092          2.193 Indicator variable
+## 3 is.noncitizenTRUE     2.650        1.270          5.533 Indicator variable
+
+
+

lgbtq

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + lgbtq, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + lgbtq, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                      Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)         -2.978567   0.242480 -12.284  < 2e-16 ***
+## age                 -0.030611   0.004158  -7.361 1.95e-13 ***
+## is.maleTRUE          0.480164   0.183277   2.620  0.00881 ** 
+## lgbtqGay or lesbian  0.076089   0.463581   0.164  0.86963    
+## lgbtqBisexual        0.346759   0.366939   0.945  0.34468    
+## lgbtqSomething else  0.613277   0.535404   1.145  0.25205    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9563273)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##             predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                 age     0.970        0.962          0.978                  1
+## 2         is.maleTRUE     1.616        1.129          2.315 Indicator variable
+## 3 lgbtqGay or lesbian     1.079        0.435          2.677 Indicator variable
+## 4       lgbtqBisexual     1.414        0.689          2.904 Indicator variable
+## 5 lgbtqSomething else     1.846        0.646          5.274 Indicator variable
+
+
+
+

Data quality sanity checks

+
+

education.subject

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + education.subject, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + education.subject, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                 Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                    -2.999353   0.349680  -8.577  < 2e-16 ***
+## age                                            -0.031044   0.004627  -6.710 2.06e-11 ***
+## is.maleTRUE                                     0.647123   0.211765   3.056  0.00225 ** 
+## education.subjectHumanities/arts               -0.023039   0.369258  -0.062  0.95025    
+## education.subjectSocial/behavioral sciences    -0.088099   0.396489  -0.222  0.82416    
+## education.subjectLife sciences                  0.454106   0.582217   0.780  0.43543    
+## education.subjectPhysical sciences/math         0.667644   0.451933   1.477  0.13963    
+## education.subjectComputer/information sciences  0.566129   0.305065   1.856  0.06352 .  
+## education.subjectEngineering                   -0.061159   0.365813  -0.167  0.86723    
+## education.subjectEducation                     -1.007184   0.641422  -1.570  0.11640    
+## education.subjectHealth                        -0.318826   0.380608  -0.838  0.40223    
+## education.subjectLaw                           -0.346608   0.519753  -0.667  0.50487    
+## education.subjectVocational/technical training -0.668446   0.544420  -1.228  0.21955    
+## education.subjectUndeclared                    -0.260800   0.517377  -0.504  0.61422    
+## education.subjectOther                         -0.241427   0.406223  -0.594  0.55231    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.8916928)
+## 
+## Number of Fisher Scoring iterations: 8
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                         predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                             age     0.969        0.961          0.978                  1
+## 2                                     is.maleTRUE     1.910        1.261          2.893 Indicator variable
+## 3                education.subjectHumanities/arts     0.977        0.474          2.015 Indicator variable
+## 4     education.subjectSocial/behavioral sciences     0.916        0.421          1.992 Indicator variable
+## 5                  education.subjectLife sciences     1.575        0.503          4.930 Indicator variable
+## 6         education.subjectPhysical sciences/math     1.950        0.804          4.728 Indicator variable
+## 7  education.subjectComputer/information sciences     1.761        0.969          3.203 Indicator variable
+## 8                    education.subjectEngineering     0.941        0.459          1.927 Indicator variable
+## 9                      education.subjectEducation     0.365        0.104          1.284 Indicator variable
+## 10                        education.subjectHealth     0.727        0.345          1.533 Indicator variable
+## 11                           education.subjectLaw     0.707        0.255          1.959 Indicator variable
+## 12 education.subjectVocational/technical training     0.513        0.176          1.490 Indicator variable
+## 13                    education.subjectUndeclared     0.770        0.279          2.124 Indicator variable
+## 14                         education.subjectOther     0.786        0.354          1.742 Indicator variable
+
+
+

job.industry

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + job.industry, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + job.industry, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                                                                                     Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                                                                                        -2.854060   0.340815  -8.374  < 2e-16 ***
+## age                                                                                                                -0.033280   0.004306  -7.728 1.18e-14 ***
+## is.maleTRUE                                                                                                         0.381146   0.186339   2.045   0.0408 *  
+## job.industry-1                                                                                                    -11.507214   0.382080 -30.117  < 2e-16 ***
+## job.industry-2                                                                                                      0.066810   0.360007   0.186   0.8528    
+## job.industryFarming/Agriculture, Forestry, Fishing and Hunting, and Animal Production                               0.753267   0.731523   1.030   0.3032    
+## job.industryFinance, Banking, and Insurance                                                                        -0.052153   0.486781  -0.107   0.9147    
+## job.industryReal Estate and Property Management                                                                     0.460033   0.697996   0.659   0.5099    
+## job.industryProfessional, Scientific, Technical, and Business Services                                              0.362678   0.380195   0.954   0.3401    
+## job.industryManagement of Companies and Enterprises                                                                 0.390625   1.063713   0.367   0.7135    
+## job.industryEducation and Tutoring                                                                                 -0.730517   0.542590  -1.346   0.1782    
+## job.industryHealth Care (including Elder Care, Home Health Care)                                                   -0.110082   0.422465  -0.261   0.7944    
+## job.industryArts, Entertainment, and Recreation                                                                     0.383444   0.575453   0.666   0.5052    
+## job.industryAccommodation and Food Services                                                                        -0.004982   0.629938  -0.008   0.9937    
+## job.industryMining, Quarrying, and Oil and Gas Extraction                                                          -0.182107   1.071871  -0.170   0.8651    
+## job.industryPublic Administration                                                                                   0.375866   0.606949   0.619   0.5358    
+## job.industryArmed Forces                                                                                            0.252194   0.784939   0.321   0.7480    
+## job.industryUtilities, Waste Management, and Remediation Services_(22)                                             -1.339318   1.057590  -1.266   0.2054    
+## job.industryAdministrative and Support Services (such as Call Centers, Security, Landscaping, and Janitorial)      -0.540011   0.678967  -0.795   0.4264    
+## job.industryChild Day Care Services                                                                                -0.519336   1.063179  -0.488   0.6252    
+## job.industryRepairs and Maintenance                                                                                 0.911384   0.575837   1.583   0.1135    
+## job.industryPersonal Services (including Beauty, Pet Care, and Household)                                           0.048350   0.789374   0.061   0.9512    
+## job.industryCommunity/Non-Profit Organizations (including Religious and Political Organizations)                    0.203254   0.619093   0.328   0.7427    
+## job.industryConstruction and Specialty Contractors (such as Plumbing and Electrical)                               -0.235479   0.568282  -0.414   0.6786    
+## job.industryFactory, Manufacturing, and Woodworking                                                                -0.123598   0.502171  -0.246   0.8056    
+## job.industryWholesale Trade                                                                                         1.227697   0.616998   1.990   0.0466 *  
+## job.industryDelivery Services, Warehousing, and Transportation (including Air, Rail, Water, Truck, and Passenger)   0.448454   0.493363   0.909   0.3634    
+## job.industryInformation (including Publishing, Media, Telecom, Internet Search, and Social Networking)              0.408421   0.485916   0.841   0.4006    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9747189)
+## 
+## Number of Fisher Scoring iterations: 14
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                                                                                            predictor oddsratio ci_low (2.5) ci_high (97.5)
+## 1                                                                                                                age     0.967        0.959          0.975
+## 2                                                                                                        is.maleTRUE     1.464        1.016          2.109
+## 3                                                                                                     job.industry-1     0.000        0.000          0.000
+## 4                                                                                                     job.industry-2     1.069        0.528          2.165
+## 5                              job.industryFarming/Agriculture, Forestry, Fishing and Hunting, and Animal Production     2.124        0.506          8.910
+## 6                                                                        job.industryFinance, Banking, and Insurance     0.949        0.366          2.465
+## 7                                                                    job.industryReal Estate and Property Management     1.584        0.403          6.223
+## 8                                             job.industryProfessional, Scientific, Technical, and Business Services     1.437        0.682          3.028
+## 9                                                                job.industryManagement of Companies and Enterprises     1.478        0.184         11.890
+## 10                                                                                job.industryEducation and Tutoring     0.482        0.166          1.395
+## 11                                                  job.industryHealth Care (including Elder Care, Home Health Care)     0.896        0.391          2.050
+## 12                                                                   job.industryArts, Entertainment, and Recreation     1.467        0.475          4.533
+## 13                                                                       job.industryAccommodation and Food Services     0.995        0.289          3.421
+## 14                                                         job.industryMining, Quarrying, and Oil and Gas Extraction     0.834        0.102          6.814
+## 15                                                                                 job.industryPublic Administration     1.456        0.443          4.785
+## 16                                                                                          job.industryArmed Forces     1.287        0.276          5.994
+## 17                                            job.industryUtilities, Waste Management, and Remediation Services_(22)     0.262        0.033          2.083
+## 18     job.industryAdministrative and Support Services (such as Call Centers, Security, Landscaping, and Janitorial)     0.583        0.154          2.205
+## 19                                                                               job.industryChild Day Care Services     0.595        0.074          4.781
+## 20                                                                               job.industryRepairs and Maintenance     2.488        0.805          7.692
+## 21                                         job.industryPersonal Services (including Beauty, Pet Care, and Household)     1.050        0.223          4.932
+## 22                  job.industryCommunity/Non-Profit Organizations (including Religious and Political Organizations)     1.225        0.364          4.124
+## 23                              job.industryConstruction and Specialty Contractors (such as Plumbing and Electrical)     0.790        0.259          2.407
+## 24                                                               job.industryFactory, Manufacturing, and Woodworking     0.884        0.330          2.365
+## 25                                                                                       job.industryWholesale Trade     3.413        1.018         11.440
+## 26 job.industryDelivery Services, Warehousing, and Transportation (including Air, Rail, Water, Truck, and Passenger)     1.566        0.595          4.119
+## 27            job.industryInformation (including Publishing, Media, Telecom, Internet Search, and Social Networking)     1.504        0.580          3.900
+##             increment
+## 1                   1
+## 2  Indicator variable
+## 3  Indicator variable
+## 4  Indicator variable
+## 5  Indicator variable
+## 6  Indicator variable
+## 7  Indicator variable
+## 8  Indicator variable
+## 9  Indicator variable
+## 10 Indicator variable
+## 11 Indicator variable
+## 12 Indicator variable
+## 13 Indicator variable
+## 14 Indicator variable
+## 15 Indicator variable
+## 16 Indicator variable
+## 17 Indicator variable
+## 18 Indicator variable
+## 19 Indicator variable
+## 20 Indicator variable
+## 21 Indicator variable
+## 22 Indicator variable
+## 23 Indicator variable
+## 24 Indicator variable
+## 25 Indicator variable
+## 26 Indicator variable
+## 27 Indicator variable
+
+
+

job.occupation

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + job.occupation, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + job.occupation, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                                                                                          Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                                                                                             -2.859317   0.290095  -9.856  < 2e-16 ***
+## age                                                                                                                     -0.031407   0.004312  -7.283 3.48e-13 ***
+## is.maleTRUE                                                                                                              0.360765   0.179090   2.014  0.04399 *  
+## job.occupationRefused                                                                                                    0.075921   1.047868   0.072  0.94224    
+## job.occupationManagement                                                                                                -0.089604   0.349829  -0.256  0.79785    
+## job.occupationComputer and Mathematical                                                                                  0.805900   0.293052   2.750  0.00597 ** 
+## job.occupationArchitecture and Engineering                                                                               0.441968   0.481025   0.919  0.35822    
+## job.occupationLife, Physical, and Social Sciences                                                                      -13.665891   0.211452 -64.629  < 2e-16 ***
+## job.occupationCommunity and Social Services                                                                              0.348845   0.744372   0.469  0.63933    
+## job.occupationLawyer, judge                                                                                              0.476803   0.678924   0.702  0.48251    
+## job.occupationTeacher, college and university                                                                          -12.647983   1.020703 -12.391  < 2e-16 ***
+## job.occupationHealth Technologist or Technician (such as paramedic, lab technician)                                      0.177896   0.638330   0.279  0.78049    
+## job.occupationHealth Care Support (such as nursing aide, orderly, dental assistant)                                     -0.040914   0.797085  -0.051  0.95906    
+## job.occupationProtective Service                                                                                        -1.213895   1.029386  -1.179  0.23833    
+## job.occupationFood Preparation and Serving                                                                              -0.349612   0.683524  -0.511  0.60902    
+## job.occupationBuilding and Grounds Cleaning and Maintenance                                                              0.987466   0.703185   1.404  0.16026    
+## job.occupationPersonal Care and Service                                                                                 -0.258920   0.755418  -0.343  0.73179    
+## job.occupationOffice and Administrative Support                                                                         -0.763668   0.578523  -1.320  0.18685    
+## job.occupationFarming, Forestry, and Fishing                                                                             1.330953   0.808627   1.646  0.09980 .  
+## job.occupationConstruction and Extraction                                                                                0.060967   0.666060   0.092  0.92707    
+## job.occupationInstallation, Maintenance, and Repair                                                                      0.020352   0.523736   0.039  0.96900    
+## job.occupationPrecision Production (such as machinist, welder, baker, printer, tailor)                                  -0.213162   0.745985  -0.286  0.77508    
+## job.occupationTransportation and Material Moving                                                                        -0.887770   0.738712  -1.202  0.22947    
+## job.occupationArmed Services                                                                                           -13.939322   0.289202 -48.199  < 2e-16 ***
+## job.occupationOther (Please specify)                                                                                    -0.383127   0.349530  -1.096  0.27305    
+## job.occupationBusiness Operations (including Marketing)                                                                  0.498942   0.397591   1.255  0.20953    
+## job.occupationFinancial Operations or Financial Services (including Financial Advisor, Broker)                           0.300696   0.467979   0.643  0.52053    
+## job.occupationEducation, Training, and Library                                                                          -0.140354   0.454960  -0.308  0.75771    
+## job.occupationArts, Design, Entertainment, Sports, and Media                                                             1.103976   0.438103   2.520  0.01175 *  
+## job.occupationHealth Diagnosing or Treating Practitioner (such as physician, nurse, dentist, veterinarian, pharmacist)  -0.813343   0.735419  -1.106  0.26877    
+## job.occupationSales                                                                                                     -0.013234   0.390589  -0.034  0.97297    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9684664)
+## 
+## Number of Fisher Scoring iterations: 16
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                                                                                                 predictor oddsratio ci_low (2.5) ci_high (97.5)
+## 1                                                                                                                     age     0.969        0.961          0.977
+## 2                                                                                                             is.maleTRUE     1.434        1.010          2.038
+## 3                                                                                                   job.occupationRefused     1.079        0.138          8.414
+## 4                                                                                                job.occupationManagement     0.914        0.461          1.815
+## 5                                                                                 job.occupationComputer and Mathematical     2.239        1.260          3.976
+## 6                                                                              job.occupationArchitecture and Engineering     1.556        0.606          3.994
+## 7                                                                       job.occupationLife, Physical, and Social Sciences     0.000        0.000          0.000
+## 8                                                                             job.occupationCommunity and Social Services     1.417        0.329          6.098
+## 9                                                                                             job.occupationLawyer, judge     1.611        0.426          6.096
+## 10                                                                          job.occupationTeacher, college and university     0.000        0.000          0.000
+## 11                                    job.occupationHealth Technologist or Technician (such as paramedic, lab technician)     1.195        0.342          4.175
+## 12                                    job.occupationHealth Care Support (such as nursing aide, orderly, dental assistant)     0.960        0.201          4.579
+## 13                                                                                       job.occupationProtective Service     0.297        0.039          2.234
+## 14                                                                             job.occupationFood Preparation and Serving     0.705        0.185          2.692
+## 15                                                            job.occupationBuilding and Grounds Cleaning and Maintenance     2.684        0.676         10.653
+## 16                                                                                job.occupationPersonal Care and Service     0.772        0.176          3.393
+## 17                                                                        job.occupationOffice and Administrative Support     0.466        0.150          1.448
+## 18                                                                           job.occupationFarming, Forestry, and Fishing     3.785        0.776         18.467
+## 19                                                                              job.occupationConstruction and Extraction     1.063        0.288          3.922
+## 20                                                                    job.occupationInstallation, Maintenance, and Repair     1.021        0.366          2.849
+## 21                                 job.occupationPrecision Production (such as machinist, welder, baker, printer, tailor)     0.808        0.187          3.487
+## 22                                                                       job.occupationTransportation and Material Moving     0.412        0.097          1.751
+## 23                                                                                           job.occupationArmed Services     0.000        0.000          0.000
+## 24                                                                                   job.occupationOther (Please specify)     0.682        0.344          1.353
+## 25                                                                job.occupationBusiness Operations (including Marketing)     1.647        0.755          3.590
+## 26                         job.occupationFinancial Operations or Financial Services (including Financial Advisor, Broker)     1.351        0.540          3.380
+## 27                                                                         job.occupationEducation, Training, and Library     0.869        0.356          2.120
+## 28                                                           job.occupationArts, Design, Entertainment, Sports, and Media     3.016        1.278          7.119
+## 29 job.occupationHealth Diagnosing or Treating Practitioner (such as physician, nurse, dentist, veterinarian, pharmacist)     0.443        0.105          1.874
+## 30                                                                                                    job.occupationSales     0.987        0.459          2.122
+##             increment
+## 1                   1
+## 2  Indicator variable
+## 3  Indicator variable
+## 4  Indicator variable
+## 5  Indicator variable
+## 6  Indicator variable
+## 7  Indicator variable
+## 8  Indicator variable
+## 9  Indicator variable
+## 10 Indicator variable
+## 11 Indicator variable
+## 12 Indicator variable
+## 13 Indicator variable
+## 14 Indicator variable
+## 15 Indicator variable
+## 16 Indicator variable
+## 17 Indicator variable
+## 18 Indicator variable
+## 19 Indicator variable
+## 20 Indicator variable
+## 21 Indicator variable
+## 22 Indicator variable
+## 23 Indicator variable
+## 24 Indicator variable
+## 25 Indicator variable
+## 26 Indicator variable
+## 27 Indicator variable
+## 28 Indicator variable
+## 29 Indicator variable
+## 30 Indicator variable
+
+
+

risk.tolerance

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + risk.tolerance, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + risk.tolerance, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                 Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)    -3.644821   0.290448 -12.549  < 2e-16 ***
+## age            -0.032445   0.004127  -7.862 4.10e-15 ***
+## is.maleTRUE     0.320517   0.169451   1.891   0.0586 .  
+## risk.tolerance  0.153390   0.035631   4.305 1.68e-05 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 1.00971)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1, risk.tolerance = 1))
+
##        predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1            age     0.968        0.960          0.976                  1
+## 2    is.maleTRUE     1.378        0.988          1.921 Indicator variable
+## 3 risk.tolerance     1.166        1.087          1.250                  1
+
+
+
+

Miscellaneous

+
+

education.level

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + education.level, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + education.level, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                                                      Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                                                         -3.004087   0.325355  -9.233  < 2e-16 ***
+## age                                                                                 -0.033604   0.004232  -7.941 2.19e-15 ***
+## is.maleTRUE                                                                          0.479580   0.169894   2.823  0.00477 ** 
+## education.levelLess than high school degree                                          0.909354   0.354585   2.565  0.01034 *  
+## education.levelSome college but no degree (including currently enrolled in college) -0.018952   0.300965  -0.063  0.94979    
+## education.levelCertificate or technical degree                                       0.736750   0.365843   2.014  0.04405 *  
+## education.levelAssociate degree                                                      0.321663   0.324606   0.991  0.32174    
+## education.levelBachelor’s degree                                                     0.308002   0.263375   1.169  0.24225    
+## education.levelMaster’s degree                                                      -0.352900   0.358475  -0.984  0.32491    
+## education.levelProfessional degree (e.g., MBA, MD, JD)                               0.120345   0.444589   0.271  0.78664    
+## education.levelDoctoral degree                                                       0.426466   0.538741   0.792  0.42861    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9733736)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                                                              predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                                                                  age     0.967        0.959          0.975                  1
+## 2                                                                          is.maleTRUE     1.615        1.158          2.254 Indicator variable
+## 3                                          education.levelLess than high school degree     2.483        1.239          4.975 Indicator variable
+## 4  education.levelSome college but no degree (including currently enrolled in college)     0.981        0.544          1.770 Indicator variable
+## 5                                       education.levelCertificate or technical degree     2.089        1.020          4.280 Indicator variable
+## 6                                                      education.levelAssociate degree     1.379        0.730          2.606 Indicator variable
+## 7                                                     education.levelBachelor’s degree     1.361        0.812          2.280 Indicator variable
+## 8                                                       education.levelMaster’s degree     0.703        0.348          1.419 Indicator variable
+## 9                               education.levelProfessional degree (e.g., MBA, MD, JD)     1.128        0.472          2.696 Indicator variable
+## 10                                                      education.levelDoctoral degree     1.532        0.533          4.404 Indicator variable
+
+
+

income.category

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + income.category, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + income.category, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                      Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                         -3.273818   0.416856  -7.854 4.39e-15 ***
+## age                                 -0.030726   0.004441  -6.920 4.77e-12 ***
+## is.maleTRUE                          0.468895   0.169410   2.768  0.00565 ** 
+## income.category$1 to $4,999          0.678200   0.462588   1.466  0.14265    
+## income.category$5,000 to $14,999     0.675499   0.476955   1.416  0.15672    
+## income.category$15,000 to $24,999    0.927493   0.446426   2.078  0.03777 *  
+## income.category$25,000 to $39,999    0.318584   0.481331   0.662  0.50806    
+## income.category$40,000 to $49,999    0.372418   0.546639   0.681  0.49570    
+## income.category$50,000 to $74,999    0.278145   0.453145   0.614  0.53935    
+## income.category$75,000 to $99,999   -0.095317   0.496997  -0.192  0.84791    
+## income.category$100,000 to $149,999  0.016235   0.462073   0.035  0.97197    
+## income.category$150,000 to $199,999  0.383789   0.466797   0.822  0.41099    
+## income.category$200,000 or higher    0.513793   0.467091   1.100  0.27136    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9338147)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                              predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                  age     0.970        0.961          0.978                  1
+## 2                          is.maleTRUE     1.598        1.147          2.228 Indicator variable
+## 3          income.category$1 to $4,999     1.970        0.796          4.879 Indicator variable
+## 4     income.category$5,000 to $14,999     1.965        0.772          5.005 Indicator variable
+## 5    income.category$15,000 to $24,999     2.528        1.054          6.065 Indicator variable
+## 6    income.category$25,000 to $39,999     1.375        0.535          3.533 Indicator variable
+## 7    income.category$40,000 to $49,999     1.451        0.497          4.237 Indicator variable
+## 8    income.category$50,000 to $74,999     1.321        0.543          3.210 Indicator variable
+## 9    income.category$75,000 to $99,999     0.909        0.343          2.408 Indicator variable
+## 10 income.category$100,000 to $149,999     1.016        0.411          2.514 Indicator variable
+## 11 income.category$150,000 to $199,999     1.468        0.588          3.665 Indicator variable
+## 12   income.category$200,000 or higher     1.672        0.669          4.176 Indicator variable
+
+
+

total.household.savings

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + total.household.savings, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + total.household.savings, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                             Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                -3.556369   0.421537  -8.437  < 2e-16 ***
+## age                                        -0.030760   0.005611  -5.482  4.3e-08 ***
+## is.maleTRUE                                 0.518701   0.190683   2.720  0.00654 ** 
+## total.household.savingsUnder $50,000        0.763129   0.340146   2.244  0.02488 *  
+## total.household.savings$50,000 - $99,999    0.704741   0.403520   1.746  0.08076 .  
+## total.household.savings$250,000 - $499,999  0.042244   0.501924   0.084  0.93293    
+## total.household.savings$500,000 - $999,999  0.567264   0.500600   1.133  0.25717    
+## total.household.savings$1,000,000 or more   0.756296   0.453426   1.668  0.09536 .  
+## total.household.savingsNot sure             0.356281   0.501123   0.711  0.47712    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9623409)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                    predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                        age     0.970        0.959          0.980                  1
+## 2                                is.maleTRUE     1.680        1.156          2.441 Indicator variable
+## 3       total.household.savingsUnder $50,000     2.145        1.101          4.178 Indicator variable
+## 4   total.household.savings$50,000 - $99,999     2.023        0.917          4.463 Indicator variable
+## 5 total.household.savings$250,000 - $499,999     1.043        0.390          2.790 Indicator variable
+## 6 total.household.savings$500,000 - $999,999     1.763        0.661          4.705 Indicator variable
+## 7  total.household.savings$1,000,000 or more     2.130        0.876          5.182 Indicator variable
+## 8            total.household.savingsNot sure     1.428        0.535          3.814 Indicator variable
+
+
+

overall.financial.wellbeing

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + overall.financial.wellbeing, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + overall.financial.wellbeing, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                   -2.268126   0.350735  -6.467 1.04e-10 ***
+## age                                           -0.031841   0.004166  -7.643 2.29e-14 ***
+## is.maleTRUE                                    0.484261   0.168554   2.873  0.00407 ** 
+## overall.financial.wellbeingJust getting by    -0.317562   0.311349  -1.020  0.30777    
+## overall.financial.wellbeingDoing okay         -0.806923   0.296748  -2.719  0.00655 ** 
+## overall.financial.wellbeingLiving comfortably -0.691068   0.296050  -2.334  0.01960 *  
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9535067)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                       predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                           age     0.969        0.961          0.977                  1
+## 2                                   is.maleTRUE     1.623        1.166          2.258 Indicator variable
+## 3    overall.financial.wellbeingJust getting by     0.728        0.395          1.340 Indicator variable
+## 4         overall.financial.wellbeingDoing okay     0.446        0.249          0.798 Indicator variable
+## 5 overall.financial.wellbeingLiving comfortably     0.501        0.280          0.895 Indicator variable
+
+
+

received.food.stamps

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + received.food.stamps, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + received.food.stamps, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                          Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)             -3.089908   0.237432 -13.014  < 2e-16 ***
+## age                     -0.031579   0.004243  -7.442 1.06e-13 ***
+## is.maleTRUE              0.530637   0.168799   3.144  0.00167 ** 
+## received.food.stampsYes  1.018607   0.197450   5.159 2.53e-07 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9422187)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                 predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                     age     0.969        0.961          0.977                  1
+## 2             is.maleTRUE     1.700        1.221          2.367 Indicator variable
+## 3 received.food.stampsYes     2.769        1.881          4.078 Indicator variable
+
+
+

life.satisfaction

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + life.satisfaction, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + life.satisfaction, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                    Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)       -2.083025   0.307205  -6.781 1.25e-11 ***
+## age               -0.031802   0.004047  -7.858 4.23e-15 ***
+## is.maleTRUE        0.489125   0.168066   2.910  0.00362 ** 
+## life.satisfaction -0.110727   0.034123  -3.245  0.00118 ** 
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9583323)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1, life.satisfaction = 1))
+
##           predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1               age     0.969        0.961          0.976                  1
+## 2       is.maleTRUE     1.631        1.173          2.267 Indicator variable
+## 3 life.satisfaction     0.895        0.837          0.957                  1
+
+
+

employer.type

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + employer.type, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + employer.type, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                                                          Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                                                             -2.865859   0.239651 -11.958  < 2e-16 ***
+## age                                                                                     -0.032834   0.004279  -7.674  1.8e-14 ***
+## is.maleTRUE                                                                              0.457349   0.172355   2.654  0.00798 ** 
+## employer.typeNot asked                                                                   0.019641   0.223010   0.088  0.92982    
+## employer.typeRefused                                                                   -10.738646   0.432384 -24.836  < 2e-16 ***
+## employer.typeGovernment                                                                 -0.071288   0.273183  -0.261  0.79413    
+## employer.typeNon-profit organization including tax exempt and charitable organizations  -0.194815   0.337976  -0.576  0.56434    
+## employer.typeSelf-employed                                                               0.513342   0.244855   2.097  0.03606 *  
+## employer.typeWorking in the family business                                              0.679120   0.593724   1.144  0.25272    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9561779)
+## 
+## Number of Fisher Scoring iterations: 13
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                                                                predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                                                                    age     0.968        0.960          0.976                  1
+## 2                                                                            is.maleTRUE     1.580        1.127          2.215 Indicator variable
+## 3                                                                 employer.typeNot asked     1.020        0.659          1.579 Indicator variable
+## 4                                                                   employer.typeRefused     0.000        0.000          0.000 Indicator variable
+## 5                                                                employer.typeGovernment     0.931        0.545          1.591 Indicator variable
+## 6 employer.typeNon-profit organization including tax exempt and charitable organizations     0.823        0.424          1.596 Indicator variable
+## 7                                                             employer.typeSelf-employed     1.671        1.034          2.700 Indicator variable
+## 8                                            employer.typeWorking in the family business     1.972        0.616          6.315 Indicator variable
+
+
+

employer.type = Self-employed & job.occupation = Computer and +Mathematical

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male +
+    I(employer.type == "Self-employed") * I(job.occupation == "Computer and Mathematical"), 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + I(employer.type == 
+##     "Self-employed") * I(job.occupation == "Computer and Mathematical"), 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                                                                               Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                                                                                  -2.926030   0.223009 -13.121  < 2e-16 ***
+## age                                                                                          -0.032243   0.004112  -7.841 4.86e-15 ***
+## is.maleTRUE                                                                                   0.402155   0.171206   2.349  0.01884 *  
+## I(employer.type == "Self-employed")TRUE                                                       0.535333   0.238590   2.244  0.02487 *  
+## I(job.occupation == "Computer and Mathematical")TRUE                                          0.828596   0.255330   3.245  0.00118 ** 
+## I(employer.type == "Self-employed")TRUE:I(job.occupation == "Computer and Mathematical")TRUE -0.030258   0.800649  -0.038  0.96985    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9686841)
+## 
+## Number of Fisher Scoring iterations: 7
+
print(or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1)))
+
##                                                                                      predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                                                                          age     0.968        0.960          0.976                  1
+## 2                                                                                  is.maleTRUE     1.495        1.069          2.091 Indicator variable
+## 3                                                      I(employer.type == "Self-employed")TRUE     1.708        1.070          2.726 Indicator variable
+## 4                                         I(job.occupation == "Computer and Mathematical")TRUE     2.290        1.388          3.778 Indicator variable
+## 5 I(employer.type == "Self-employed")TRUE:I(job.occupation == "Computer and Mathematical")TRUE     0.970        0.202          4.661 Indicator variable
+
+
+

informal.selling.of.goods

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + informal.selling.of.goods, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + informal.selling.of.goods, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                   -3.121719   0.235807 -13.238  < 2e-16 ***
+## age                           -0.030387   0.004167  -7.292 3.24e-13 ***
+## is.maleTRUE                    0.507850   0.168997   3.005  0.00266 ** 
+## informal.selling.of.goodsTRUE  1.008002   0.203127   4.962 7.06e-07 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9585714)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                       predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                           age     0.970        0.962          0.978                  1
+## 2                   is.maleTRUE     1.662        1.193          2.314 Indicator variable
+## 3 informal.selling.of.goodsTRUE     2.740        1.840          4.080 Indicator variable
+
+
+

freelance.or.gig.work

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + freelance.or.gig.work, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + freelance.or.gig.work, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                            Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)               -3.056709   0.228730 -13.364  < 2e-16 ***
+## age                       -0.030618   0.004081  -7.502 6.75e-14 ***
+## is.maleTRUE                0.465822   0.168194   2.770  0.00562 ** 
+## freelance.or.gig.workTRUE  1.218055   0.226264   5.383 7.45e-08 ***
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.973539)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                   predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                       age     0.970        0.962          0.978                  1
+## 2               is.maleTRUE     1.593        1.146          2.216 Indicator variable
+## 3 freelance.or.gig.workTRUE     3.381        2.170          5.268 Indicator variable
+
+
+

resides.in.metro.statistical.area

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + resides.in.metro.statistical.area, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + resides.in.metro.statistical.area, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                        Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                           -2.717748   0.305226  -8.904  < 2e-16 ***
+## age                                   -0.032861   0.004008  -8.199 2.68e-16 ***
+## is.maleTRUE                            0.474676   0.168284   2.821   0.0048 ** 
+## resides.in.metro.statistical.areaTRUE -0.116266   0.245596  -0.473   0.6359    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9614606)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                               predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                   age     0.968        0.960          0.975                  1
+## 2                           is.maleTRUE     1.607        1.156          2.236 Indicator variable
+## 3 resides.in.metro.statistical.areaTRUE     0.890        0.550          1.441 Indicator variable
+
+
+

respondent.device.type

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + respondent.device.type, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + respondent.device.type, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                                          Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)                             -2.918718   0.310897  -9.388  < 2e-16 ***
+## age                                     -0.031673   0.004376  -7.237 4.87e-13 ***
+## is.maleTRUE                              0.474081   0.176238   2.690  0.00716 ** 
+## respondent.device.typeiPad               0.103007   0.620870   0.166  0.86823    
+## respondent.device.typeiPod               2.970426   1.128025   2.633  0.00847 ** 
+## respondent.device.typeiPhone             0.066980   0.245593   0.273  0.78507    
+## respondent.device.typeMac               -0.299168   0.312683  -0.957  0.33870    
+## respondent.device.typeChromeBook        -0.691715   1.016032  -0.681  0.49601    
+## respondent.device.typeAndroidTablet      0.392972   0.481166   0.817  0.41411    
+## respondent.device.typeAndroidPhone       0.182044   0.218314   0.834  0.40438    
+## respondent.device.typeTabletOther      -13.379916   1.021910 -13.093  < 2e-16 ***
+## respondent.device.typeKindleFireTablet -13.051119   0.219470 -59.467  < 2e-16 ***
+## respondent.device.typeothers             0.505531   0.618699   0.817  0.41390    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9576177)
+## 
+## Number of Fisher Scoring iterations: 16
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##                                 predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                                     age     0.969        0.961          0.977                  1
+## 2                             is.maleTRUE     1.607        1.137          2.269 Indicator variable
+## 3              respondent.device.typeiPad     1.108        0.328          3.743 Indicator variable
+## 4              respondent.device.typeiPod    19.500        2.137        177.957 Indicator variable
+## 5            respondent.device.typeiPhone     1.069        0.661          1.730 Indicator variable
+## 6               respondent.device.typeMac     0.741        0.402          1.369 Indicator variable
+## 7        respondent.device.typeChromeBook     0.501        0.068          3.669 Indicator variable
+## 8     respondent.device.typeAndroidTablet     1.481        0.577          3.804 Indicator variable
+## 9      respondent.device.typeAndroidPhone     1.200        0.782          1.840 Indicator variable
+## 10      respondent.device.typeTabletOther     0.000        0.000          0.000 Indicator variable
+## 11 respondent.device.typeKindleFireTablet     0.000        0.000          0.000 Indicator variable
+## 12           respondent.device.typeothers     1.658        0.493          5.575 Indicator variable
+
+
+

is.kp.laptop.user

+
svyglm.fit <- svyglm(crypto.used.as.payment ~ age + is.male + is.kp.laptop.user, 
+  SHED, family = stats::quasibinomial(link = "logit"))
+summary(svyglm.fit)
+
## 
+## Call:
+## svyglm(formula = crypto.used.as.payment ~ age + is.male + is.kp.laptop.user, 
+##     design = SHED, family = stats::quasibinomial(link = "logit"))
+## 
+## Survey design:
+## svydesign(ids = ~0, data = SHED, weights = SHED$weight_pop)
+## 
+## Coefficients:
+##                        Estimate Std. Error t value Pr(>|t|)    
+## (Intercept)           -2.826935   0.216554 -13.054  < 2e-16 ***
+## age                   -0.032808   0.004015  -8.171 3.37e-16 ***
+## is.maleTRUE            0.472575   0.168431   2.806  0.00503 ** 
+## is.kp.laptop.userTRUE  0.247685   0.471514   0.525  0.59939    
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+## 
+## (Dispersion parameter for quasibinomial family taken to be 0.9638515)
+## 
+## Number of Fisher Scoring iterations: 7
+
or_svyglm(SHED$variables, svyglm.fit, incr = list(age = 1))
+
##               predictor oddsratio ci_low (2.5) ci_high (97.5)          increment
+## 1                   age     0.968        0.960          0.975                  1
+## 2           is.maleTRUE     1.604        1.153          2.232 Indicator variable
+## 3 is.kp.laptop.userTRUE     1.281        0.508          3.228 Indicator variable
-
-

Including Plots

-

You can also embed plots, for example:

-

-

Note that the echo = FALSE parameter was added to the -code chunk to prevent printing of the R code that generated the -plot.