Determinants of Quality Of Life of recent Ghanaian stroke survivors

Author

Dr. Ayisi-Boateng

Published

June 8, 2025

Import data

Show the code
df_paper_02 <- dget("df_for_papers") 

Summary table: All data

Show the code
gtsummary::theme_gtsummary_compact()
Setting theme "Compact"
Show the code
table_0 <- 
    df_paper_02 %>%
    gtsummary::tbl_summary(
        include = c(
            a_agebase, a_gender, maristat, educ, a_livingsit, a_religion, 
            a_domicile, income, d_st_type, d_stroke_ct,d_stroke_loc, bmi,
            mobility, selfcare,  usual_act, pain_disc, anxiety, vas, vas_cat, 
            barthels_index),
        digits = gtsummary::all_categorical()~ c(0,1),
        statistic = gtsummary::all_categorical() ~ "{n} ({p})",
        missing_text = "Missing"
    ) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::modify_caption("**Table 1**: ") %>% 
    gtsummary::modify_spanning_header(
        gtsummary::all_stat_cols() ~ "****") 

Tables

Table1

Show the code
gtsummary::reset_gtsummary_theme()
gtsummary::theme_gtsummary_compact()
Setting theme "Compact"
Show the code
df_paper_02 %>%
    mutate(a_livingsit = droplevels(a_livingsit)) %>% 
    gtsummary::tbl_summary(
        include = c(
            a_agebase, a_gender, maristat, educ, a_livingsit, a_religion, 
            a_domicile, income, d_st_type, d_stroke_ct,d_stroke_loc, bmi),
        digits = gtsummary::all_categorical()~ c(0,1),
        statistic = list(
            gtsummary::all_categorical() ~ "{n} ({p})",
            gtsummary::all_continuous() ~ "{mean} ({sd})"
            ),
        missing = "no",
        by = a_gender,
        label = a_livingsit ~ "Living Status"
    ) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::modify_caption(
        "**Table 1**: Socio-demographic and clinical characteristics of the study participants"
        ) %>% 
    gtsummary::modify_spanning_header(
        gtsummary::all_stat_cols() ~ "**Sex of study participant**") %>% 
    gtsummary::add_overall(last = TRUE)%>% 
    gtsummary::add_p() %>%
    gtsummary::bold_p()
Table 1: Socio-demographic and clinical characteristics of the study participants
Characteristic
Sex of study participant
Overall
N = 5001
p-value2
Male
N = 2811
Female
N = 2191
Age in years 58 (11) 59 (12) 58 (12) 0.094
Marital Status


<0.001
    Currently Married 235 (83.6) 98 (44.7) 333 (66.6)
    Previously Married 32 (11.4) 112 (51.1) 144 (28.8)
    Never Married 14 (5.0) 9 (4.1) 23 (4.6)
Educational Status


<0.001
    None 11 (3.9) 38 (17.4) 49 (9.8)
    Primary 90 (32.0) 114 (52.1) 204 (40.8)
    Secondary 113 (40.2) 51 (23.3) 164 (32.8)
    Tertiary 67 (23.8) 16 (7.3) 83 (16.6)
Living Status


<0.001
    Lives Alone 16 (5.7) 13 (5.9) 29 (5.8)
    Lives With Spouse and Children 199 (70.8) 74 (33.8) 273 (54.6)
    Lives With Spouse 18 (6.4) 12 (5.5) 30 (6.0)
    Lives With Extended Family 30 (10.7) 42 (19.2) 72 (14.4)
    Lives With Children 18 (6.4) 78 (35.6) 96 (19.2)
Religion


>0.9
    Christianity 250 (89.0) 198 (90.4) 448 (89.6)
    Islam 29 (10.3) 20 (9.1) 49 (9.8)
    Other 2 (0.7) 1 (0.5) 3 (0.6)
Domicile


0.4
    Rural 16 (5.7) 17 (7.8) 33 (6.6)
    Semi-Urban 99 (35.2) 67 (30.6) 166 (33.2)
    Urban 166 (59.1) 135 (61.6) 301 (60.2)
Income in GHC


0.028
    0-100 83 (29.6) 91 (42.1) 174 (35.1)
    101-250 88 (31.4) 61 (28.2) 149 (30.0)
    251-500 67 (23.9) 42 (19.4) 109 (22.0)
    >500 42 (15.0) 22 (10.2) 64 (12.9)
Stroke Type (Choose One)


0.006
    Ischemic Stroke 165 (67.3) 154 (81.5) 319 (73.5)
    Intracerebral Hemorrhagic Stroke 69 (28.2) 31 (16.4) 100 (23.0)
    Ischemic With Hemorrhagic Transformation 8 (3.3) 2 (1.1) 10 (2.3)
    Untyped Stroke (no CT scan available) 3 (1.2) 2 (1.1) 5 (1.2)
Stroke Subtype ( with results of Brain CT scan)


0.003
    Ischaemic 159 (67.1) 150 (82.0) 309 (73.6)
    Haemorrhage infarct 13 (5.5) 3 (1.6) 16 (3.8)
    Haemorrhagic 55 (23.2) 28 (15.3) 83 (19.8)
    Ischaemic and Haemorrhagic 10 (4.2) 2 (1.1) 12 (2.9)
Stroke Location


0.045
    Anterior Circulation 147 (71.0) 129 (80.1) 276 (75.0)
    Posterior Circulation 60 (29.0) 32 (19.9) 92 (25.0)
Body Mass Index 25.5 (4.8) 28.0 (6.1) 26.6 (5.5) <0.001
1 Mean (SD); n (%)
2 Wilcoxon rank sum test; Pearson’s Chi-squared test; Fisher’s exact test

Table 2

Show the code
# gtsummary::reset_gtsummary_theme()
# gtsummary::theme_gtsummary_compact()
df_paper_02 %>%
    gtsummary::tbl_summary(
        include = c(
            a_gender, mobility, selfcare,  usual_act, pain_disc, anxiety, vas, 
            vas_cat, barthels_index),
        digits = gtsummary::all_categorical()~ c(0,1),
        statistic = list(
            gtsummary::all_categorical() ~ "{n} ({p})",
            gtsummary::all_continuous() ~ "{mean} ({sd})"
            ),
        type = list(
            c(mobility, selfcare,  usual_act, pain_disc, anxiety)~ 
                "continuous"),
        missing = "no",
        by = a_gender
    ) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::modify_caption(
        "**Table 2**: Descriptive statistics of EQ-5D, VAS and Barthel index scales"
        ) %>% 
    gtsummary::modify_spanning_header(
        gtsummary::all_stat_cols() ~ "**Sex of study participant**") %>% 
    gtsummary::add_overall(last = TRUE) %>% 
    gtsummary::add_p() %>%
    gtsummary::bold_p()
Table 2: Descriptive statistics of EQ-5D, VAS and Barthel index scales
Characteristic
Sex of study participant
Overall
N = 5001
p-value2
Male
N = 2811
Female
N = 2191
Mobility 1.71 (0.67) 1.80 (0.66) 1.75 (0.66) 0.13
Self Care 1.67 (0.72) 1.70 (0.76) 1.69 (0.74) 0.7
Usual Activity 1.84 (0.72) 1.90 (0.68) 1.87 (0.71) 0.3
Pain Discomfort 1.59 (0.60) 1.71 (0.61) 1.64 (0.61) 0.024
Anxiety 1.44 (0.60) 1.44 (0.57) 1.44 (0.58) 0.8
Your Health Today 64 (23) 68 (22) 65 (23) 0.041
Categorised VAS


0.076
    Below Median 132 (47.1) 85 (39.2) 217 (43.7)
    Median & above 148 (52.9) 132 (60.8) 280 (56.3)
Barthels Index 68 (26) 65 (29) 66 (27) 0.5
1 Mean (SD); n (%)
2 Wilcoxon rank sum test; Pearson’s Chi-squared test

Table 3: Logistic regression

Show the code
table_vas_crude <- 
    df_paper_02 %>%
    filter(!is.na(vas_cat)) %>% 
    mutate(vas_cat = factor(vas_cat)) %>% 
    select(
        a_agebase, a_gender, maristat, educ, a_livingsit, a_religion, 
        a_domicile, income, d_st_type, d_stroke_ct,d_stroke_loc, bmi, 
        barthels_index, vas_cat) %>% 
     tbl_uvregression(
        y = vas_cat, 
        method = glm,
        method.args = family(binomial),
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3),
        exponentiate = T) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::add_global_p() %>% 
    gtsummary::bold_p()

table_vas_adj <- 
    df_paper_02 %>% 
    select(
        vas_cat, a_agebase, a_gender, a_livingsit, a_domicile, income, 
        d_st_type, bmi, barthels_index, d_stroke_ct) %>% 
    mutate(vas_cat = factor(vas_cat)) %>%
    glm(vas_cat ~ ., data = ., family = "binomial") %>%
    tbl_regression(
        pvalue_fun = function(x) style_pvalue(x, digits = 3),
        exponentiate = T) %>% 
    bold_labels() %>% 
    bold_p() 

tbl_merge(
    list(table_vas_crude, table_vas_adj),
    tab_spanner = c("**Univariate**", "**Multivariate**")) %>%    
    modify_caption(
        caption = "**Table 3a**:Univartiate and multivariate logistic 
        regression for Quality of Life of study participants") 
Table 3a:Univartiate and multivariate logistic regression for Quality of Life of study participants
Characteristic
Univariate
Multivariate
N OR 95% CI p-value OR 95% CI p-value
Age in years 497 0.97 0.96, 0.99 0.001 0.99 0.97, 1.01 0.224
Gender 497

0.075


    Male


    Female
1.39 0.97, 1.99
2.42 1.40, 4.28 0.002
Marital Status 497

0.299


    Currently Married




    Previously Married
0.83 0.56, 1.24



    Never Married
0.55 0.23, 1.29



Educational Status 497

0.346


    None




    Primary
1.61 0.86, 3.05



    Secondary
1.74 0.91, 3.34



    Tertiary
1.33 0.65, 2.74



Living Status 497

0.067


    Lives Alone




    Lives With Spouse and Children
0.67 0.28, 1.48



    Lives With Spouse
0.34 0.11, 0.98



    Lives With Extended Family
0.58 0.22, 1.42



    Lives With Children
0.40 0.16, 0.94



Religion 497

0.267


    Christianity




    Islam
0.65 0.36, 1.18



    Other
0.37 0.02, 3.88



Domicile 497

0.058


    Rural


    Semi-Urban
2.40 1.12, 5.34
2.35 0.91, 6.26 0.081
    Urban
2.39 1.15, 5.18
2.42 0.97, 6.25 0.060
Income in GHC 493

<0.001


    0-100


    101-250
2.48 1.58, 3.91
2.33 1.31, 4.19 0.004
    251-500
2.69 1.64, 4.48
2.31 1.21, 4.51 0.012
    >500
1.21 0.67, 2.16
1.33 0.60, 3.00 0.489
Stroke Type (Choose One) 432

<0.001


    Ischemic Stroke


    Intracerebral Hemorrhagic Stroke
1.44 0.91, 2.31
0.30 0.01, 4.03 0.410
    Ischemic With Hemorrhagic Transformation
0.20 0.03, 0.83
0.28 0.01, 4.36 0.375
    Untyped Stroke (no CT scan available)
0.00

0.00
0.979
Stroke Subtype ( with results of Brain CT scan) 418

<0.001


    Ischaemic


    Haemorrhage infarct
0.36 0.11, 1.02
1.47 0.09, 47.2 0.798
    Haemorrhagic
2.07 1.23, 3.58
4.51 0.33, 143 0.309
    Ischaemic and Haemorrhagic
0.07 0.00, 0.38
0.19 0.01, 2.51 0.224
Stroke Location 366

0.359


    Anterior Circulation




    Posterior Circulation
0.80 0.50, 1.29



Body Mass Index 478 1.05 1.01, 1.08 0.009 1.03 0.99, 1.08 0.197
Barthels Index 482 1.02 1.01, 1.03 <0.001 1.01 1.01, 1.02 0.001
a_livingsit






    Lives Alone




    Lives With Spouse and Children



0.97 0.32, 2.65 0.951
    Lives With Spouse



0.48 0.12, 1.80 0.286
    Lives With Extended Family



0.52 0.15, 1.60 0.264
    Lives With Children



0.40 0.12, 1.19 0.109
Abbreviations: CI = Confidence Interval, OR = Odds Ratio

Table 3 - Linear regression version

Show the code
table_vas_crude <- 
    df_paper_02 %>%
    filter(!is.na(vas)) %>% 
    select(
        a_agebase, a_gender, maristat, educ, a_livingsit, a_religion,
        a_domicile, income, d_st_type, d_stroke_ct, d_stroke_loc, bmi,
        barthels_index, vas) %>% 
    tbl_uvregression(
        y = vas, 
        method = lm,
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    modify_header(
        update = list(estimate ~ "**Estimate**", label ~ "**Variable**")) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::add_global_p() %>% 
    gtsummary::bold_p()

table_vas_adj <- 
    df_paper_02 %>% 
    select(
        vas, a_agebase, a_gender, a_domicile, d_st_type, d_stroke_ct, income,
        barthels_index, bmi) %>% 
    lm(vas ~ ., data = .) %>%
    tbl_regression(
        pvalue_fun = function(x) style_pvalue(x, digits = 3)) %>% 
    bold_labels() %>% 
    bold_p() 

tbl_merge(
    list(table_vas_crude, table_vas_adj),
    tab_spanner = c("**Univariate**", "**Multivariate**")) %>%    
    modify_caption(
        caption = "**Table 3b**:Univartiate and multivariate linear 
        regression for quality of life of study participants") 
Table 3b:Univartiate and multivariate linear regression for quality of life of study participants
Variable
Univariate
Multivariate
N Estimate 95% CI p-value Beta 95% CI p-value
Age in years 497 -0.27 -0.44, -0.10 0.002 -0.16 -0.35, 0.02 0.089
Gender 497

0.057


    Male


    Female
3.9 -0.11, 7.9
6.7 2.2, 11 0.004
Marital Status 497

0.351


    Currently Married




    Previously Married
-2.5 -7.0, 2.0



    Never Married
-5.3 -15, 4.3



Educational Status 497

0.556


    None




    Primary
3.6 -3.6, 11



    Secondary
5.2 -2.2, 13



    Tertiary
4.8 -3.3, 13



Living Status 497

0.107


    Lives Alone




    Lives With Spouse and Children
-5.8 -14, 2.9



    Lives With Spouse
-11 -23, 0.17



    Lives With Extended Family
-8.2 -18, 1.6



    Lives With Children
-11 -20, -1.4



Religion 497

0.398


    Christianity




    Islam
-4.6 -11, 2.1



    Other
-2.6 -28, 23



Domicile 497

0.021


    Rural


    Semi-Urban
11 2.4, 19
11 2.1, 20 0.015
    Urban
12 3.4, 20
12 3.0, 20 0.008
Income in GHC 493

<0.001


    0-100


    101-250
10 5.2, 15
7.5 2.3, 13 0.005
    251-500
9.8 4.5, 15
8.4 2.5, 14 0.005
    >500
1.4 -5.0, 7.9
1.9 -5.6, 9.3 0.619
Stroke Type (Choose One) 432

0.001


    Ischemic Stroke


    Intracerebral Hemorrhagic Stroke
5.0 0.03, 10
-6.3 -26, 14 0.537
    Ischemic With Hemorrhagic Transformation
-16 -30, -2.4
-6.0 -27, 15 0.580
    Untyped Stroke (no CT scan available)
-24 -43, -4.1
-28 -72, 17 0.226
Stroke Subtype ( with results of Brain CT scan) 418

<0.001


    Ischaemic


    Haemorrhage infarct
-10 -21, 0.79
-2.1 -24, 20 0.849
    Haemorrhagic
8.5 3.1, 14
9.6 -11, 30 0.349
    Ischaemic and Haemorrhagic
-17 -30, -4.7
-5.6 -26, 14 0.583
Stroke Location 366

0.633


    Anterior Circulation




    Posterior Circulation
-1.3 -6.5, 3.9



Body Mass Index 478 0.34 -0.03, 0.71 0.074 0.13 -0.26, 0.52 0.518
Barthels Index 482 0.25 0.18, 0.32 <0.001 0.19 0.11, 0.27 <0.001
Abbreviation: CI = Confidence Interval

Table 4a - Linear regression for males

Show the code
table_vas_crude <- 
    df_paper_02 %>%
    filter(!is.na(vas) & a_gender == "Male") %>% 
    select(
        a_agebase, maristat, educ, a_livingsit, a_religion,
        a_domicile, income, d_st_type, d_stroke_ct, d_stroke_loc, bmi,
        barthels_index, vas) %>% 
    tbl_uvregression(
        y = vas, 
        method = lm,
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    modify_header(
        update = list(estimate ~ "**Estimate**", label ~ "**Variable**")) %>%
    gtsummary::bold_labels() %>% 
    gtsummary::add_global_p() %>% 
    gtsummary::bold_p()

table_vas_adj <- 
    df_paper_02 %>%
    filter(!is.na(vas) & a_gender == "Male") %>% 
    select(
        vas, a_agebase, a_domicile, d_stroke_ct, income,
        barthels_index) %>% 
    lm(vas ~ ., data = .) %>%
    tbl_regression(
        pvalue_fun = function(x) style_pvalue(x, digits = 3)) %>% 
    bold_labels() %>% 
    bold_p() 

tbl_merge(
    list(table_vas_crude, table_vas_adj),
    tab_spanner = c("**Univariate**", "**Multivariate**")) %>%    
    modify_caption(
        caption = "**Table 4a**:Univartiate and multivariate linear 
        regression for quality of life of study participants (Males)") 
Table 4a:Univartiate and multivariate linear regression for quality of life of study participants (Males)
Variable
Univariate
Multivariate
N Estimate 95% CI p-value Beta 95% CI p-value
Age in years 280 -0.30 -0.53, -0.06 0.014 -0.14 -0.40, 0.12 0.284
Marital Status 280

0.381


    Currently Married




    Previously Married
-0.12 -8.7, 8.5



    Never Married
-8.8 -21, 3.7



Educational Status 280

0.688


    None




    Primary
-0.56 -15, 14



    Secondary
3.2 -11, 18



    Tertiary
2.5 -12, 17



Living Status 280

0.177


    Lives Alone




    Lives With Spouse and Children
-7.7 -19, 4.1



    Lives With Spouse
-16 -32, -0.86



    Lives With Extended Family
-9.2 -23, 4.9



    Lives With Children
-16 -31, -0.13



Religion 280

0.740


    Christianity




    Islam
-3.1 -12, 5.9



    Other
6.0 -26, 38



Domicile 280

0.004


    Rural


    Semi-Urban
20 8.2, 32
19 7.6, 31 0.001
    Urban
16 3.8, 27
17 5.8, 28 0.003
Income in GHC 279

0.002


    0-100


    101-250
11 4.2, 18
8.7 1.6, 16 0.017
    251-500
13 5.4, 20
8.4 0.66, 16 0.034
    >500
7.6 -0.94, 16
2.8 -6.6, 12 0.561
Stroke Type (Choose One) 245

0.052


    Ischemic Stroke




    Intracerebral Hemorrhagic Stroke
5.8 -0.55, 12



    Ischemic With Hemorrhagic Transformation
-11 -27, 4.8



    Untyped Stroke (no CT scan available)
-17 -43, 8.4



Stroke Subtype ( with results of Brain CT scan) 237

0.003


    Ischaemic


    Haemorrhage infarct
-9.9 -23, 2.9
-8.0 -20, 4.1 0.194
    Haemorrhagic
9.7 2.7, 17
3.3 -3.8, 10 0.360
    Ischaemic and Haemorrhagic
-11 -26, 3.4
-11 -24, 2.9 0.123
Stroke Location 207

0.328


    Anterior Circulation




    Posterior Circulation
-3.3 -9.9, 3.3



Body Mass Index 273 -0.23 -0.81, 0.35 0.433


Barthels Index 268 0.28 0.18, 0.38 <0.001 0.20 0.09, 0.32 <0.001
Abbreviation: CI = Confidence Interval

Table 4b - Linear regression for Females

Show the code
table_vas_crude <- 
    df_paper_02 %>%
    filter(!is.na(vas) & a_gender == "Female") %>% 
    select(
        a_agebase, maristat, educ, a_livingsit, a_religion,
        a_domicile, income, d_st_type, d_stroke_ct, d_stroke_loc, bmi,
        barthels_index, vas) %>% 
    tbl_uvregression(
        y = vas, 
        method = lm,
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    modify_header(
        update = list(estimate ~ "**Estimate**", label ~ "**Variable**")) %>%
    gtsummary::bold_labels() %>% 
    gtsummary::add_global_p() %>% 
    gtsummary::bold_p()

table_vas_adj <- 
    df_paper_02 %>%
    filter(!is.na(vas) & a_gender == "Female") %>% 
    select(
        vas, a_agebase, a_domicile, d_st_type, d_stroke_ct, income,
        barthels_index,  d_stroke_loc, maristat) %>% 
    lm(vas ~ ., data = .) %>%
    tbl_regression(
        pvalue_fun = function(x) style_pvalue(x, digits = 3),
        label = d_st_type ~ "Stroke Type (Choose One)") %>% 
    bold_labels() %>% 
    bold_p() 

tbl_merge(
    list(table_vas_crude, table_vas_adj),
    tab_spanner = c("**Univariate**", "**Multivariate**")) %>%    
    modify_caption(
        caption = "**Table 4a**:Univartiate and multivariate linear 
        regression for quality of life of study participants (Females)") 
Table 4a:Univartiate and multivariate linear regression for quality of life of study participants (Females)
Variable
Univariate
Multivariate
N Estimate 95% CI p-value Beta 95% CI p-value
Age in years 217 -0.26 -0.52, -0.01 0.040 -0.05 -0.34, 0.25 0.760
Marital Status 217

0.034


    Currently Married


    Previously Married
-7.9 -14, -1.9
-10 -17, -3.0 0.005
    Never Married
-1.8 -17, 13
0.54 -16, 17 0.949
Educational Status 217

0.195


    None




    Primary
6.6 -1.6, 15



    Secondary
8.4 -1.0, 18



    Tertiary
12 -0.55, 25



Living Status 217

0.063


    Lives Alone




    Lives With Spouse and Children
-0.18 -13, 13



    Lives With Spouse
-3.8 -21, 13



    Lives With Extended Family
-7.7 -21, 6.0



    Lives With Children
-10 -23, 2.8



Religion 217

0.331


    Christianity




    Islam
-6.5 -17, 3.7



    Other
-18 -62, 25



Domicile 217

0.034


    Rural


    Semi-Urban
1.1 -11, 13
-4.9 -19, 9.0 0.483
    Urban
8.8 -2.3, 20
0.77 -12, 14 0.908
Income in GHC 214

0.001


    0-100


    101-250
11 4.0, 18
7.3 -1.1, 16 0.089
    251-500
8.0 0.16, 16
10 0.40, 20 0.042
    >500
-6.3 -16, 3.8
-2.8 -15, 9.4 0.648
Stroke Type (Choose One) 187

0.014


    Ischemic Stroke


    Intracerebral Hemorrhagic Stroke
6.1 -2.2, 14
-25 -65, 16 0.226
    Ischemic With Hemorrhagic Transformation
-30 -60, 0.42
12 -51, 74 0.716
    Untyped Stroke (no CT scan available)
-32 -62, -2.1



Stroke Subtype ( with results of Brain CT scan) 181

0.013


    Ischaemic


    Haemorrhage infarct
-4.0 -28, 20
13 -36, 62 0.610
    Haemorrhagic
8.3 -0.28, 17
26 -14, 66 0.203
    Ischaemic and Haemorrhagic
-39 -69, -9.6
-45 -119, 29 0.234
Stroke Location 159

0.521


    Anterior Circulation


    Posterior Circulation
2.8 -5.8, 11
7.0 -1.3, 15 0.099
Body Mass Index 205 0.65 0.16, 1.1 0.010


Barthels Index 214 0.23 0.14, 0.33 <0.001 0.17 0.05, 0.30 0.007
Abbreviation: CI = Confidence Interval