4  Descriptive Statistics

Objectives

This chapter presents descriptive statistics on the data. It shows the distribution of the MHI-5 and MHI-3 scores in the sample. Some statistics about all the variables are given on the whole sample and on sub-samples defined according to the classification of people given their MHI-5 score.

Let us load:

Let us first load {tidyverse}:

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

The raw data:

load("../data/df_merged.rda")
dim(df)
[1] 18561   841

Then the cleaned data:

load("../data/df_clean.rda")
dim(df_clean)
[1] 5293   94

Let us add a variable in df stating whether or not the observation is included in the final sample:

df <- df |> 
  mutate(in_sample = id %in% df_clean$id)

Sanity check:

table(df$in_sample)

FALSE  TRUE 
13268  5293 

Let us get the name of each variable, as defined in [Chapter -Chapter 2)

load("../data/out/variable_names.rda")

Let us change the Not reported and Not surveyed variables to No answer:

df <- 
  df |> 
  mutate(
    across(
      .cols = is.factor,
      .fns = function(x) {
        fct_recode(x,
                   "No answer" = "Not reported",
                   "No answer" = "Not surveyed"
        )
      }
    )
  )

4.1 MHI-Scores

We can first look at the distribution of the MHI-5 and MHI-3 scores over the entire dataset. Due to the construction of the MHI scores, one notes relatively high masses for multiples of 5. The distribution of MHI scores is skewed on the right both for MHI-3 and MHI-5.

df |> 
  group_by(PERSONNE_pb_depress) |> 
  summarise(
    mhi_5_mean = mean(score_t_corrected, na.rm=T),
    mhi_5_sd = sd(score_t_corrected, na.rm=T),
    n = n()
  )
# A tibble: 3 × 4
  PERSONNE_pb_depress mhi_5_mean mhi_5_sd     n
  <fct>                    <dbl>    <dbl> <int>
1 No depression             70.7     17.4 11860
2 Depression                41.2     19.1   705
3 No answer                 70.1     17.5  5996
Show the codes to create the graph
ggplot(
  data = df |> 
  select(PERSONNE_score_t_corrected, score_mhi_3) |> 
  rename(
    "MHI-5 Score" = PERSONNE_score_t_corrected,
    "MHI-3 Score" = score_mhi_3
  ) |> 
  gather(score, value, `MHI-5 Score`, `MHI-3 Score`), 
  mapping = aes(x = value)
  ) +
  geom_density(alpha = .3, fill = "dodger blue") +
  labs(
    x = "Mental Health Inventory score", y = NULL
  ) +
  facet_wrap(~score, ncol = 1) +
  theme(
    plot.title.position = "plot",
    plot.title = element_text(hjust = 0, size = rel(1.3), face = "bold")
  )
Warning: Removed 12376 rows containing non-finite outside the scale range
(`stat_density()`).
Figure 4.1: Density of MHI-5 and MHI-3 scores
Show the codes to create the graph
ggplot(data = df |> 
  filter(in_sample) |> 
  select(PERSONNE_score_t_corrected, score_mhi_3) |> 
  rename("MHI-5 Score" = PERSONNE_score_t_corrected, "MHI-3 Score" = score_mhi_3) |> 
  gather(score, value, `MHI-5 Score`, `MHI-3 Score`), 
  mapping = aes(x = value)
) +
  geom_density(alpha = .3, fill = "dodger blue") +
  labs(
    x = "Mental Health Inventory score", y = NULL) +
  facet_wrap(~score, ncol = 1)
Figure 4.2: Density of MHI-5 and MHI-3 scores

Respondents to the ESPS survey answered the following question: “In the past 12 months, have you experienced depression?” (“Au cours des 12 derniers mois, avez-vous eu une dépression?”).

The responses are distributed as follows:

# Counts
table(df$PERSONNE_pb_depress)

No depression    Depression     No answer 
        11860           705          5996 
# Proportions
prop.table(table(df$PERSONNE_pb_depress)) |> round(2)

No depression    Depression     No answer 
         0.64          0.04          0.32 
Note

Recall that in the sample used, we focus on individuals who reported not having experienced depression during the past 12 months.

# Counts
df |> 
  filter(in_sample) |>
  pull(PERSONNE_pb_depress) |> 
  table()

No depression    Depression     No answer 
         5293             0             0 
# Proportions
df |> 
  filter(in_sample) |>
  pull(PERSONNE_pb_depress) |> 
  table() |> 
  prop.table() |> 
  round(digits = 2)

No depression    Depression     No answer 
            1             0             0 

Let us examine the distribution of the MHI-5 score by grouping individuals according to their response to the question regarding depression. Let us add a vertical dashed line on the graph corresponding to the first quartile of the overall distribution of MHI-5 scores.

Show the codes to create the graph
p_distrib_mhi_5 <- ggplot(
    data = df,
    mapping = aes(x = PERSONNE_score_t_corrected)
  ) +
  geom_density(
    mapping = aes(fill = PERSONNE_pb_depress, linetype = PERSONNE_pb_depress), 
    alpha = .3
  ) +
  geom_vline(
    xintercept = quantile(
      df$PERSONNE_score_t_corrected,
      probs = .25, 
      na.rm = TRUE
    ),
    colour = "#0081BC", linetype = "dashed", linewidth = 2
  ) +
  labs(x = "Mental Health Inventory score (MHI-5)", y = NULL) +
  scale_fill_manual(
    NULL,
    values = c(
      "No depression" = "#009D57",
      "Depression" = "#EE324E",
      "No answer" = "grey"
    )
  ) +
  scale_linetype_discrete(NULL) +
  theme(legend.position = "bottom")

p_distrib_mhi_5
Warning: Removed 6188 rows containing non-finite outside the scale range
(`stat_density()`).
Figure 4.3: Density of MHI-5 scores

It can be seen from this graph that the distributions of the MHI-5 score are very different between individuals reporting a recent depressive episode and others. Overall, the MHI-5 score for these individuals is much lower than for others.

On the other hand, the distribution of the MHI-5 score of individuals reporting that they have not experienced depression recently is very similar to that of individuals who did not answer the question.

Show the codes to create the graph
p_distrib_mhi_5 <- 
  ggplot(
    data = df |> 
  filter(in_sample),
  mapping = aes(x = PERSONNE_score_t_corrected)
  ) +
  geom_density(
    mapping = aes(fill = PERSONNE_pb_depress, linetype = PERSONNE_pb_depress), 
    alpha = .3
  ) +
  geom_vline(
    xintercept = quantile(
      df$PERSONNE_score_t_corrected, probs = .25, 
      na.rm = TRUE
    ),
    colour = "#0081BC", linetype = "dashed", linewidth = 2
  ) +
  labs(x = "Mental Health Inventory score (MHI-5)", y = NULL) +
  scale_fill_manual(
    NULL, 
    values = c(
      "No depression" = "#009D57",
      "Depression" = "#EE324E",
      "No answer" = "grey"
    )
  ) +
  scale_linetype_discrete(NULL) +
  theme(legend.position = "bottom")
p_distrib_mhi_5
Figure 4.4: Density of MHI-5 scores

Recall that we used the first quartile as the threshold for the classification of individuals as either “low” MHI score or “high” MHI score. The first quantile is:

quant <- .25
q1_mhi_5 <- quantile(df$PERSONNE_score_t_corrected, probs = quant, na.rm=TRUE)
q1_mhi_5
25% 
 60 

We decided to remove from the dataset the individuals who did not answer the question regarding depression, leaving us with the following distribution:

tableau_size <- 
  df |> 
  filter(PERSONNE_age >= 15) |> 
  filter(!is.na(PERSONNE_score_t_corrected)) |> 
  filter(PERSONNE_pb_depress != "No answer") |> 
  mutate(
    PERSONNE_pb_depress = factor(
      PERSONNE_pb_depress, levels = c("Depression", "No depression")
    )
  ) |> 
  mutate(inf_q1 = PERSONNE_score_t_corrected <= q1_mhi_5) |> 
  mutate(
    inf_q1 = factor(inf_q1, levels = c(T,F), 
                    labels = c("MHI-5 <= Q1", "MHI-5 > Q1")
    )
  ) |> 
  ungroup()

tableau_size_2 <- table(tableau_size$inf_q1, tableau_size$PERSONNE_pb_depress)
(tableau_size_2_margins <- addmargins(tableau_size_2))
             
              Depression No depression   Sum
  MHI-5 <= Q1        572          3193  3765
  MHI-5 > Q1         101          8006  8107
  Sum                673         11199 11872
round(prop.table(tableau_size_2)*100,1)
             
              Depression No depression
  MHI-5 <= Q1        4.8          26.9
  MHI-5 > Q1         0.9          67.4
tableau_size_sample <- 
  df |> 
  filter(in_sample) |> 
  filter(!is.na(PERSONNE_score_t_corrected)) |> 
  filter(PERSONNE_pb_depress != "No answer") |> 
  mutate(
    PERSONNE_pb_depress = factor(
      PERSONNE_pb_depress, 
      levels = c("Depression", "No depression")
    )
  ) |> 
  mutate(inf_q1 = PERSONNE_score_t_corrected <= q1_mhi_5) |> 
  mutate(
    inf_q1 = factor(
      inf_q1, levels = c(T,F), 
      labels = c("MHI-5 <= Q1", "MHI-5 > Q1")
    )
  )|> 
  ungroup()

tableau_size_sample_2 <- table(tableau_size_sample$inf_q1, tableau_size_sample$PERSONNE_pb_depress)
(tableau_size_sample_2_margins <- addmargins(tableau_size_sample_2))
             
              Depression No depression  Sum
  MHI-5 <= Q1          0          1597 1597
  MHI-5 > Q1           0          3696 3696
  Sum                  0          5293 5293
round(prop.table(tableau_size_sample_2)*100,1)
             
              Depression No depression
  MHI-5 <= Q1        0.0          30.2
  MHI-5 > Q1         0.0          69.8

In the study, we decided to use the first quartile of the distribution of MHI-5 scores to classify individuals as depressed (when their MHI-5 score is less than or equal to the first quartile of the distribution) or non-depressed (when their MHI-5 score is greater than the first quartile of the distribution). It is possible to illustrates the impact of this choice on the proportion of individuals designated as depressed with respect to the MHI-5 score. To that end, we can first create a function that computes the proportion of people classified as depressive depending on the selected threshold.

get_prop <- function(prob, df) {
  q1_mhi_5 <- quantile(df$PERSONNE_score_t_corrected, probs = prob, na.rm=TRUE)
  tableau <- df |> 
    filter(!is.na(PERSONNE_score_t_corrected)) |> 
    filter(PERSONNE_pb_depress != "No answer") |> 
    mutate(inf_q1 = PERSONNE_score_t_corrected <= q1_mhi_5) |> 
    group_by(PERSONNE_pb_depress) |> 
    summarise(inf_q1 = sum(inf_q1),
              sup_q1 = n() - inf_q1,
              tot = n()) |> 
    mutate(inf_q1_prop = inf_q1 / (inf_q1 + sup_q1),
           inf_q1_prop = round(inf_q1_prop*100, 2))
  
  nb_inf_q1 <- tableau |> filter(PERSONNE_pb_depress == "No depression") |> 
    pull(inf_q1)
  
  nb_sup_q1 <- tableau |> filter(PERSONNE_pb_depress == "No depression") |> 
    pull(sup_q1)
  
  
  nb_obs_depression <- tableau |> 
    filter(PERSONNE_pb_depress == "No depression") |> 
    pull(tot)
  
  tibble(
    prob = prob, 
    cutoff = q1_mhi_5, 
    prop_no_depression_inf = nb_inf_q1 / nb_obs_depression
  )
}

This function can be applied to a sequence of thresholds, ranging from 0 to 1:

prop_no_depression_inf <- 
  map_dfr(.x = seq(0, 1, by = .05), .f = get_prop, df = df)

We can plot the proportion of people classified as drepressive as a function of the threshold used on the MHI-5 score. We have added a vertical blue dashed line to show the threshold used, i.e., the first quartile of the MHI-5 score distribution.

Show the codes to create the graph
p_imaginary_healtyh <- 
  ggplot(
    data = prop_no_depression_inf, 
    mapping = aes(x = cutoff, y = prop_no_depression_inf)
  ) +
  geom_line() +
  geom_point() +
  geom_vline(
    xintercept = q1_mhi_5, colour = "black", linetype = "dashed", size = 2
  ) +
  labs(
    x = "MHI-5 score", y = NULL,
       title = ""
    ) +
  theme(plot.title.position = "plot",
        plot.title = element_text(hjust = 0, size = rel(1.3), face = "bold"))
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
Show the codes to create the graph
p_imaginary_healtyh
Figure 4.5: Proportion of individuals classified as depressive depending on MHI-5 score
Show the codes to create the graph
p_distrib_ages <- 
  ggplot(
    data = df |> 
  filter(
    PERSONNE_pb_depress %in% c("Depression", "No depression"),
    !is.na(inf_q1_mhi_5)
  ) |> 
  mutate(
    PERSONNE_pb_depress = factor(
      PERSONNE_pb_depress,
      levels = c("Depression", "No depression")
    )
  ) |> 
  mutate(
    inf_q1_mhi_5 = factor(
      as.character(inf_q1_mhi_5),
      levels = c("<=Q1", ">Q1"),
      labels = c("MHI-5 <= Q1", "MHI-5 >Q1")
    )
  ),
  mapping = aes(x = PERSONNE_age)
  ) +
  geom_density(aes(fill = inf_q1_mhi_5), alpha = .5) +
  labs(x = "Age", y = NULL) +
  scale_fill_manual(
    NULL, values = c(
      "MHI-5 >Q1" = "#009D57",
      "MHI-5 <= Q1" = "#EE324E"
    )
  ) +
  facet_grid(inf_q1_mhi_5 ~ PERSONNE_pb_depress) +
  theme(legend.position = "bottom")
p_distrib_ages
Figure 4.6: Density of age of individuals in each category
Show the codes to create the graph
p_distrib_ages_2 <- 
  ggplot(
    data = df |> 
      filter(in_sample) |> 
      filter(
        PERSONNE_pb_depress %in% c("Depression", "No depression"),
        !is.na(inf_q1_mhi_5)
      ) |> 
      mutate(
        PERSONNE_pb_depress = factor(
          PERSONNE_pb_depress,
          levels = c("Depression", "No depression")
        )
      ) |> 
      mutate(
        inf_q1_mhi_5 = factor(
          as.character(inf_q1_mhi_5),
          levels = c("<=Q1", ">Q1"),
          labels = c("MHI-5 <= Q1", "MHI-5 >Q1")
        )
      ),
    mapping = aes(x = PERSONNE_age)
  ) +
  geom_density(aes(fill = inf_q1_mhi_5), alpha = .5) +
  labs(x = "Age", y = NULL) +
  scale_fill_manual(
    NULL,
    values = c("MHI-5 >Q1" = "#009D57", "MHI-5 <= Q1" = "#EE324E")
  ) +
  facet_grid(inf_q1_mhi_5 ~ PERSONNE_pb_depress) +
  theme(legend.position = "bottom")

p_distrib_ages_2
Figure 4.7: Density of age of individuals in each category

4.2 Differences Between Sub-samples

We wish to provide descriptive statistics for sub samples of the data. As the study focuses on people who report they did not experience depression during the previous year, the descriptive statistics are provided only for these individuals. We consider three different subsets:

  • all the individuals who report they did not experience depression during the previous year

  • among those:

  • individuals with a low MHI-5 score (imaginary healthy)

  • individuals with a high MHI-5.

4.2.1 Heplper Functions

We first create a function that format p-values:

#' format_p_value
#' Format the p-value so that it displays "<10^{i}", if i <= 3
#' rounds the value with 2 digits otherwise
#' @param x p-value to format
#' x <- 0.000133613 ; x <- 0.0011
format_p_value <- function(x) {
  if (x < 10^-3) {
    resul <- str_c("**$< 10^{-3}$**")
  } else if (x > 10^-3) {
    if (x < 0.05) {
      resul <- str_c("**$", round(x, 3), "$**")
    } else {
      resul <- str_c("$", round(x, 3), "$")
    }
  } else {
    resul <- "**$0.001$**"
  }
  
  resul
}

Then, we create a function that provides some summary statistics for that specific variable, depending on its class:

  • if the variable is numerical: the average value
  • if the variable is categorical: the number of observation and the proportion of each category.

These summary statistics are given for each of the three subsets of data described previously. In addition, the results of a test of equality of means (for numerical variables) or proportions (for categorical ones) is provided.

#' sample_diff_depression
#' Compute descriptive statistics on `df` grouped by `grouping_var`
#' depending on the type of the variable of interest (qualitative, ordinal, numerical)
#' Then performs test of equality of mean (or proportion) on the sub-samples.
#' @param variable (string) name of the variable of interest
#' @param grouping_var (string) name of the qualitative variable that defines groups
#' @param type type of the variable (qualitative, ordinal, or numerical)
#' variable <- "PERSONNE_age" ; grouping_var <- "PERSONNE_pb_depress"
sample_diff_depression <- function(variable, 
                                   df, 
                                   grouping_var, 
                                   type = c("qualitative", "ordinal", "numerical")) {
  
  label_variable <- variable_names |> 
    filter(variable == !!variable) |> pull(label)
  
  
  if (type %in% c("qualitative", "ordinal")) {
    
    whole_sample <- 
      df |> 
      filter(!is.na(!!!syms(variable)), !is.na(!!!syms(grouping_var))) |> 
      mutate(label = label_variable) |> 
      select(label, !!!variable) |> 
      group_by(label, !!!syms(variable)) |> 
      summarise(n = n())
    
    nb_tot <- sum(whole_sample$n)
    
    whole_sample <- 
      whole_sample |> 
      mutate(
        pct = n / sum(n),
        pct = (round(100 * pct, 2)),
        pct = str_c("(", pct, "%)")
      ) |> 
      unite(`Whole Sample`, n, pct, sep = " ")
    
    subsamples <- 
      df |> 
      filter(!is.na(!!!syms(variable)), !is.na(!!!syms(grouping_var))) |> 
      mutate(label = label_variable) |> 
      select(label, !!!variable, !!!grouping_var) |> 
      group_by(label, !!!syms(variable), !!!(syms(grouping_var))) |> 
      summarize(n = n()) |> 
      group_by(!!!syms(grouping_var)) |> 
      mutate(
        pct = n / sum(n),
        pct = (round(100 * pct, 2)),
        pct = str_c("(", pct, "%)")
      ) |> 
      unite(value, n, pct, sep = " ")
    
    res <- 
      whole_sample |> 
      left_join(subsamples) |> 
      ungroup() |> 
      spread(
        key = grouping_var, 
        value = "value", 
        fill = "0 (0.00%)"
      ) |> 
      mutate(
        label = ifelse(
          row_number() == 1, 
          yes = str_c(label, " (n = ", format(nb_tot, big.mark = ","), ")"), 
          no = label
        )
      ) |> 
      unite(label, label, !!!variable, sep = " ")
    
  } else {
    
    whole_sample <- 
      df |> 
      filter(!is.na(!!!syms(variable)), !is.na(!!!syms(grouping_var))) |> 
      mutate(label = label_variable) |> 
      select(label, !!!variable)
    
    nb_tot <- nrow(whole_sample)
    
    whole_sample <- 
      whole_sample |> 
      group_by(label) |> 
      summarize(
        mean = mean(!!!syms(variable)) |> round(2),
        sd = sd(!!!syms(variable)) |> round(2)
      ) |> 
      mutate(sd = str_c("(+/-", sd, ")")) |> 
      unite(`Whole Sample`, mean, sd, sep = " ")
    
    subsamples <- 
      df |> 
      filter(!is.na(!!!syms(variable)), !is.na(!!!syms(grouping_var))) |> 
      mutate(label = label_variable) |> 
      select(label, !!!variable, !!!grouping_var) |> 
      group_by(label, !!!syms(grouping_var)) |> 
      summarize(
        mean = mean(!!!syms(variable)) |> round(2),
        sd = sd(!!!syms(variable)) |> round(2)
      ) |> 
      mutate(sd = str_c("(+/-", sd, ")")) |> 
      unite(value, mean, sd, sep = " ")
    
    res <- 
      whole_sample |> 
      left_join(subsamples) |> 
      ungroup() |> 
      spread(
        key = grouping_var,  
        value = "value", 
        fill = "0 (+/-0.00)"
      ) |> 
      mutate(
        label = ifelse(
          row_number() == 1, 
          yes = str_c(label, " (n = ", format(nb_tot, big.mark = ","), ")"), 
          no = label
        )
      )
  }
  
  if (type == "qualitative") {
    chisq_test <- chisq.test(df |> pull(grouping_var), df |> pull(variable))
    p_value <- chisq_test$p.value
  } else if (type == "ordinal") {
    kruskal_test <- kruskal.test(
      str_c(grouping_var, "~", variable) |> as.formula(), 
      data = df
    )
    p_value <- kruskal_test$p.value
  } else {
    # Numerical
    form <- str_c(variable, " ~ ", grouping_var) |> as.formula()
    anov <- aov(form, data = df)
    anov_summary <-  anov |> summary() |> pluck(1)
    p_value <- anov_summary$`Pr(>F)`[1]
  }
  
  # Adding stars for p-values
  p_value <- format_p_value(p_value)
  
  resul <- res |> mutate(p_value = c(rep("", nrow(res) - 1), p_value))
  resul
}# End of sample_diff_depression()

For example, for a numerical variable, age, on the raw sample:

sample_diff_depression(
  variable = "PERSONNE_age",
  df = df |> filter(PERSONNE_pb_depress == "No depression"),
  grouping_var = "inf_q1_mhi_5",
  type = "numerical"
)
`summarise()` has grouped output by 'label'. You can override using the
`.groups` argument.
Joining with `by = join_by(label)`
# A tibble: 1 × 5
  label            `Whole Sample`   `<=Q1`           `>Q1`            p_value   
  <chr>            <chr>            <chr>            <chr>            <chr>     
1 Age (n = 11,199) 46.65 (+/-19.01) 48.71 (+/-18.56) 45.83 (+/-19.13) **$< 10^{…

Still for age, but on the final sample:

sample_diff_depression(
  variable = "PERSONNE_age",
  df = df |> filter(in_sample, PERSONNE_pb_depress == "No depression"),
  grouping_var = "inf_q1_mhi_5",
  type = "numerical"
)
`summarise()` has grouped output by 'label'. You can override using the
`.groups` argument.
Joining with `by = join_by(label)`
# A tibble: 1 × 5
  label           `Whole Sample`  `<=Q1`           `>Q1`            p_value     
  <chr>           <chr>           <chr>            <chr>            <chr>       
1 Age (n = 5,293) 48.7 (+/-18.58) 50.04 (+/-18.28) 48.11 (+/-18.67) **$< 10^{-3…

And for a categorical variables (gender):

sample_diff_depression(
  variable = "PERSONNE_sexe",
  df = df |> filter(PERSONNE_pb_depress == "No depression"),
  grouping_var = "inf_q1_mhi_5",
  type = "qualitative"
)
`summarise()` has grouped output by 'label'. You can override using the
`.groups` argument.
`summarise()` has grouped output by 'label', 'PERSONNE_sexe'. You can override
using the `.groups` argument.
Joining with `by = join_by(label, PERSONNE_sexe)`
# A tibble: 2 × 5
  label                      `Whole Sample` `<=Q1`        `>Q1`         p_value 
  <chr>                      <chr>          <chr>         <chr>         <chr>   
1 Gender (n = 11,199) Female 5736 (51.22%)  1892 (59.25%) 3844 (48.01%) ""      
2 Gender Male                5463 (48.78%)  1301 (40.75%) 4162 (51.99%) "**$< 1…

Then, we can create a function that applies the previously defined sample_diff_depression() function to some variables (to create descriptive statistics for some groups of variables).

library(xtable)

#' print_tableau
#' Creates a table with descriptive statistics for all variables in `variable_names[ind, ]`
#' Creates subsets depending on `inf_q1_mhi_5`
#' @param ind
#' @param df data frame to use
print_tableau <- function(ind, df) {
  table_desc_stat <- 
    map_dfr(ind, function(i){
      sample_diff_depression(
        variable = variable_names$variable[i],
        df = df |> filter(PERSONNE_pb_depress == "No depression"),
        grouping_var = "inf_q1_mhi_5",
        type = variable_names$type[i]
      ) |> 
        mutate(variable = variable_names$variable[i])
    }) |> 
    ungroup()
  
  table_desc_stat |> select(-variable)
}# End of print_tableau()

4.2.2 Tables

This function can eventually be applied to some groups of variables.

Table 4.1: Personnal characteristics
ind_personnes <- which(str_detect(variable_names$variable, "^PERSONNE_"))
print_tableau(ind = ind_personnes[-1], df = df) |> 
  kableExtra::kable(format = "html", escape = FALSE) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Asthma (n = 11,199) No 10465 (93.45%) 2897 (90.73%) 7568 (94.53%)
Asthma Yes 734 (6.55%) 296 (9.27%) 438 (5.47%) \(< 10^{-3}\)
Bronchitis (n = 11,199) No 10636 (94.97%) 2912 (91.2%) 7724 (96.48%)
Bronchitis Yes 563 (5.03%) 281 (8.8%) 282 (3.52%) \(< 10^{-3}\)
Heart Attack (n = 11,199) No 11140 (99.47%) 3161 (99%) 7979 (99.66%)
Heart Attack Yes 59 (0.53%) 32 (1%) 27 (0.34%) \(< 10^{-3}\)
Artery Disease (n = 11,199) No 11024 (98.44%) 3113 (97.49%) 7911 (98.81%)
Artery Disease Yes 175 (1.56%) 80 (2.51%) 95 (1.19%) \(< 10^{-3}\)
Hypertension (n = 11,199) No 9940 (88.76%) 2718 (85.12%) 7222 (90.21%)
Hypertension Yes 1259 (11.24%) 475 (14.88%) 784 (9.79%) \(< 10^{-3}\)
Stroke (n = 11,199) No 11133 (99.41%) 3159 (98.94%) 7974 (99.6%)
Stroke Yes 66 (0.59%) 34 (1.06%) 32 (0.4%) \(< 10^{-3}\)
Osteoarthritis (n = 11,199) No 9896 (88.37%) 2642 (82.74%) 7254 (90.61%)
Osteoarthritis Yes 1303 (11.63%) 551 (17.26%) 752 (9.39%) \(< 10^{-3}\)
Low Back Pain (n = 11,199) No 9161 (81.8%) 2365 (74.07%) 6796 (84.89%)
Low Back Pain Yes 2038 (18.2%) 828 (25.93%) 1210 (15.11%) \(< 10^{-3}\)
Neck Pain (n = 11,199) No 9753 (87.09%) 2527 (79.14%) 7226 (90.26%)
Neck Pain Yes 1446 (12.91%) 666 (20.86%) 780 (9.74%) \(< 10^{-3}\)
Diabetes (n = 11,199) No 10339 (92.32%) 2831 (88.66%) 7508 (93.78%)
Diabetes Yes 860 (7.68%) 362 (11.34%) 498 (6.22%) \(< 10^{-3}\)
Allergy (n = 11,199) No 9665 (86.3%) 2626 (82.24%) 7039 (87.92%)
Allergy Yes 1534 (13.7%) 567 (17.76%) 967 (12.08%) \(< 10^{-3}\)
Cirrhosis (n = 11,199) No 11189 (99.91%) 3188 (99.84%) 8001 (99.94%)
Cirrhosis Yes 10 (0.09%) 5 (0.16%) 5 (0.06%) \(0.248\)
Urinary Incontinence (n = 11,199) No 10800 (96.44%) 2978 (93.27%) 7822 (97.7%)
Urinary Incontinence Yes 399 (3.56%) 215 (6.73%) 184 (2.3%) \(< 10^{-3}\)
MHI-5 Score (n = 11,199) 70.66 (+/-17.43) 48.28 (+/-11.62) 79.59 (+/-9.56) \(< 10^{-3}\)
Self-Assessed Health Condition (n = 11,199) Not reported 59 (0.53%) 24 (0.75%) 35 (0.44%)
Self-Assessed Health Condition Very Bad or Bad 630 (5.63%) 430 (13.47%) 200 (2.5%)
Self-Assessed Health Condition Very Good, Good or Fairly Good 10510 (93.85%) 2739 (85.78%) 7771 (97.06%) \(< 10^{-3}\)
Age (n = 11,199) 46.65 (+/-19.01) 48.71 (+/-18.56) 45.83 (+/-19.13) \(< 10^{-3}\)
Gender (n = 11,199) Female 5736 (51.22%) 1892 (59.25%) 3844 (48.01%)
Gender Male 5463 (48.78%) 1301 (40.75%) 4162 (51.99%) \(< 10^{-3}\)
Couple (n = 11,199) No 3580 (31.97%) 1083 (33.92%) 2497 (31.19%)
Couple Not reported 38 (0.34%) 6 (0.19%) 32 (0.4%)
Couple Yes 7581 (67.69%) 2104 (65.89%) 5477 (68.41%) \(0.005\)
Marital Status (n = 11,016) Married, Civil Union 6287 (57.07%) 1734 (54.73%) 4553 (58.01%)
Marital Status Divorced, separated 531 (4.82%) 234 (7.39%) 297 (3.78%)
Marital Status Widowed 484 (4.39%) 192 (6.06%) 292 (3.72%)
Marital Status Lives in a marriage or concubinage 1287 (11.68%) 369 (11.65%) 918 (11.7%)
Marital Status Single 2415 (21.92%) 638 (20.14%) 1777 (22.64%)
Marital Status Does not know 4 (0.04%) 0 (0.00%) 4 (0.05%)
Marital Status Refuses to answer 8 (0.07%) 1 (0.03%) 7 (0.09%) \(< 10^{-3}\)
Professional Status (n = 11,199) Public employee 1922 (17.16%) 582 (18.23%) 1340 (16.74%)
Professional Status Private employee 6166 (55.06%) 1840 (57.63%) 4326 (54.03%)
Professional Status Other 1534 (13.7%) 408 (12.78%) 1126 (14.06%)
Professional Status No answer 1577 (14.08%) 363 (11.37%) 1214 (15.16%) \(< 10^{-3}\)
Social Security (n = 11,151) Yes (own) 9721 (87.18%) 2819 (88.79%) 6902 (86.53%)
Social Security Yes (third party) 1430 (12.82%) 356 (11.21%) 1074 (13.47%) \(0.001\)
Social Security System (n = 11,177) The general scheme (Cnamts) 7858 (70.31%) 2284 (71.6%) 5574 (69.79%)
Social Security System Public service 925 (8.28%) 245 (7.68%) 680 (8.51%)
Social Security System The local Alsace-Moselle scheme 386 (3.45%) 138 (4.33%) 248 (3.11%)
Social Security System The basic Universal Health Coverage 237 (2.12%) 116 (3.64%) 121 (1.51%)
Social Security System The agricultural scheme 741 (6.63%) 188 (5.89%) 553 (6.92%)
Social Security System The self-employed scheme 673 (6.02%) 144 (4.51%) 529 (6.62%)
Social Security System Other (Student, abroad, other) 337 (3.02%) 65 (2.04%) 272 (3.41%)
Social Security System Does not know 20 (0.18%) 10 (0.31%) 10 (0.13%) \(< 10^{-3}\)
Occupation (n = 11,189) Farmer 383 (3.42%) 97 (3.04%) 286 (3.58%)
Occupation Craftsman, trader 567 (5.07%) 141 (4.42%) 426 (5.33%)
Occupation Executive and intellectual profession 1443 (12.9%) 329 (10.31%) 1114 (13.93%)
Occupation Intermediate occupation 1875 (16.76%) 505 (15.83%) 1370 (17.13%)
Occupation Administrative employee 1498 (13.39%) 513 (16.08%) 985 (12.31%)
Occupation Commercial employee 1315 (11.75%) 475 (14.89%) 840 (10.5%)
Occupation Skilled worker 1621 (14.49%) 466 (14.61%) 1155 (14.44%)
Occupation Unskilled worker 892 (7.97%) 285 (8.93%) 607 (7.59%)
Occupation Inactive having never worked 1595 (14.26%) 379 (11.88%) 1216 (15.2%) \(< 10^{-3}\)
Long-term condition (Self-declared) (n = 11,199) Yes 1897 (16.94%) 753 (23.58%) 1144 (14.29%)
Long-term condition (Self-declared) No 9267 (82.75%) 2430 (76.1%) 6837 (85.4%)
Long-term condition (Self-declared) Does not know 35 (0.31%) 10 (0.31%) 25 (0.31%) \(< 10^{-3}\)
Table 4.2: Personnal characteristics
ind_personnes <- which(str_detect(variable_names$variable, "^PERSONNE_"))
# variable_names |> slice(ind_personnes)
print_tableau(ind = ind_personnes[-1], df = df |> filter(in_sample)) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Asthma (n = 5,293) No 4934 (93.22%) 1432 (89.67%) 3502 (94.75%)
Asthma Yes 359 (6.78%) 165 (10.33%) 194 (5.25%) \(< 10^{-3}\)
Bronchitis (n = 5,293) No 4987 (94.22%) 1438 (90.04%) 3549 (96.02%)
Bronchitis Yes 306 (5.78%) 159 (9.96%) 147 (3.98%) \(< 10^{-3}\)
Heart Attack (n = 5,293) No 5259 (99.36%) 1578 (98.81%) 3681 (99.59%)
Heart Attack Yes 34 (0.64%) 19 (1.19%) 15 (0.41%) \(0.002\)
Artery Disease (n = 5,293) No 5190 (98.05%) 1548 (96.93%) 3642 (98.54%)
Artery Disease Yes 103 (1.95%) 49 (3.07%) 54 (1.46%) \(< 10^{-3}\)
Hypertension (n = 5,293) No 4662 (88.08%) 1343 (84.1%) 3319 (89.8%)
Hypertension Yes 631 (11.92%) 254 (15.9%) 377 (10.2%) \(< 10^{-3}\)
Stroke (n = 5,293) No 5265 (99.47%) 1583 (99.12%) 3682 (99.62%)
Stroke Yes 28 (0.53%) 14 (0.88%) 14 (0.38%) \(0.037\)
Osteoarthritis (n = 5,293) No 4586 (86.64%) 1299 (81.34%) 3287 (88.93%)
Osteoarthritis Yes 707 (13.36%) 298 (18.66%) 409 (11.07%) \(< 10^{-3}\)
Low Back Pain (n = 5,293) No 4215 (79.63%) 1139 (71.32%) 3076 (83.23%)
Low Back Pain Yes 1078 (20.37%) 458 (28.68%) 620 (16.77%) \(< 10^{-3}\)
Neck Pain (n = 5,293) No 4519 (85.38%) 1244 (77.9%) 3275 (88.61%)
Neck Pain Yes 774 (14.62%) 353 (22.1%) 421 (11.39%) \(< 10^{-3}\)
Diabetes (n = 5,293) No 4848 (91.59%) 1374 (86.04%) 3474 (93.99%)
Diabetes Yes 445 (8.41%) 223 (13.96%) 222 (6.01%) \(< 10^{-3}\)
Allergy (n = 5,293) No 4520 (85.4%) 1284 (80.4%) 3236 (87.55%)
Allergy Yes 773 (14.6%) 313 (19.6%) 460 (12.45%) \(< 10^{-3}\)
Cirrhosis (n = 5,293) No 5286 (99.87%) 1593 (99.75%) 3693 (99.92%)
Cirrhosis Yes 7 (0.13%) 4 (0.25%) 3 (0.08%) \(0.253\)
Urinary Incontinence (n = 5,293) No 5071 (95.81%) 1480 (92.67%) 3591 (97.16%)
Urinary Incontinence Yes 222 (4.19%) 117 (7.33%) 105 (2.84%) \(< 10^{-3}\)
MHI-5 Score (n = 5,293) 69.97 (+/-17.93) 47.7 (+/-11.96) 79.59 (+/-9.58) \(< 10^{-3}\)
Self-Assessed Health Condition (n = 5,293) Not reported 22 (0.42%) 5 (0.31%) 17 (0.46%)
Self-Assessed Health Condition Very Bad or Bad 344 (6.5%) 256 (16.03%) 88 (2.38%)
Self-Assessed Health Condition Very Good, Good or Fairly Good 4927 (93.09%) 1336 (83.66%) 3591 (97.16%) \(< 10^{-3}\)
Age (n = 5,293) 48.7 (+/-18.58) 50.04 (+/-18.28) 48.11 (+/-18.67) \(< 10^{-3}\)
Gender (n = 5,293) Female 2765 (52.24%) 950 (59.49%) 1815 (49.11%)
Gender Male 2528 (47.76%) 647 (40.51%) 1881 (50.89%) \(< 10^{-3}\)
Couple (n = 5,293) No 1830 (34.57%) 636 (39.82%) 1194 (32.31%)
Couple Yes 3463 (65.43%) 961 (60.18%) 2502 (67.69%) \(< 10^{-3}\)
Marital Status (n = 5,235) Married, Civil Union 2861 (54.65%) 780 (48.96%) 2081 (57.14%)
Marital Status Divorced, separated 437 (8.35%) 197 (12.37%) 240 (6.59%)
Marital Status Widowed 336 (6.42%) 129 (8.1%) 207 (5.68%)
Marital Status Lives in a marriage or concubinage 600 (11.46%) 181 (11.36%) 419 (11.5%)
Marital Status Single 996 (19.03%) 306 (19.21%) 690 (18.95%)
Marital Status Does not know 1 (0.02%) 0 (0.00%) 1 (0.03%)
Marital Status Refuses to answer 4 (0.08%) 0 (0.00%) 4 (0.11%) \(< 10^{-3}\)
Professional Status (n = 5,293) Public employee 854 (16.13%) 280 (17.53%) 574 (15.53%)
Professional Status Private employee 3153 (59.57%) 974 (60.99%) 2179 (58.96%)
Professional Status Other 737 (13.92%) 207 (12.96%) 530 (14.34%)
Professional Status No answer 549 (10.37%) 136 (8.52%) 413 (11.17%) \(0.005\)
Social Security (n = 5,293) Yes (own) 4554 (86.04%) 1402 (87.79%) 3152 (85.28%)
Social Security Yes (third party) 739 (13.96%) 195 (12.21%) 544 (14.72%) \(0.018\)
Social Security System (n = 5,293) The general scheme (Cnamts) 3959 (74.8%) 1211 (75.83%) 2748 (74.35%)
Social Security System Public service 294 (5.55%) 80 (5.01%) 214 (5.79%)
Social Security System The local Alsace-Moselle scheme 187 (3.53%) 67 (4.2%) 120 (3.25%)
Social Security System The basic Universal Health Coverage 151 (2.85%) 76 (4.76%) 75 (2.03%)
Social Security System The agricultural scheme 340 (6.42%) 83 (5.2%) 257 (6.95%)
Social Security System The self-employed scheme 338 (6.39%) 76 (4.76%) 262 (7.09%)
Social Security System Other (Student, abroad, other) 19 (0.36%) 2 (0.13%) 17 (0.46%)
Social Security System Does not know 5 (0.09%) 2 (0.13%) 3 (0.08%) \(< 10^{-3}\)
Occupation (n = 5,293) Farmer 160 (3.02%) 38 (2.38%) 122 (3.3%)
Occupation Craftsman, trader 292 (5.52%) 80 (5.01%) 212 (5.74%)
Occupation Executive and intellectual profession 745 (14.08%) 184 (11.52%) 561 (15.18%)
Occupation Intermediate occupation 931 (17.59%) 255 (15.97%) 676 (18.29%)
Occupation Administrative employee 713 (13.47%) 265 (16.59%) 448 (12.12%)
Occupation Commercial employee 650 (12.28%) 236 (14.78%) 414 (11.2%)
Occupation Skilled worker 824 (15.57%) 248 (15.53%) 576 (15.58%)
Occupation Unskilled worker 418 (7.9%) 149 (9.33%) 269 (7.28%)
Occupation Inactive having never worked 560 (10.58%) 142 (8.89%) 418 (11.31%) \(< 10^{-3}\)
Long-term condition (Self-declared) (n = 5,293) Yes 1018 (19.23%) 430 (26.93%) 588 (15.91%)
Long-term condition (Self-declared) No 4262 (80.52%) 1161 (72.7%) 3101 (83.9%)
Long-term condition (Self-declared) Does not know 13 (0.25%) 6 (0.38%) 7 (0.19%) \(< 10^{-3}\)
Table 4.3: Household characteristics
ind_menages <- which(str_detect(variable_names$variable, "^MENAGE_"))
ind_menages <- c(ind_menages, which(variable_names$variable == "ensol_2011"))
print_tableau(ind = ind_menages, df = df) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Zoning in Urban Areas (n = 11,199) Major urban cluster (and its crown) 7941 (70.91%) 2169 (67.93%) 5772 (72.1%)
Zoning in Urban Areas Medium/small urban cluster (and its crown) 1491 (13.31%) 393 (12.31%) 1098 (13.71%)
Zoning in Urban Areas Spaces outside the area of influence of cities 522 (4.66%) 144 (4.51%) 378 (4.72%)
Zoning in Urban Areas No answer 1245 (11.12%) 487 (15.25%) 758 (9.47%) \(< 10^{-3}\)
Region (n = 11,199) Région parisienne 1691 (15.1%) 488 (15.28%) 1203 (15.03%)
Region Champagne-Ardenne 297 (2.65%) 91 (2.85%) 206 (2.57%)
Region Picardie 428 (3.82%) 118 (3.7%) 310 (3.87%)
Region Haute-Normandie 300 (2.68%) 67 (2.1%) 233 (2.91%)
Region Centre 465 (4.15%) 146 (4.57%) 319 (3.98%)
Region Basse-Normandie 283 (2.53%) 78 (2.44%) 205 (2.56%)
Region Bourgogne 329 (2.94%) 95 (2.98%) 234 (2.92%)
Region Nord-Pas-de-Calais 740 (6.61%) 240 (7.52%) 500 (6.25%)
Region Lorraine 522 (4.66%) 163 (5.1%) 359 (4.48%)
Region Alsace 347 (3.1%) 117 (3.66%) 230 (2.87%)
Region Franche-Comté 250 (2.23%) 58 (1.82%) 192 (2.4%)
Region Pays de la Loire 700 (6.25%) 193 (6.04%) 507 (6.33%)
Region Bretagne 606 (5.41%) 150 (4.7%) 456 (5.7%)
Region Poitou-Charentes 363 (3.24%) 93 (2.91%) 270 (3.37%)
Region Aquitaine 563 (5.03%) 159 (4.98%) 404 (5.05%)
Region Midi-Pyrénées 573 (5.12%) 152 (4.76%) 421 (5.26%)
Region Limousin 103 (0.92%) 27 (0.85%) 76 (0.95%)
Region Rhône-Alpes 1217 (10.87%) 342 (10.71%) 875 (10.93%)
Region Auvergne 272 (2.43%) 85 (2.66%) 187 (2.34%)
Region Languedoc-Roussillon 433 (3.87%) 121 (3.79%) 312 (3.9%)
Region Provence-Alpes-Côte d’Azur 706 (6.3%) 207 (6.48%) 499 (6.23%)
Region Corse 11 (0.1%) 3 (0.09%) 8 (0.1%) \(0.047\)
Income (n = 8,502) 3109.47 (+/-1986.67) 2728.35 (+/-1697.96) 3263.4 (+/-2072.36) \(< 10^{-3}\)
Net Income per Cons. Unit (n = 9,626) 1635.73 (+/-972.8) 1475.67 (+/-823.64) 1699.74 (+/-1019.45) \(< 10^{-3}\)
Size Urban Area (n = 11,199) Small Municipality 4319 (38.57%) 1142 (35.77%) 3177 (39.68%)
Size Urban Area Medium Municipality 1220 (10.89%) 316 (9.9%) 904 (11.29%)
Size Urban Area Large Municipality 3243 (28.96%) 931 (29.16%) 2312 (28.88%)
Size Urban Area Paris metropolitan area 1172 (10.47%) 317 (9.93%) 855 (10.68%)
Size Urban Area No answer 1245 (11.12%) 487 (15.25%) 758 (9.47%) \(< 10^{-3}\)
Household size (n = 11,199) 3.12 (+/-1.41) 3.03 (+/-1.45) 3.15 (+/-1.4) \(< 10^{-3}\)
Sunlight (n = 11,199) 2083.94 (+/-306.62) 2082.07 (+/-308.32) 2084.68 (+/-305.96) \(0.685\)
Table 4.4: Household characteristics
ind_menages <- which(str_detect(variable_names$variable, "^MENAGE_"))
ind_menages <- c(ind_menages, which(variable_names$variable == "ensol_2011"))
print_tableau(ind = ind_menages, df = df |> filter(in_sample)) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
    ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Zoning in Urban Areas (n = 5,293) Major urban cluster (and its crown) 3680 (69.53%) 1046 (65.5%) 2634 (71.27%)
Zoning in Urban Areas Medium/small urban cluster (and its crown) 697 (13.17%) 205 (12.84%) 492 (13.31%)
Zoning in Urban Areas Spaces outside the area of influence of cities 238 (4.5%) 61 (3.82%) 177 (4.79%)
Zoning in Urban Areas No answer 678 (12.81%) 285 (17.85%) 393 (10.63%) \(< 10^{-3}\)
Region (n = 5,293) Région parisienne 739 (13.96%) 221 (13.84%) 518 (14.02%)
Region Champagne-Ardenne 148 (2.8%) 49 (3.07%) 99 (2.68%)
Region Picardie 200 (3.78%) 64 (4.01%) 136 (3.68%)
Region Haute-Normandie 145 (2.74%) 30 (1.88%) 115 (3.11%)
Region Centre 194 (3.67%) 61 (3.82%) 133 (3.6%)
Region Basse-Normandie 141 (2.66%) 45 (2.82%) 96 (2.6%)
Region Bourgogne 148 (2.8%) 46 (2.88%) 102 (2.76%)
Region Nord-Pas-de-Calais 376 (7.1%) 134 (8.39%) 242 (6.55%)
Region Lorraine 245 (4.63%) 82 (5.13%) 163 (4.41%)
Region Alsace 154 (2.91%) 52 (3.26%) 102 (2.76%)
Region Franche-Comté 115 (2.17%) 28 (1.75%) 87 (2.35%)
Region Pays de la Loire 344 (6.5%) 98 (6.14%) 246 (6.66%)
Region Bretagne 281 (5.31%) 66 (4.13%) 215 (5.82%)
Region Poitou-Charentes 178 (3.36%) 44 (2.76%) 134 (3.63%)
Region Aquitaine 278 (5.25%) 79 (4.95%) 199 (5.38%)
Region Midi-Pyrénées 260 (4.91%) 80 (5.01%) 180 (4.87%)
Region Limousin 52 (0.98%) 19 (1.19%) 33 (0.89%)
Region Rhône-Alpes 596 (11.26%) 171 (10.71%) 425 (11.5%)
Region Auvergne 122 (2.3%) 44 (2.76%) 78 (2.11%)
Region Languedoc-Roussillon 220 (4.16%) 70 (4.38%) 150 (4.06%)
Region Provence-Alpes-Côte d’Azur 350 (6.61%) 112 (7.01%) 238 (6.44%)
Region Corse 7 (0.13%) 2 (0.13%) 5 (0.14%) \(0.077\)
Income (n = 4,698) 2855.27 (+/-1893.64) 2432.83 (+/-1495.36) 3039.56 (+/-2015.88) \(< 10^{-3}\)
Net Income per Cons. Unit (n = 5,293) 1609.51 (+/-1008.13) 1424.22 (+/-805.62) 1689.57 (+/-1074.24) \(< 10^{-3}\)
Size Urban Area (n = 5,293) Small Municipality 1954 (36.92%) 548 (34.31%) 1406 (38.04%)
Size Urban Area Medium Municipality 554 (10.47%) 147 (9.2%) 407 (11.01%)
Size Urban Area Large Municipality 1587 (29.98%) 474 (29.68%) 1113 (30.11%)
Size Urban Area Paris metropolitan area 520 (9.82%) 143 (8.95%) 377 (10.2%)
Size Urban Area No answer 678 (12.81%) 285 (17.85%) 393 (10.63%) \(< 10^{-3}\)
Household size (n = 5,293) 2.84 (+/-1.44) 2.73 (+/-1.45) 2.89 (+/-1.43) \(< 10^{-3}\)
Sunlight (n = 5,293) 2088.7 (+/-311.91) 2089.46 (+/-316.43) 2088.37 (+/-309.98) \(0.907\)
Table 4.5: Healthcare expenditures
ind_soins <- which(str_detect(variable_names$variable, "^SOINS_"))
print_tableau(ind = ind_soins, df = df) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Long-term condition (SNIIRAM) (n = 11,199) Yes 1195 (10.67%) 469 (14.69%) 726 (9.07%)
Long-term condition (SNIIRAM) No 4916 (43.9%) 1365 (42.75%) 3551 (44.35%)
Long-term condition (SNIIRAM) No answer 5088 (45.43%) 1359 (42.56%) 3729 (46.58%) \(< 10^{-3}\)
Exp. Outpatient (n = 6,111) 1480.89 (+/-2502.01) 2019.63 (+/-3262.07) 1249.88 (+/-2050.77) \(< 10^{-3}\)
Exp. General Practitioner (n = 6,111) 125.37 (+/-142.52) 162.06 (+/-170.27) 109.64 (+/-125.58) \(< 10^{-3}\)
Exp. Specialist (n = 6,111) 194.57 (+/-370.54) 233.01 (+/-396.66) 178.09 (+/-357.55) \(< 10^{-3}\)
Exp. Pharmacy (n = 6,111) 468.27 (+/-1417.02) 674.98 (+/-1687.4) 379.63 (+/-1273.75) \(< 10^{-3}\)
Exp. Physiotherapist (n = 6,111) 62.74 (+/-246.97) 96.36 (+/-341.94) 48.32 (+/-190.63) \(< 10^{-3}\)
Exp. Nurse (n = 6,111) 76 (+/-661.9) 135.12 (+/-927.83) 50.65 (+/-504.83) \(< 10^{-3}\)
Exp. Dentist (n = 6,111) 164.91 (+/-506.53) 176.95 (+/-554.11) 159.74 (+/-484.68) \(0.223\)
Exp. Equipment (n = 6,111) 82.61 (+/-507.59) 137.13 (+/-674.61) 59.23 (+/-413.81) \(< 10^{-3}\)
Exp. Transport (n = 6,111) 55.43 (+/-580.77) 113.85 (+/-942.71) 30.38 (+/-314.5) \(< 10^{-3}\)
Exp. Optical (n = 6,111) 105.25 (+/-224.96) 107.92 (+/-222.32) 104.11 (+/-226.1) \(0.544\)
Exp. Prostheses (n = 6,111) 40.49 (+/-256.45) 52.21 (+/-291.97) 35.46 (+/-239.47) \(0.019\)
Exp. Emergency w/o hospitalization (n = 6,111) 14.93 (+/-51.42) 17.9 (+/-56.84) 13.65 (+/-48.86) \(0.003\)
Reimbursement Outpatient (n = 6,111) 974.4 (+/-2292.02) 1441.93 (+/-3051.29) 773.92 (+/-1838.89) \(< 10^{-3}\)
Reimbursement General Practitioner (n = 6,111) 89.16 (+/-111.97) 119.89 (+/-140.56) 75.98 (+/-94.16) \(< 10^{-3}\)
Reimbursement Specialist (n = 6,111) 133.46 (+/-295.08) 166.43 (+/-340.58) 119.33 (+/-272.07) \(< 10^{-3}\)
Reimbursement Pharmacy (n = 6,111) 360.83 (+/-1375.28) 538.28 (+/-1627.28) 284.74 (+/-1244.27) \(< 10^{-3}\)
Reimbursement Physiotherapist (n = 6,111) 45.9 (+/-219.61) 74.89 (+/-317.64) 33.47 (+/-158.59) \(< 10^{-3}\)
Reimbursement Nurse (n = 6,111) 69.62 (+/-640.78) 128.51 (+/-922.79) 44.37 (+/-468.56) \(< 10^{-3}\)
Reimbursement Dentist (n = 6,111) 58.31 (+/-134.96) 62.09 (+/-152.9) 56.68 (+/-126.48) \(0.151\)
Reimbursement Equipment (n = 6,111) 70.7 (+/-483.74) 121.56 (+/-645.78) 48.88 (+/-392.44) \(< 10^{-3}\)
Reimbursement Transport (n = 6,111) 52.61 (+/-576.69) 109.43 (+/-937.79) 28.25 (+/-310.22) \(< 10^{-3}\)
Reimbursement Optical (n = 6,111) 2.67 (+/-6.18) 2.92 (+/-6.44) 2.57 (+/-6.06) \(0.042\)
Reimbursement Prostheses (n = 6,111) 13.98 (+/-107.8) 19.51 (+/-138.71) 11.61 (+/-91.32) \(0.009\)
Reimbursement Emergency w/o hospitalization (n = 6,111) 11.96 (+/-40.84) 14.45 (+/-45.37) 10.88 (+/-38.7) \(0.002\)
Co-payment Outpatient (n = 6,111) 236.12 (+/-271.94) 283 (+/-311.62) 216.01 (+/-250.38) \(< 10^{-3}\)
Co-payment General Practitioner (n = 6,111) 26.99 (+/-34.93) 31.26 (+/-39.5) 25.17 (+/-32.61) \(< 10^{-3}\)
Co-payment Specialist (n = 6,111) 32.65 (+/-46.64) 36.93 (+/-52.19) 30.82 (+/-43.93) \(< 10^{-3}\)
Co-payment Pharmacy (n = 6,111) 93.68 (+/-141.18) 119.67 (+/-175.39) 82.54 (+/-121.99) \(< 10^{-3}\)
Co-payment Physiotherapist (n = 6,111) 14.83 (+/-52) 18.57 (+/-57.64) 13.22 (+/-49.3) \(< 10^{-3}\)
Co-payment Nurse (n = 6,111) 5.38 (+/-74.11) 5.17 (+/-22.78) 5.47 (+/-87.33) \(0.884\)
Co-payment Dentist (n = 6,111) 21.34 (+/-52.35) 22.7 (+/-57.98) 20.75 (+/-49.74) \(0.183\)
Co-payment Equipment (n = 6,111) 10.04 (+/-64.15) 12.58 (+/-77.58) 8.95 (+/-57.41) \(0.042\)
Co-payment Transport (n = 6,111) 2.07 (+/-21.42) 3.6 (+/-32.1) 1.42 (+/-14.57) \(< 10^{-3}\)
Co-payment Optical (n = 6,111) 1.59 (+/-3.83) 1.65 (+/-3.95) 1.56 (+/-3.78) \(0.43\)
Co-payment Prostheses (n = 6,111) 4.69 (+/-18.03) 5.16 (+/-19.07) 4.49 (+/-17.57) \(0.189\)
Co-payment Emergency w/o hospitalization (n = 6,111) 2.71 (+/-11.42) 3.15 (+/-12.73) 2.52 (+/-10.81) \(0.048\)
Extra-fees Outpatient (n = 6,111) 242.04 (+/-504.03) 259.62 (+/-536.62) 234.51 (+/-489.26) \(0.074\)
Extra-fees General Practitioner (n = 6,111) 5.28 (+/-29.19) 6.02 (+/-30.59) 4.96 (+/-28.56) \(0.192\)
Extra-fees Specialist (n = 6,111) 24.63 (+/-104.4) 25.18 (+/-84.71) 24.39 (+/-111.8) \(0.786\)
Extra-fees Pharmacy (n = 6,111) 0.2 (+/-7.27) 0.25 (+/-7.22) 0.18 (+/-7.29) \(0.733\)
Extra-fees Physiotherapist (n = 6,111) 0.9 (+/-14.59) 1.51 (+/-21.77) 0.63 (+/-10.04) \(0.032\)
Extra-fees Nurse (n = 6,111) 0.02 (+/-0.53) 0.02 (+/-0.4) 0.02 (+/-0.58) \(0.821\)
Extra-fees Dentist (n = 6,111) 85.26 (+/-348.16) 92.15 (+/-372.97) 82.3 (+/-336.96) \(0.311\)
Extra-fees Equipment (n = 6,111) 1.87 (+/-30.96) 2.99 (+/-51.41) 1.4 (+/-15.36) \(0.066\)
Extra-fees Transport (n = 6,111) 0.43 (+/-16.78) 0.24 (+/-8.15) 0.52 (+/-19.33) \(0.55\)
Extra-fees Optical (n = 6,111) 100.99 (+/-217.77) 103.35 (+/-215.04) 99.98 (+/-218.95) \(0.579\)
Extra-fees Prostheses (n = 6,111) 21.82 (+/-198.24) 27.54 (+/-216.94) 19.36 (+/-189.64) \(0.139\)
Extra-fees Emergency w/o hospitalization (n = 6,111) 0.02 (+/-0.5) 0.02 (+/-0.57) 0.02 (+/-0.46) \(0.878\)
Deduct. Outpatient (n = 6,111) 28.1 (+/-28.82) 34.86 (+/-32.77) 25.2 (+/-26.42) \(< 10^{-3}\)
Deduct. General Practitioner (n = 6,111) 3.94 (+/-4.36) 4.89 (+/-5.19) 3.53 (+/-3.89) \(< 10^{-3}\)
Deduct. Specialist (n = 6,111) 3.61 (+/-4.9) 4.26 (+/-5.49) 3.33 (+/-4.6) \(< 10^{-3}\)
Deduct. Pharmacy (n = 6,111) 13.55 (+/-15.46) 16.78 (+/-17.07) 12.17 (+/-14.5) \(< 10^{-3}\)
Deduct. Physiotherapist (n = 6,111) 1.12 (+/-3.61) 1.39 (+/-4.02) 1 (+/-3.41) \(< 10^{-3}\)
Deduct. Nurse (n = 6,111) 0.98 (+/-4.35) 1.42 (+/-5.61) 0.79 (+/-3.66) \(< 10^{-3}\)
Deduct. Dentist (n = 6,111) 0.01 (+/-0.12) 0.01 (+/-0.16) 0 (+/-0.09) \(0.06\)
Deduct. Transport (n = 6,111) 0.31 (+/-1.99) 0.58 (+/-3.01) 0.19 (+/-1.32) \(< 10^{-3}\)
Deduct. Emergency w/o hospitalization (n = 6,111) 0.24 (+/-0.96) 0.27 (+/-1) 0.23 (+/-0.94) \(0.1\)
No. Medical Sessions General Pract. (n = 6,111) 4.71 (+/-4.96) 6.06 (+/-6.12) 4.13 (+/-4.25) \(< 10^{-3}\)
No. Medical Sessions Specialist (n = 6,111) 3.45 (+/-4.43) 4.13 (+/-4.98) 3.15 (+/-4.14) \(< 10^{-3}\)
Table 4.6: Healthcare expenditures
ind_soins <- which(str_detect(variable_names$variable, "^SOINS_"))
print_tableau(ind = ind_soins, df = df |> filter(in_sample)) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Long-term condition (SNIIRAM) (n = 5,293) Yes 1019 (19.25%) 408 (25.55%) 611 (16.53%)
Long-term condition (SNIIRAM) No 4274 (80.75%) 1189 (74.45%) 3085 (83.47%) \(< 10^{-3}\)
Exp. Outpatient (n = 5,293) 1469.8 (+/-2528.39) 2024.47 (+/-3305.82) 1230.14 (+/-2060.32) \(< 10^{-3}\)
Exp. General Practitioner (n = 5,293) 125.64 (+/-143.02) 162.99 (+/-171.99) 109.5 (+/-125.12) \(< 10^{-3}\)
Exp. Specialist (n = 5,293) 193.62 (+/-376.86) 229.62 (+/-389.06) 178.07 (+/-370.44) \(< 10^{-3}\)
Exp. Pharmacy (n = 5,293) 468.79 (+/-1473.3) 684.48 (+/-1748.96) 375.6 (+/-1326.17) \(< 10^{-3}\)
Exp. Physiotherapist (n = 5,293) 59.12 (+/-221.51) 90.57 (+/-301.99) 45.53 (+/-173.97) \(< 10^{-3}\)
Exp. Nurse (n = 5,293) 70.77 (+/-620.48) 130.68 (+/-875.91) 44.89 (+/-466.68) \(< 10^{-3}\)
Exp. Dentist (n = 5,293) 164.77 (+/-503.46) 176.6 (+/-553.59) 159.66 (+/-480.18) \(0.261\)
Exp. Equipment (n = 5,293) 80.91 (+/-499.86) 136.98 (+/-665.04) 56.68 (+/-406.04) \(< 10^{-3}\)
Exp. Transport (n = 5,293) 57.56 (+/-610.5) 121.82 (+/-1005.28) 29.8 (+/-307.78) \(< 10^{-3}\)
Exp. Optical (n = 5,293) 104.41 (+/-224.41) 107.36 (+/-222.11) 103.14 (+/-225.42) \(0.53\)
Exp. Prostheses (n = 5,293) 39.27 (+/-248.88) 52.26 (+/-296.01) 33.66 (+/-225.3) \(0.013\)
Exp. Emergency w/o hospitalization (n = 5,293) 14.96 (+/-51.1) 18.65 (+/-58.7) 13.36 (+/-47.36) \(< 10^{-3}\)
Reimbursement Outpatient (n = 5,293) 966.66 (+/-2322.13) 1445.77 (+/-3106.26) 759.64 (+/-1847.45) \(< 10^{-3}\)
Reimbursement General Practitioner (n = 5,293) 89.44 (+/-112.53) 120.49 (+/-141.45) 76.03 (+/-94.32) \(< 10^{-3}\)
Reimbursement Specialist (n = 5,293) 133.15 (+/-301.12) 163.41 (+/-333.25) 120.07 (+/-285.18) \(< 10^{-3}\)
Reimbursement Pharmacy (n = 5,293) 361.5 (+/-1431.61) 547.1 (+/-1688.87) 281.31 (+/-1296.91) \(< 10^{-3}\)
Reimbursement Physiotherapist (n = 5,293) 42.49 (+/-191.39) 68.65 (+/-273.58) 31.19 (+/-140.39) \(< 10^{-3}\)
Reimbursement Nurse (n = 5,293) 64.22 (+/-595.92) 123.79 (+/-870.91) 38.48 (+/-422.84) \(< 10^{-3}\)
Reimbursement Dentist (n = 5,293) 58.64 (+/-135.48) 63.06 (+/-156.12) 56.73 (+/-125.49) \(0.119\)
Reimbursement Equipment (n = 5,293) 69.36 (+/-478.52) 121.45 (+/-640.45) 46.85 (+/-386.14) \(< 10^{-3}\)
Reimbursement Transport (n = 5,293) 54.8 (+/-606.35) 117.36 (+/-1000.33) 27.77 (+/-303.2) \(< 10^{-3}\)
Reimbursement Optical (n = 5,293) 2.63 (+/-6.17) 2.89 (+/-6.43) 2.52 (+/-6.05) \(0.046\)
Reimbursement Prostheses (n = 5,293) 13.65 (+/-109.58) 18.65 (+/-136.82) 11.49 (+/-95.38) \(0.029\)
Reimbursement Emergency w/o hospitalization (n = 5,293) 11.97 (+/-40.47) 15.03 (+/-46.65) 10.65 (+/-37.42) \(< 10^{-3}\)
Co-payment Outpatient (n = 5,293) 236.32 (+/-273.57) 286.12 (+/-312.7) 214.8 (+/-251.82) \(< 10^{-3}\)
Co-payment General Practitioner (n = 5,293) 27.22 (+/-35.42) 31.73 (+/-40.59) 25.27 (+/-32.75) \(< 10^{-3}\)
Co-payment Specialist (n = 5,293) 32.75 (+/-46.61) 37.31 (+/-52.35) 30.78 (+/-43.75) \(< 10^{-3}\)
Co-payment Pharmacy (n = 5,293) 93.7 (+/-142.51) 120.43 (+/-176.69) 82.16 (+/-123.13) \(< 10^{-3}\)
Co-payment Physiotherapist (n = 5,293) 14.73 (+/-52.04) 19.08 (+/-59.14) 12.85 (+/-48.54) \(< 10^{-3}\)
Co-payment Nurse (n = 5,293) 5.59 (+/-79.13) 5.46 (+/-23.94) 5.65 (+/-93.39) \(0.937\)
Co-payment Dentist (n = 5,293) 21.56 (+/-52.58) 23.06 (+/-58.81) 20.91 (+/-49.64) \(0.172\)
Co-payment Equipment (n = 5,293) 9.56 (+/-58.31) 12.24 (+/-65.53) 8.4 (+/-54.87) \(0.028\)
Co-payment Transport (n = 5,293) 2.05 (+/-22.25) 3.8 (+/-34.09) 1.29 (+/-14.31) \(< 10^{-3}\)
Co-payment Optical (n = 5,293) 1.57 (+/-3.81) 1.65 (+/-3.96) 1.53 (+/-3.75) \(0.304\)
Co-payment Prostheses (n = 5,293) 4.67 (+/-17.96) 5.16 (+/-18.63) 4.45 (+/-17.66) \(0.192\)
Co-payment Emergency w/o hospitalization (n = 5,293) 2.73 (+/-11.51) 3.31 (+/-13.25) 2.47 (+/-10.66) \(0.015\)
Extra-fees Outpatient (n = 5,293) 238.86 (+/-500.81) 257.66 (+/-540.78) 230.73 (+/-482.36) \(0.073\)
Extra-fees General Practitioner (n = 5,293) 5.04 (+/-28.26) 5.89 (+/-31.36) 4.68 (+/-26.81) \(0.151\)
Extra-fees Specialist (n = 5,293) 23.94 (+/-106.01) 24.48 (+/-86.38) 23.71 (+/-113.46) \(0.808\)
Extra-fees Pharmacy (n = 5,293) 0.23 (+/-7.81) 0.28 (+/-7.74) 0.2 (+/-7.84) \(0.72\)
Extra-fees Physiotherapist (n = 5,293) 0.81 (+/-13.9) 1.48 (+/-21.1) 0.52 (+/-9.18) \(0.02\)
Extra-fees Nurse (n = 5,293) 0.02 (+/-0.44) 0.02 (+/-0.42) 0.02 (+/-0.45) \(0.783\)
Extra-fees Dentist (n = 5,293) 84.57 (+/-344.5) 90.46 (+/-368.33) 82.02 (+/-333.7) \(0.413\)
Extra-fees Equipment (n = 5,293) 1.99 (+/-33.16) 3.28 (+/-55.06) 1.43 (+/-16.25) \(0.063\)
Extra-fees Transport (n = 5,293) 0.41 (+/-17.34) 0.06 (+/-2.04) 0.56 (+/-20.7) \(0.328\)
Extra-fees Optical (n = 5,293) 100.21 (+/-217.26) 102.82 (+/-214.95) 99.09 (+/-218.27) \(0.566\)
Extra-fees Prostheses (n = 5,293) 20.96 (+/-189.11) 28.46 (+/-222.58) 17.72 (+/-172.59) \(0.058\)
Extra-fees Emergency w/o hospitalization (n = 5,293) 0.02 (+/-0.51) 0.03 (+/-0.61) 0.02 (+/-0.47) \(0.715\)
Deduct. Outpatient (n = 5,293) 27.76 (+/-28.71) 34.7 (+/-32.96) 24.75 (+/-26.1) \(< 10^{-3}\)
Deduct. General Practitioner (n = 5,293) 3.93 (+/-4.38) 4.88 (+/-5.24) 3.52 (+/-3.87) \(< 10^{-3}\)
Deduct. Specialist (n = 5,293) 3.59 (+/-4.89) 4.24 (+/-5.48) 3.31 (+/-4.58) \(< 10^{-3}\)
Deduct. Pharmacy (n = 5,293) 13.36 (+/-15.38) 16.66 (+/-17.08) 11.93 (+/-14.35) \(< 10^{-3}\)
Deduct. Physiotherapist (n = 5,293) 1.09 (+/-3.54) 1.36 (+/-3.83) 0.98 (+/-3.41) \(< 10^{-3}\)
Deduct. Nurse (n = 5,293) 0.94 (+/-4.13) 1.41 (+/-5.44) 0.74 (+/-3.39) \(< 10^{-3}\)
Deduct. Dentist (n = 5,293) 0 (+/-0.11) 0.01 (+/-0.17) 0 (+/-0.06) \(0.01\)
Deduct. Transport (n = 5,293) 0.31 (+/-2.04) 0.6 (+/-3.13) 0.18 (+/-1.3) \(< 10^{-3}\)
Deduct. Emergency w/o hospitalization (n = 5,293) 0.24 (+/-0.92) 0.28 (+/-1.03) 0.22 (+/-0.87) \(0.025\)
No. Medical Sessions General Pract. (n = 5,293) 4.73 (+/-5.02) 6.11 (+/-6.23) 4.13 (+/-4.26) \(< 10^{-3}\)
No. Medical Sessions Specialist (n = 5,293) 3.44 (+/-4.44) 4.13 (+/-4.98) 3.14 (+/-4.15) \(< 10^{-3}\)
Table 4.7: Working conditions
ind_travail <- which(str_detect(variable_names$variable, "^QST_"))
print_tableau(ind = ind_travail, df = df) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Have to Hurry to Do Job (n = 11,199) Always 834 (7.45%) 335 (10.49%) 499 (6.23%)
Have to Hurry to Do Job Often 1881 (16.8%) 576 (18.04%) 1305 (16.3%)
Have to Hurry to Do Job Sometimes 2155 (19.24%) 482 (15.1%) 1673 (20.9%)
Have to Hurry to Do Job Never 541 (4.83%) 94 (2.94%) 447 (5.58%)
Have to Hurry to Do Job No answer 5788 (51.68%) 1706 (53.43%) 4082 (50.99%) \(< 10^{-3}\)
Very Little Freedom to Do Job (n = 11,199) Always 283 (2.53%) 103 (3.23%) 180 (2.25%)
Very Little Freedom to Do Job Often 695 (6.21%) 267 (8.36%) 428 (5.35%)
Very Little Freedom to Do Job Sometimes 2277 (20.33%) 631 (19.76%) 1646 (20.56%)
Very Little Freedom to Do Job Never 2129 (19.01%) 477 (14.94%) 1652 (20.63%)
Very Little Freedom to Do Job No answer 5815 (51.92%) 1715 (53.71%) 4100 (51.21%) \(< 10^{-3}\)
Job Allows to Learn New Things (n = 11,199) Always 841 (7.51%) 181 (5.67%) 660 (8.24%)
Job Allows to Learn New Things Often 1995 (17.81%) 487 (15.25%) 1508 (18.84%)
Job Allows to Learn New Things Sometimes 2195 (19.6%) 686 (21.48%) 1509 (18.85%)
Job Allows to Learn New Things Never 384 (3.43%) 135 (4.23%) 249 (3.11%)
Job Allows to Learn New Things No answer 5784 (51.65%) 1704 (53.37%) 4080 (50.96%) \(< 10^{-3}\)
Colleagues Help Carry out Tasks (n = 11,199) Always 577 (5.15%) 113 (3.54%) 464 (5.8%)
Colleagues Help Carry out Tasks Often 1640 (14.64%) 403 (12.62%) 1237 (15.45%)
Colleagues Help Carry out Tasks Sometimes 2128 (19%) 642 (20.11%) 1486 (18.56%)
Colleagues Help Carry out Tasks Never 522 (4.66%) 188 (5.89%) 334 (4.17%)
Colleagues Help Carry out Tasks Not concered 518 (4.63%) 132 (4.13%) 386 (4.82%)
Colleagues Help Carry out Tasks No answer 5814 (51.92%) 1715 (53.71%) 4099 (51.2%) \(< 10^{-3}\)
Job Requires not to Sleep Betw. Midnight and 5 a.m. (n = 11,199) Always 139 (1.24%) 46 (1.44%) 93 (1.16%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. Often 212 (1.89%) 49 (1.53%) 163 (2.04%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. Sometimes 530 (4.73%) 146 (4.57%) 384 (4.8%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. Never 4519 (40.35%) 1242 (38.9%) 3277 (40.93%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. No answer 5799 (51.78%) 1710 (53.55%) 4089 (51.07%) \(0.045\)
Repetitive Work under Time Constraints / Line Job (n = 11,199) Always 408 (3.64%) 140 (4.38%) 268 (3.35%)
Repetitive Work under Time Constraints / Line Job Often 500 (4.46%) 164 (5.14%) 336 (4.2%)
Repetitive Work under Time Constraints / Line Job Sometimes 692 (6.18%) 219 (6.86%) 473 (5.91%)
Repetitive Work under Time Constraints / Line Job Never 3777 (33.73%) 949 (29.72%) 2828 (35.32%)
Repetitive Work under Time Constraints / Line Job No answer 5822 (51.99%) 1721 (53.9%) 4101 (51.22%) \(< 10^{-3}\)
Exposed to Carrying Heavy Loads (n = 11,199) Always 388 (3.46%) 128 (4.01%) 260 (3.25%)
Exposed to Carrying Heavy Loads Often 799 (7.13%) 245 (7.67%) 554 (6.92%)
Exposed to Carrying Heavy Loads Sometimes 1581 (14.12%) 417 (13.06%) 1164 (14.54%)
Exposed to Carrying Heavy Loads Never 2625 (23.44%) 687 (21.52%) 1938 (24.21%)
Exposed to Carrying Heavy Loads No answer 5806 (51.84%) 1716 (53.74%) 4090 (51.09%) \(< 10^{-3}\)
Exposed to Painful Postures (n = 11,199) Always 903 (8.06%) 313 (9.8%) 590 (7.37%)
Exposed to Painful Postures Often 1111 (9.92%) 300 (9.4%) 811 (10.13%)
Exposed to Painful Postures Sometimes 1171 (10.46%) 275 (8.61%) 896 (11.19%)
Exposed to Painful Postures Never 2208 (19.72%) 587 (18.38%) 1621 (20.25%)
Exposed to Painful Postures No answer 5806 (51.84%) 1718 (53.81%) 4088 (51.06%) \(< 10^{-3}\)
Exposed to Harmful/Toxic Products/Substances (n = 11,199) Always 457 (4.08%) 160 (5.01%) 297 (3.71%)
Exposed to Harmful/Toxic Products/Substances Often 719 (6.42%) 203 (6.36%) 516 (6.45%)
Exposed to Harmful/Toxic Products/Substances Sometimes 1254 (11.2%) 307 (9.61%) 947 (11.83%)
Exposed to Harmful/Toxic Products/Substances Never 2970 (26.52%) 808 (25.31%) 2162 (27%)
Exposed to Harmful/Toxic Products/Substances No answer 5799 (51.78%) 1715 (53.71%) 4084 (51.01%) \(< 10^{-3}\)
Table 4.8: Working conditions
ind_travail <- which(str_detect(variable_names$variable, "^QST_"))
print_tableau(ind = ind_travail, df = df |> filter(in_sample)) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Have to Hurry to Do Job (n = 5,293) Always 391 (7.39%) 168 (10.52%) 223 (6.03%)
Have to Hurry to Do Job Often 895 (16.91%) 290 (18.16%) 605 (16.37%)
Have to Hurry to Do Job Sometimes 1016 (19.2%) 219 (13.71%) 797 (21.56%)
Have to Hurry to Do Job Never 247 (4.67%) 39 (2.44%) 208 (5.63%)
Have to Hurry to Do Job No answer 2744 (51.84%) 881 (55.17%) 1863 (50.41%) \(< 10^{-3}\)
Very Little Freedom to Do Job (n = 5,293) Always 126 (2.38%) 50 (3.13%) 76 (2.06%)
Very Little Freedom to Do Job Often 299 (5.65%) 130 (8.14%) 169 (4.57%)
Very Little Freedom to Do Job Sometimes 1084 (20.48%) 302 (18.91%) 782 (21.16%)
Very Little Freedom to Do Job Never 1028 (19.42%) 229 (14.34%) 799 (21.62%)
Very Little Freedom to Do Job No answer 2756 (52.07%) 886 (55.48%) 1870 (50.6%) \(< 10^{-3}\)
Job Allows to Learn New Things (n = 5,293) Always 401 (7.58%) 88 (5.51%) 313 (8.47%)
Job Allows to Learn New Things Often 960 (18.14%) 255 (15.97%) 705 (19.07%)
Job Allows to Learn New Things Sometimes 1039 (19.63%) 316 (19.79%) 723 (19.56%)
Job Allows to Learn New Things Never 151 (2.85%) 60 (3.76%) 91 (2.46%)
Job Allows to Learn New Things No answer 2742 (51.8%) 878 (54.98%) 1864 (50.43%) \(< 10^{-3}\)
Colleagues Help Carry out Tasks (n = 5,293) Always 291 (5.5%) 59 (3.69%) 232 (6.28%)
Colleagues Help Carry out Tasks Often 785 (14.83%) 204 (12.77%) 581 (15.72%)
Colleagues Help Carry out Tasks Sometimes 978 (18.48%) 302 (18.91%) 676 (18.29%)
Colleagues Help Carry out Tasks Never 241 (4.55%) 90 (5.64%) 151 (4.09%)
Colleagues Help Carry out Tasks Not concered 247 (4.67%) 60 (3.76%) 187 (5.06%)
Colleagues Help Carry out Tasks No answer 2751 (51.97%) 882 (55.23%) 1869 (50.57%) \(< 10^{-3}\)
Job Requires not to Sleep Betw. Midnight and 5 a.m. (n = 5,293) Always 61 (1.15%) 18 (1.13%) 43 (1.16%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. Often 91 (1.72%) 20 (1.25%) 71 (1.92%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. Sometimes 254 (4.8%) 77 (4.82%) 177 (4.79%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. Never 2136 (40.36%) 605 (37.88%) 1531 (41.42%)
Job Requires not to Sleep Betw. Midnight and 5 a.m. No answer 2751 (51.97%) 877 (54.92%) 1874 (50.7%) \(0.037\)
Repetitive Work under Time Constraints / Line Job (n = 5,293) Always 174 (3.29%) 64 (4.01%) 110 (2.98%)
Repetitive Work under Time Constraints / Line Job Often 227 (4.29%) 79 (4.95%) 148 (4%)
Repetitive Work under Time Constraints / Line Job Sometimes 330 (6.23%) 100 (6.26%) 230 (6.22%)
Repetitive Work under Time Constraints / Line Job Never 1809 (34.18%) 474 (29.68%) 1335 (36.12%)
Repetitive Work under Time Constraints / Line Job No answer 2753 (52.01%) 880 (55.1%) 1873 (50.68%) \(< 10^{-3}\)
Exposed to Carrying Heavy Loads (n = 5,293) Always 187 (3.53%) 68 (4.26%) 119 (3.22%)
Exposed to Carrying Heavy Loads Often 392 (7.41%) 127 (7.95%) 265 (7.17%)
Exposed to Carrying Heavy Loads Sometimes 725 (13.7%) 200 (12.52%) 525 (14.2%)
Exposed to Carrying Heavy Loads Never 1237 (23.37%) 323 (20.23%) 914 (24.73%)
Exposed to Carrying Heavy Loads No answer 2752 (51.99%) 879 (55.04%) 1873 (50.68%) \(< 10^{-3}\)
Exposed to Painful Postures (n = 5,293) Always 409 (7.73%) 153 (9.58%) 256 (6.93%)
Exposed to Painful Postures Often 523 (9.88%) 148 (9.27%) 375 (10.15%)
Exposed to Painful Postures Sometimes 533 (10.07%) 125 (7.83%) 408 (11.04%)
Exposed to Painful Postures Never 1078 (20.37%) 294 (18.41%) 784 (21.21%)
Exposed to Painful Postures No answer 2750 (51.96%) 877 (54.92%) 1873 (50.68%) \(< 10^{-3}\)
Exposed to Harmful/Toxic Products/Substances (n = 5,293) Always 211 (3.99%) 77 (4.82%) 134 (3.63%)
Exposed to Harmful/Toxic Products/Substances Often 335 (6.33%) 92 (5.76%) 243 (6.57%)
Exposed to Harmful/Toxic Products/Substances Sometimes 582 (11%) 150 (9.39%) 432 (11.69%)
Exposed to Harmful/Toxic Products/Substances Never 1415 (26.73%) 399 (24.98%) 1016 (27.49%)
Exposed to Harmful/Toxic Products/Substances No answer 2750 (51.96%) 879 (55.04%) 1871 (50.62%) \(0.002\)
Table 4.9: Economic and social situation
ind_autre <- which(str_detect(variable_names$variable, "^QES_"))
print_tableau(ind = ind_autre, df = df) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Participation in Group Activities (n = 11,199) Yes 3784 (33.79%) 896 (28.06%) 2888 (36.07%)
Participation in Group Activities No 7179 (64.1%) 2214 (69.34%) 4965 (62.02%)
Participation in Group Activities No answer 236 (2.11%) 83 (2.6%) 153 (1.91%) \(< 10^{-3}\)
Frequency Meeting with Friends/Neighbors (n = 11,199) Every day or almost every day 2531 (22.6%) 600 (18.79%) 1931 (24.12%)
Frequency Meeting with Friends/Neighbors At least once a week 4464 (39.86%) 1194 (37.39%) 3270 (40.84%)
Frequency Meeting with Friends/Neighbors At least once a month 2333 (20.83%) 668 (20.92%) 1665 (20.8%)
Frequency Meeting with Friends/Neighbors Less than once a month 1018 (9.09%) 375 (11.74%) 643 (8.03%)
Frequency Meeting with Friends/Neighbors Never 553 (4.94%) 244 (7.64%) 309 (3.86%)
Frequency Meeting with Friends/Neighbors No answer 300 (2.68%) 112 (3.51%) 188 (2.35%) \(< 10^{-3}\)
Frequency Meeting with People in Organizations (n = 11,198) Every day or almost every day 303 (2.71%) 79 (2.47%) 224 (2.8%)
Frequency Meeting with People in Organizations At least once a week 1898 (16.95%) 434 (13.6%) 1464 (18.29%)
Frequency Meeting with People in Organizations At least once a month 1257 (11.23%) 314 (9.84%) 943 (11.78%)
Frequency Meeting with People in Organizations Less than once a month 1314 (11.73%) 341 (10.68%) 973 (12.15%)
Frequency Meeting with People in Organizations Never 5903 (52.71%) 1844 (57.77%) 4059 (50.7%)
Frequency Meeting with People in Organizations No answer 523 (4.67%) 180 (5.64%) 343 (4.28%) \(< 10^{-3}\)
Frequency Meeting with Colleagues Outside Work (n = 11,199) Every day or almost every day 628 (5.61%) 144 (4.51%) 484 (6.05%)
Frequency Meeting with Colleagues Outside Work At least once a week 1060 (9.47%) 278 (8.71%) 782 (9.77%)
Frequency Meeting with Colleagues Outside Work At least once a month 1463 (13.06%) 366 (11.46%) 1097 (13.7%)
Frequency Meeting with Colleagues Outside Work Less than once a month 2189 (19.55%) 538 (16.85%) 1651 (20.62%)
Frequency Meeting with Colleagues Outside Work Never 4795 (42.82%) 1559 (48.83%) 3236 (40.42%)
Frequency Meeting with Colleagues Outside Work No answer 1064 (9.5%) 308 (9.65%) 756 (9.44%) \(< 10^{-3}\)
Frequency Meeting with Family Living Outside Household (n = 11,199) Every day or almost every day 2132 (19.04%) 629 (19.7%) 1503 (18.77%)
Frequency Meeting with Family Living Outside Household At least once a week 4137 (36.94%) 1103 (34.54%) 3034 (37.9%)
Frequency Meeting with Family Living Outside Household At least once a month 2561 (22.87%) 666 (20.86%) 1895 (23.67%)
Frequency Meeting with Family Living Outside Household Less than once a month 1626 (14.52%) 490 (15.35%) 1136 (14.19%)
Frequency Meeting with Family Living Outside Household Never 406 (3.63%) 175 (5.48%) 231 (2.89%)
Frequency Meeting with Family Living Outside Household No answer 337 (3.01%) 130 (4.07%) 207 (2.59%) \(< 10^{-3}\)
Mother’s Level of Education (n = 11,199) Never Been to School 703 (6.28%) 267 (8.36%) 436 (5.45%)
Mother’s Level of Education Nursery School, Primary school, Certificate of studies 4049 (36.16%) 1196 (37.46%) 2853 (35.64%)
Mother’s Level of Education 1st cycle (~Middle School) 2164 (19.32%) 552 (17.29%) 1612 (20.13%)
Mother’s Level of Education 2nd cycle (~High School 1064 (9.5%) 237 (7.42%) 827 (10.33%)
Mother’s Level of Education Higher Education 1100 (9.82%) 265 (8.3%) 835 (10.43%)
Mother’s Level of Education Other 168 (1.5%) 41 (1.28%) 127 (1.59%)
Mother’s Level of Education Does not know 1723 (15.39%) 561 (17.57%) 1162 (14.51%)
Mother’s Level of Education No answer 228 (2.04%) 74 (2.32%) 154 (1.92%) \(< 10^{-3}\)
Father’s Level of Education (n = 11,199) Never Been to School 583 (5.21%) 231 (7.23%) 352 (4.4%)
Father’s Level of Education Nursery School, Primary school, Certificate of studies 3651 (32.6%) 1071 (33.54%) 2580 (32.23%)
Father’s Level of Education 1st cycle (~Middle School) 2382 (21.27%) 587 (18.38%) 1795 (22.42%)
Father’s Level of Education 2nd cycle (~High School 853 (7.62%) 205 (6.42%) 648 (8.09%)
Father’s Level of Education Higher Education 1324 (11.82%) 317 (9.93%) 1007 (12.58%)
Father’s Level of Education Other 248 (2.21%) 77 (2.41%) 171 (2.14%)
Father’s Level of Education Does not know 1921 (17.15%) 630 (19.73%) 1291 (16.13%)
Father’s Level of Education No answer 237 (2.12%) 75 (2.35%) 162 (2.02%) \(< 10^{-3}\)
Table 4.10: Economic and social situation
ind_autre <- which(str_detect(variable_names$variable, "^QES_"))
print_tableau(ind = ind_autre, df = df |> filter(in_sample)) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Participation in Group Activities (n = 5,293) Yes 1848 (34.91%) 458 (28.68%) 1390 (37.61%)
Participation in Group Activities No 3337 (63.05%) 1103 (69.07%) 2234 (60.44%)
Participation in Group Activities No answer 108 (2.04%) 36 (2.25%) 72 (1.95%) \(< 10^{-3}\)
Frequency Meeting with Friends/Neighbors (n = 5,293) Every day or almost every day 1144 (21.61%) 300 (18.79%) 844 (22.84%)
Frequency Meeting with Friends/Neighbors At least once a week 2150 (40.62%) 616 (38.57%) 1534 (41.5%)
Frequency Meeting with Friends/Neighbors At least once a month 1098 (20.74%) 325 (20.35%) 773 (20.91%)
Frequency Meeting with Friends/Neighbors Less than once a month 497 (9.39%) 181 (11.33%) 316 (8.55%)
Frequency Meeting with Friends/Neighbors Never 270 (5.1%) 129 (8.08%) 141 (3.81%)
Frequency Meeting with Friends/Neighbors No answer 134 (2.53%) 46 (2.88%) 88 (2.38%) \(< 10^{-3}\)
Frequency Meeting with People in Organizations (n = 5,293) Every day or almost every day 161 (3.04%) 49 (3.07%) 112 (3.03%)
Frequency Meeting with People in Organizations At least once a week 912 (17.23%) 209 (13.09%) 703 (19.02%)
Frequency Meeting with People in Organizations At least once a month 604 (11.41%) 156 (9.77%) 448 (12.12%)
Frequency Meeting with People in Organizations Less than once a month 657 (12.41%) 178 (11.15%) 479 (12.96%)
Frequency Meeting with People in Organizations Never 2717 (51.33%) 923 (57.8%) 1794 (48.54%)
Frequency Meeting with People in Organizations No answer 242 (4.57%) 82 (5.13%) 160 (4.33%) \(< 10^{-3}\)
Frequency Meeting with Colleagues Outside Work (n = 5,293) Every day or almost every day 275 (5.2%) 68 (4.26%) 207 (5.6%)
Frequency Meeting with Colleagues Outside Work At least once a week 446 (8.43%) 128 (8.02%) 318 (8.6%)
Frequency Meeting with Colleagues Outside Work At least once a month 670 (12.66%) 175 (10.96%) 495 (13.39%)
Frequency Meeting with Colleagues Outside Work Less than once a month 1032 (19.5%) 275 (17.22%) 757 (20.48%)
Frequency Meeting with Colleagues Outside Work Never 2374 (44.85%) 808 (50.59%) 1566 (42.37%)
Frequency Meeting with Colleagues Outside Work No answer 496 (9.37%) 143 (8.95%) 353 (9.55%) \(< 10^{-3}\)
Frequency Meeting with Family Living Outside Household (n = 5,293) Every day or almost every day 1022 (19.31%) 311 (19.47%) 711 (19.24%)
Frequency Meeting with Family Living Outside Household At least once a week 1969 (37.2%) 553 (34.63%) 1416 (38.31%)
Frequency Meeting with Family Living Outside Household At least once a month 1157 (21.86%) 323 (20.23%) 834 (22.56%)
Frequency Meeting with Family Living Outside Household Less than once a month 783 (14.79%) 251 (15.72%) 532 (14.39%)
Frequency Meeting with Family Living Outside Household Never 208 (3.93%) 93 (5.82%) 115 (3.11%)
Frequency Meeting with Family Living Outside Household No answer 154 (2.91%) 66 (4.13%) 88 (2.38%) \(< 10^{-3}\)
Mother’s Level of Education (n = 5,293) Never Been to School 355 (6.71%) 141 (8.83%) 214 (5.79%)
Mother’s Level of Education Nursery School, Primary school, Certificate of studies 1996 (37.71%) 603 (37.76%) 1393 (37.69%)
Mother’s Level of Education 1st cycle (~Middle School) 968 (18.29%) 266 (16.66%) 702 (18.99%)
Mother’s Level of Education 2nd cycle (~High School 458 (8.65%) 107 (6.7%) 351 (9.5%)
Mother’s Level of Education Higher Education 478 (9.03%) 134 (8.39%) 344 (9.31%)
Mother’s Level of Education Other 82 (1.55%) 16 (1%) 66 (1.79%)
Mother’s Level of Education Does not know 857 (16.19%) 300 (18.79%) 557 (15.07%)
Mother’s Level of Education No answer 99 (1.87%) 30 (1.88%) 69 (1.87%) \(< 10^{-3}\)
Father’s Level of Education (n = 5,293) Never Been to School 292 (5.52%) 117 (7.33%) 175 (4.73%)
Father’s Level of Education Nursery School, Primary school, Certificate of studies 1830 (34.57%) 557 (34.88%) 1273 (34.44%)
Father’s Level of Education 1st cycle (~Middle School) 1037 (19.59%) 269 (16.84%) 768 (20.78%)
Father’s Level of Education 2nd cycle (~High School 401 (7.58%) 99 (6.2%) 302 (8.17%)
Father’s Level of Education Higher Education 565 (10.67%) 154 (9.64%) 411 (11.12%)
Father’s Level of Education Other 123 (2.32%) 44 (2.76%) 79 (2.14%)
Father’s Level of Education Does not know 948 (17.91%) 319 (19.97%) 629 (17.02%)
Father’s Level of Education No answer 97 (1.83%) 38 (2.38%) 59 (1.6%) \(< 10^{-3}\)
Table 4.11: Opinion
ind_opinion_1 <- which(str_detect(variable_names$variable, "^OPINION1_"))
print_tableau(ind = ind_opinion_1, df = df) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Waiver General Practitioner (n = 11,199) Yes 239 (2.13%) 132 (4.13%) 107 (1.34%)
Waiver General Practitioner No 5169 (46.16%) 1542 (48.29%) 3627 (45.3%)
Waiver General Practitioner No answer 5791 (51.71%) 1519 (47.57%) 4272 (53.36%) \(< 10^{-3}\)
Waiver Dental Care (n = 11,199) Yes 874 (7.8%) 383 (11.99%) 491 (6.13%)
Waiver Dental Care No 4534 (40.49%) 1291 (40.43%) 3243 (40.51%)
Waiver Dental Care No answer 5791 (51.71%) 1519 (47.57%) 4272 (53.36%) \(< 10^{-3}\)
Waiver Other Health Care (n = 11,199) Yes 216 (1.93%) 112 (3.51%) 104 (1.3%)
Waiver Other Health Care No 5192 (46.36%) 1562 (48.92%) 3630 (45.34%)
Waiver Other Health Care No answer 5791 (51.71%) 1519 (47.57%) 4272 (53.36%) \(< 10^{-3}\)
Waiver Health Care Too Far (n = 11,199) Yes 146 (1.3%) 83 (2.6%) 63 (0.79%)
Waiver Health Care Too Far No 5262 (46.99%) 1591 (49.83%) 3671 (45.85%)
Waiver Health Care Too Far No answer 5791 (51.71%) 1519 (47.57%) 4272 (53.36%) \(< 10^{-3}\)
Waiver Appointment Delay Too Long (n = 11,199) Yes 844 (7.54%) 340 (10.65%) 504 (6.3%)
Waiver Appointment Delay Too Long No 4564 (40.75%) 1334 (41.78%) 3230 (40.34%)
Waiver Appointment Delay Too Long No answer 5791 (51.71%) 1519 (47.57%) 4272 (53.36%) \(< 10^{-3}\)
Table 4.12: Opinion
ind_opinion_1 <- which(str_detect(variable_names$variable, "^OPINION1_"))
print_tableau(ind = ind_opinion_1, df = df |> filter(in_sample)) |> 
  kableExtra::kable(format = "html", escape = F) |> 
  kableExtra::kable_classic(full_width = F, html_font = "Cambria") |> 
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive")
  ) |> 
  kableExtra::kable_styling() |>
  unclass() |> cat()
label Whole Sample >Q1 p_value
Waiver General Practitioner (n = 5,293) Yes 188 (3.55%) 110 (6.89%) 78 (2.11%)
Waiver General Practitioner No 4024 (76.02%) 1201 (75.2%) 2823 (76.38%)
Waiver General Practitioner No answer 1081 (20.42%) 286 (17.91%) 795 (21.51%) \(< 10^{-3}\)
Waiver Dental Care (n = 5,293) Yes 695 (13.13%) 311 (19.47%) 384 (10.39%)
Waiver Dental Care No 3517 (66.45%) 1000 (62.62%) 2517 (68.1%)
Waiver Dental Care No answer 1081 (20.42%) 286 (17.91%) 795 (21.51%) \(< 10^{-3}\)
Waiver Other Health Care (n = 5,293) Yes 169 (3.19%) 92 (5.76%) 77 (2.08%)
Waiver Other Health Care No 4043 (76.38%) 1219 (76.33%) 2824 (76.41%)
Waiver Other Health Care No answer 1081 (20.42%) 286 (17.91%) 795 (21.51%) \(< 10^{-3}\)
Waiver Health Care Too Far (n = 5,293) Yes 100 (1.89%) 63 (3.94%) 37 (1%)
Waiver Health Care Too Far No 4112 (77.69%) 1248 (78.15%) 2864 (77.49%)
Waiver Health Care Too Far No answer 1081 (20.42%) 286 (17.91%) 795 (21.51%) \(< 10^{-3}\)
Waiver Appointment Delay Too Long (n = 5,293) Yes 632 (11.94%) 264 (16.53%) 368 (9.96%)
Waiver Appointment Delay Too Long No 3580 (67.64%) 1047 (65.56%) 2533 (68.53%)
Waiver Appointment Delay Too Long No answer 1081 (20.42%) 286 (17.91%) 795 (21.51%) \(< 10^{-3}\)