Factor Analysis

Faith survey

Author

Gonzalo Talavera

Published

March 12, 2024

1 Data preparation

1.0.0.1 Simplification of levels

# Collapse levels of q06 for not sure and prefer not to answer
simplified_data <- lapply(list_data, function(country_data) {
    country_data$q06simplified <- fct_collapse(
        country_data$q06, 
        "Not sure / prefer not to answer" = c("not sure", "prefer not to answer"))
    country_data$q06simplified <- fct_recode(
        country_data$q06simplified, 
        "Yes, it matters" = "yes, it matters what my religious leaders believe about the covid-19 vaccine and if they support it",
        "No, it doesn't matter" = "no, it does not matter to me what my religious leaders believe about the covid-19 vaccine")
    country_data$q06simplified <- fct_relevel(
        country_data$q06simplified, 
        "No, it doesn't matter", 
        "Not sure / prefer not to answer",
        "Yes, it matters")
    
    # Collapse levels of q07
    # country_data$q07 <- fct_collapse(
    #     country_data$q07,
    #     "No/not sure" = c("not sure", "no"))
    
    country_data$q04simplified <- fct_collapse(
        country_data$q04,
        "Member of a religious community" = c("religious leader",
                                              "member of religious community"))
        
    # country_data$q05simplified <- fct_collapse(
    #     country_data$q05,
    #     "Other religions" = c(
    #         "sikh",
    #                           "other",
    #                           "jewish",
    #                           "baha'i",
    #                           "hindu",
    #                           "traditional religions",
    #                           "not religious",
    #                           "buddhist"))
    
    # country_data$q05simplified <- fct_relevel(
    #     country_data$q05simplified,
    #     c(
    #     "muslim",
    #     "christian",
    #     "Other religions"))
    
    # country_data$q14simplified <- fct_collapse(
    #     country_data$q14,
    #     "Somehow important / not sure" = c("somehow important", "not sure")
    # )
    
    country_data$q14binary <- fct_collapse(
        country_data$q14,
        "Very / somehow important" = c("very important", "somehow important"),
        "Not at all important / not sure" = c("not sure", "not at all important")
    )
    
        country_data$q15simplified <- fct_collapse(
        country_data$q15,
        "Family/friends/other" = c("family member", "peer/friend", "other"),
    )   
    country_data$q15simplified <- fct_relevel(
        country_data$q15simplified,
        c("religious leader", "health worker"), after = Inf
    )
    
    country_data$q16simplified <- fct_collapse(
        country_data$q16,
        "No/not sure" = c("no", "not sure")
    )   
 
    country_data$q17simplified <- fct_collapse(
        country_data$q17,
        "No/not sure" = c("no", "not sure"),
        "Only some leaders" = c("only some religious leaders support vaccination for children")
    )   
    # country_data$q17simplified <- fct_rev(
    #     country_data$q17simplified
    # )
    
    country_data$q18simplified <- fct_collapse(
        country_data$q18,
        "does not affect/not sure" = c("does not affect decision for child vaccination",
                                       "not sure")
    )   
    
    
    return(country_data)
})

# Wrap levels
wrapped_data <- lapply(simplified_data, function(country_data) {
    levels(country_data$q04) <- str_wrap(levels(country_data$q04), width = 26)
    levels(country_data$q06) <- str_wrap(levels(country_data$q06), width = 20)
    return(country_data)
})

#bind rows in wrapped data adding a column for country using each df name
all_data <- bind_rows(wrapped_data) %>%
    mutate(country = rep(names(wrapped_data), sapply(wrapped_data, nrow))) |> 
    mutate(country = factor(country))

Data subset for analysis

Selecting the variables to be used in the regression analysis, and encoding them as numeric. Country not included.

# Factor Analysis data
fa_data <- tibble(
    # Outcome vars
    has_covidVax = case_when(                                           # q08
        all_data$q08 == "yes" ~ 1,
        all_data$q08 == "no" ~ 0,
        TRUE ~ NA_integer_
        ),
    continued_regVax = case_when(                                        # q16
        all_data$q16simplified == "yes" ~ 1,
        all_data$q16simplified == "No/not sure" ~ 0,
        TRUE ~ NA_integer_
        ),
    is_rfp = case_when(                                         # contact_type
        all_data$contact_type == "Religions For Peace" ~ 1,
        all_data$contact_type == "RDD / 3-2-1" ~ 0,
        TRUE ~ NA_integer_
    ),
    is_member_or_leader = case_when(                                    # q04
        all_data$q04 == "member of religious\ncommunity" ~ 1,
        all_data$q04 == "religious leader" ~ 1,
        all_data$q04 == "not part of any religious\ncommunity" ~0,
        TRUE ~ NA_integer_
    ),
    # Indep vars
    age_group = as.integer(all_data$q01),                               # q01
    is_female = case_when(                                              # q02
        all_data$q02 == "female" ~ 1,
        all_data$q02 == "male" ~ 0,
        TRUE ~ NA_integer_  # Dropping gender = "prefer not to answer"
        ),
    is_rural = case_when(                                               # q03
        all_data$q03 == "rural" ~ 1,
        all_data$q03 == "urban" ~ 0,
        TRUE ~ NA_integer_
        ),
    leaders_endorse_covidVax = case_when(                               # q07
        all_data$q07 == "yes" ~ 2,
        all_data$q07 == "not sure" ~ 1,
        all_data$q07 == "no" ~ 0,
        TRUE ~ NA_integer_
        ),
    would_receive_covidVax = case_when(                                 # q09
        all_data$q09 == "yes" ~ 2,
        all_data$q09 == "not sure" ~ 1,
        all_data$q09 == "no" ~ 0,
        TRUE ~ NA_integer_
        ),
    top_reason_noVax_religious = case_when(                           # q10
        all_data$q10 %in% c(
            "i believe god/allah/adonai/gods and goddesses/higher power will protect me from covid-19",
            "goes against my religious belief") ~ 1,
        is.na(all_data$q10) ~ NA_integer_,
        TRUE ~ 0
            ),
    top_reason_noVax_riskIsLow = case_when(                             # q10
        all_data$q10 %in% c(
            "i do not feel at risk of catching covid-19",
            "it's not that serious. if i catch covid-19 i can recover without vaccine") ~ 1,
        is.na(all_data$q10) ~ NA_integer_,
        TRUE ~ 0
        ),
    top_reason_noVax_vaxIsBad = case_when(                              # q10
        all_data$q10 %in% c(
            "i am afraid of the potential side effects of the covid-19 vaccine",
            "i am not confident that the vaccine will protect me") ~ 1,
        is.na(all_data$q10) ~ NA_integer_,
        TRUE ~ 0
        ),
    covidVaxInfluencer_religiousLeader = case_when(                    # q11
        all_data$q11 == "religious leader" ~ 1,
        is.na(all_data$q11) ~ NA_integer_,
        TRUE ~ 0
        ),
    covidVaxInfluencer_healthWorker = case_when(                       # q11
        all_data$q11 == "health worker" ~ 1,
        is.na(all_data$q11) ~ NA_integer_,
        TRUE ~ 0
        ),
    covidFactorInDecision_religious = case_when(                        # q12
        all_data$q12 %in% c(
            "seeing religious leaders lead by example through taking the vaccine publicly",
            "public statements by influential persons") ~ 1,
        is.na(all_data$q12) ~ NA_integer_,
        TRUE ~ 0
        ),
    has_children_under_5 = case_when(                                   # q13
        all_data$q13 == "yes" ~ 1,
        all_data$q13 == "no" ~ 0,
        TRUE ~ NA_integer_
        ),
    regVax_importance =  as.integer(                                   # q14
        fct_relevel(all_data$q14, "not at all important", "not sure", "somehow important", "very important")
        ),
    regVaxInfluencer_religiousLeader = case_when(                       # q15
        all_data$q15simplified == "religious leader" ~ 1,
        is.na(all_data$q15simplified) ~ NA_integer_,
        TRUE ~ 0
        ),
    regVaxInfluencer_healthWorker = case_when(                          # q15
        all_data$q15simplified == "health worker" ~ 1,
        is.na(all_data$q15simplified) ~ NA_integer_,
        TRUE ~ 0
        ),
    leaders_endorse_regVax = as.integer(                                # q17
        all_data$q17
        ),
    religious_belief_encourages_regVax = case_when(                      # q18
        all_data$q18 == "encourages child vaccination" ~ 1,
        is.na(all_data$q18) ~ NA_integer_,
        TRUE ~ 0
        )
    ) 
head(fa_data)
# A tibble: 6 × 21
  has_covidVax continued_regVax is_rfp is_member_or_leader age_group is_female
         <dbl>            <dbl>  <dbl>               <dbl>     <int>     <dbl>
1            1               NA      0                   0         4         1
2            1                1      0                   1         3         1
3            1               NA      0                   0         4         0
4            1                1      0                   1         4         0
5            1               NA      0                   1         4         0
6            1                1      0                   1         4         0
# ℹ 15 more variables: is_rural <dbl>, leaders_endorse_covidVax <dbl>,
#   would_receive_covidVax <dbl>, top_reason_noVax_religious <dbl>,
#   top_reason_noVax_riskIsLow <dbl>, top_reason_noVax_vaxIsBad <dbl>,
#   covidVaxInfluencer_religiousLeader <dbl>,
#   covidVaxInfluencer_healthWorker <dbl>,
#   covidFactorInDecision_religious <dbl>, has_children_under_5 <dbl>,
#   regVax_importance <int>, regVaxInfluencer_religiousLeader <dbl>, …

1.1 Summarize data

# Use describe() function from the psych package
summary_df <- psych::describe(fa_data)

# Selecting only mean, sd, range, and missing
summary_df[, c("n", "mean", "sd", "min", "max","range")]
                                       n mean   sd min max range
has_covidVax                       19846 0.76 0.43   0   1     1
continued_regVax                    9677 0.76 0.43   0   1     1
is_rfp                             19847 0.28 0.45   0   1     1
is_member_or_leader                19846 0.64 0.48   0   1     1
age_group                          19846 2.32 1.10   1   4     3
is_female                          18929 0.41 0.49   0   1     1
is_rural                           19846 0.46 0.50   0   1     1
leaders_endorse_covidVax           19846 1.50 0.73   0   2     2
would_receive_covidVax              4822 1.01 0.86   0   2     2
top_reason_noVax_religious          4816 0.14 0.35   0   1     1
top_reason_noVax_riskIsLow          4816 0.40 0.49   0   1     1
top_reason_noVax_vaxIsBad           4816 0.34 0.47   0   1     1
covidVaxInfluencer_religiousLeader 19846 0.08 0.27   0   1     1
covidVaxInfluencer_healthWorker    19846 0.38 0.49   0   1     1
covidFactorInDecision_religious    19846 0.27 0.45   0   1     1
has_children_under_5               19846 0.49 0.50   0   1     1
regVax_importance                   9684 3.26 1.05   1   4     3
regVaxInfluencer_religiousLeader    9679 0.07 0.25   0   1     1
regVaxInfluencer_healthWorker       9679 0.46 0.50   0   1     1
leaders_endorse_regVax              9642 3.19 1.04   1   4     3
religious_belief_encourages_regVax  9671 0.62 0.49   0   1     1

1.2 Creating candidate datasets for factor analysis

regVax_only_df <- fa_data %>%
    select(
        -(would_receive_covidVax:top_reason_noVax_vaxIsBad),
        -has_children_under_5,
        ) %>%
    filter(!is.na(regVax_importance))

covidVax_df <- fa_data %>%
    select(
        -continued_regVax,
        -(regVax_importance:religious_belief_encourages_regVax),
        -(top_reason_noVax_religious:top_reason_noVax_vaxIsBad)
        )

        
# fa_data_no_outcomes <- fa_data %>% 
#     select(
#         # -(1:4), # remove outcome vars
#         # -(age_group, ) # remove demographic vars
#            -has_children_under_5 # removea has_children_under_5 due to std_dev=0
#            ) 
# 
# fa_data_no_demog <- fa_data_no_outcomes %>% # remove demographic vars
#     select(
#         -age_group,
#         -is_rural
#         ) 
# 
# fa_data_no_outcomes_complete <- fa_data_no_outcomes %>% 
#     filter(complete.cases(.))
# 
# fa_data_no_demog_complete <- fa_data_no_demog %>%
#     filter(complete.cases(.))

possible_datasets <- list(
  regVax_only_df = regVax_only_df,
  covidVax_df = covidVax_df
)

1.3 Is data suitable for factor analysis?

Suitability seems low for covid vaccination (all of the above datasets were tested)

kmos <- lapply(possible_datasets, function(df) {
    KMO_vals <- KMO(df)$MSA
}) 

set_names(kmos, names(possible_datasets))
$regVax_only_df
[1] 0.7166562

$covidVax_df
[1] 0.5688766

Choosing regVax_only_df and covidVax_df, as there are no considerable differences among models for covid vaccination (using the whole sample)

regVax <- regVax_only_df
covidVax <- covidVax_df

1.4 Split datastes

Long datasets should be splitted in halves to test consistency

n_regvax <- nrow(regVax)
indices_r <- seq(1:n_regvax)
indices_regvax_A <- sample(indices_r, floor((.5*n_regvax)))
indices_regvax_B <- indices_r[!(indices_r %in% indices_regvax_A)]
regvax_A <- regVax[indices_regvax_A,]
regvax_B <- regVax[indices_regvax_B,]

n_covidvax <- nrow(covidVax)
indices_c <- seq(1:n_covidvax)
indices_covidvax_A <- sample(indices_c, floor((.5*n_covidvax)))
indices_covidvax_B <- indices_c[!(indices_c %in% indices_covidvax_A)]
covidvax_A <- covidVax[indices_covidvax_A,]
covidvax_B <- covidVax[indices_covidvax_B,]

2 Exploratory factor analysis

2.1 Correlation analysis

regVax_cor <- cor(regVax, use = "pairwise.complete.obs")
regvax_A_cor <- cor(regvax_A, use = "pairwise.complete.obs")
regvax_B_cor <- cor(regvax_B, use = "pairwise.complete.obs")

covidVax_cor <- cor(covidVax, use = "pairwise.complete.obs")
covidvax_A_cor <- cor(covidvax_A, use = "pairwise.complete.obs")
covidvax_B_cor <- cor(covidvax_B, use = "pairwise.complete.obs")

2.2 Eigenvalues

scree(regVax_cor, factors = FALSE)

scree(regvax_A_cor, factors = FALSE)

scree(regvax_B_cor, factors = FALSE)

scree(covidVax_cor, factors = FALSE)

scree(covidvax_A_cor, factors = FALSE)

scree(covidvax_B_cor, factors = FALSE)

2.3 Run EFA

2.3.1 Regular vaccination

Factor analysis for all respondents with children under 5, with 6 loading factors and varimax rotation shows that:

  • Factor ML3 seems to be related to the role of leadership and religion (perhaps the role of the religious community) on regular vaccination, as leaders_endorse_regVax and religious_belief_encourages_regVax load into it.

  • ML1 seems to be related to the influence of religious leader on covid vaccination, apparently capturing a specific Covid vaccination factor.

  • Factor ML2 seems to represent the influence of health workers in regular vaccination.

  • The vaccination status loads into ML4.

  • ML5 seems to be formed by the belief in religion as a factor to decide on Covid vaccination, and the importance given to regular vaccination.

  • ML6 is loaded by the membership to a religious community and age group.

Splitting the data is somehwat consistent with these patterns except for ML6 in the second half of the data.

2.3.1.1 regVax model

regVax_model <- fa(regVax, nfactors = 6, rotate = "varimax", fm = "ml")
regVax_model
Factor Analysis using method =  ml
Call: fa(r = regVax, nfactors = 6, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                                     ML3   ML1   ML2   ML4   ML5   ML6    h2
has_covidVax                        0.19  0.06 -0.02  0.69 -0.03  0.07 0.520
continued_regVax                    0.35  0.09  0.00  0.31 -0.07  0.00 0.235
is_rfp                              0.24  0.04  0.10  0.05  0.03  0.38 0.221
is_member_or_leader                 0.30  0.04  0.08 -0.05  0.23  0.15 0.176
age_group                          -0.06 -0.03  0.01  0.00 -0.13  0.35 0.143
is_female                          -0.10 -0.05 -0.02  0.00 -0.01 -0.22 0.060
is_rural                            0.00  0.01  0.01 -0.02 -0.01 -0.25 0.064
leaders_endorse_covidVax            0.37  0.08  0.00  0.25  0.02  0.11 0.218
covidVaxInfluencer_religiousLeader  0.06 -0.14  0.98 -0.01 -0.01  0.08 0.995
covidVaxInfluencer_healthWorker     0.21  0.36 -0.21  0.18  0.15  0.06 0.279
covidFactorInDecision_religious     0.31  0.03  0.06  0.13  0.42  0.06 0.297
regVax_importance                   0.06  0.00  0.04  0.08 -0.43  0.12 0.208
regVaxInfluencer_religiousLeader    0.01 -0.29  0.20 -0.01  0.06  0.07 0.132
regVaxInfluencer_healthWorker       0.15  0.98  0.07  0.05  0.06  0.11 0.995
leaders_endorse_regVax              0.64  0.03  0.00  0.11  0.06  0.03 0.434
religious_belief_encourages_regVax  0.66  0.08  0.00  0.11  0.01  0.06 0.452
                                      u2 com
has_covidVax                       0.480 1.2
continued_regVax                   0.765 2.2
is_rfp                             0.779 1.9
is_member_or_leader                0.824 2.7
age_group                          0.857 1.4
is_female                          0.940 1.6
is_rural                           0.936 1.0
leaders_endorse_covidVax           0.782 2.1
covidVaxInfluencer_religiousLeader 0.005 1.1
covidVaxInfluencer_healthWorker    0.721 3.4
covidFactorInDecision_religious    0.703 2.2
regVax_importance                  0.792 1.3
regVaxInfluencer_religiousLeader   0.868 2.1
regVaxInfluencer_healthWorker      0.005 1.1
leaders_endorse_regVax             0.566 1.1
religious_belief_encourages_regVax 0.548 1.1

                       ML3  ML1  ML2  ML4  ML5  ML6
SS loadings           1.48 1.22 1.08 0.72 0.47 0.46
Proportion Var        0.09 0.08 0.07 0.05 0.03 0.03
Cumulative Var        0.09 0.17 0.24 0.28 0.31 0.34
Proportion Explained  0.27 0.22 0.20 0.13 0.09 0.09
Cumulative Proportion 0.27 0.50 0.70 0.83 0.91 1.00

Mean item complexity =  1.7
Test of the hypothesis that 6 factors are sufficient.

df null model =  120  with the objective function =  1.54 with Chi Square =  14949.27
df of  the model are 39  and the objective function was  0.05 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic n.obs is  9596 with the empirical chi square  678.6  with prob <  1.1e-117 
The total n.obs was  9684  with Likelihood Chi Square =  515.24  with prob <  2e-84 

Tucker Lewis Index of factoring reliability =  0.901
RMSEA index =  0.036  and the 90 % confidence intervals are  0.033 0.038
BIC =  157.29
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                   ML3  ML1  ML2  ML4   ML5
Correlation of (regression) scores with factors   0.80 0.99 0.99 0.72  0.60
Multiple R square of scores with factors          0.64 0.98 0.99 0.52  0.36
Minimum correlation of possible factor scores     0.29 0.96 0.98 0.03 -0.27
                                                    ML6
Correlation of (regression) scores with factors    0.57
Multiple R square of scores with factors           0.33
Minimum correlation of possible factor scores     -0.35
regVax_model$loadings

Loadings:
                                   ML3    ML1    ML2    ML4    ML5    ML6   
has_covidVax                        0.192                0.689              
continued_regVax                    0.353                0.313              
is_rfp                              0.242         0.101                0.383
is_member_or_leader                 0.301                       0.228  0.149
age_group                                                      -0.134  0.347
is_female                          -0.105                             -0.216
is_rural                                                              -0.251
leaders_endorse_covidVax            0.370                0.248         0.113
covidVaxInfluencer_religiousLeader        -0.137  0.983                     
covidVaxInfluencer_healthWorker     0.210  0.362 -0.209  0.184  0.149       
covidFactorInDecision_religious     0.314                0.131  0.416       
regVax_importance                                              -0.428  0.117
regVaxInfluencer_religiousLeader          -0.287  0.202                     
regVaxInfluencer_healthWorker       0.147  0.975                       0.106
leaders_endorse_regVax              0.645                0.112              
religious_belief_encourages_regVax  0.655                0.108              

                 ML3   ML1   ML2   ML4   ML5   ML6
SS loadings    1.480 1.216 1.079 0.725 0.467 0.463
Proportion Var 0.092 0.076 0.067 0.045 0.029 0.029
Cumulative Var 0.092 0.168 0.236 0.281 0.310 0.339

2.3.1.2 Split: regvax_A_model

regvax_A_model <- fa(regvax_A, nfactors = 6, rotate = "varimax", fm = "ml")
regvax_A_model
Factor Analysis using method =  ml
Call: fa(r = regvax_A, nfactors = 6, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                                     ML3   ML1   ML2   ML4   ML6   ML5    h2
has_covidVax                        0.22  0.06  0.00  0.72  0.04 -0.03 0.576
continued_regVax                    0.38  0.08 -0.01  0.27 -0.01 -0.09 0.236
is_rfp                              0.27  0.04  0.11  0.06  0.32  0.07 0.196
is_member_or_leader                 0.30  0.05  0.09 -0.05  0.10  0.23 0.165
age_group                          -0.04 -0.04  0.01  0.02  0.42 -0.12 0.195
is_female                          -0.10 -0.04 -0.03  0.03 -0.26 -0.01 0.082
is_rural                            0.01  0.00  0.01 -0.03 -0.27  0.00 0.072
leaders_endorse_covidVax            0.39  0.08  0.01  0.23  0.15  0.02 0.229
covidVaxInfluencer_religiousLeader  0.08 -0.14  0.98  0.02  0.08 -0.01 0.995
covidVaxInfluencer_healthWorker     0.24  0.36 -0.22  0.15  0.01  0.16 0.282
covidFactorInDecision_religious     0.32  0.02  0.06  0.12  0.02  0.44 0.312
regVax_importance                   0.09  0.00  0.04  0.07  0.09 -0.40 0.182
regVaxInfluencer_religiousLeader    0.02 -0.29  0.20 -0.01  0.04  0.05 0.131
regVaxInfluencer_healthWorker       0.16  0.97  0.08  0.04  0.11  0.06 0.995
leaders_endorse_regVax              0.64  0.02  0.01  0.07 -0.01  0.04 0.412
religious_belief_encourages_regVax  0.67  0.08  0.00  0.08  0.07  0.00 0.463
                                      u2 com
has_covidVax                       0.424 1.2
continued_regVax                   0.764 2.0
is_rfp                             0.804 2.4
is_member_or_leader                0.835 2.5
age_group                          0.805 1.2
is_female                          0.918 1.4
is_rural                           0.928 1.0
leaders_endorse_covidVax           0.771 2.1
covidVaxInfluencer_religiousLeader 0.005 1.1
covidVaxInfluencer_healthWorker    0.718 3.5
covidFactorInDecision_religious    0.688 2.1
regVax_importance                  0.818 1.3
regVaxInfluencer_religiousLeader   0.869 1.9
regVaxInfluencer_healthWorker      0.005 1.1
leaders_endorse_regVax             0.588 1.0
religious_belief_encourages_regVax 0.537 1.1

                       ML3  ML1  ML2  ML4  ML6  ML5
SS loadings           1.57 1.21 1.08 0.71 0.49 0.47
Proportion Var        0.10 0.08 0.07 0.04 0.03 0.03
Cumulative Var        0.10 0.17 0.24 0.29 0.32 0.35
Proportion Explained  0.28 0.22 0.20 0.13 0.09 0.08
Cumulative Proportion 0.28 0.50 0.70 0.83 0.92 1.00

Mean item complexity =  1.7
Test of the hypothesis that 6 factors are sufficient.

df null model =  120  with the objective function =  1.57 with Chi Square =  7583.32
df of  the model are 39  and the objective function was  0.06 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic n.obs is  4799 with the empirical chi square  366.57  with prob <  7.4e-55 
The total n.obs was  4842  with Likelihood Chi Square =  284.89  with prob <  3.9e-39 

Tucker Lewis Index of factoring reliability =  0.899
RMSEA index =  0.036  and the 90 % confidence intervals are  0.032 0.04
BIC =  -46.02
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                   ML3  ML1  ML2  ML4   ML6
Correlation of (regression) scores with factors   0.81 0.99 0.99 0.74  0.59
Multiple R square of scores with factors          0.66 0.98 0.99 0.55  0.35
Minimum correlation of possible factor scores     0.33 0.96 0.97 0.11 -0.30
                                                    ML5
Correlation of (regression) scores with factors    0.61
Multiple R square of scores with factors           0.37
Minimum correlation of possible factor scores     -0.27
regvax_A_model$loadings

Loadings:
                                   ML3    ML1    ML2    ML4    ML6    ML5   
has_covidVax                        0.220                0.722              
continued_regVax                    0.385                0.272              
is_rfp                              0.269         0.107         0.320       
is_member_or_leader                 0.297                              0.232
age_group                                                       0.422 -0.116
is_female                                                      -0.264       
is_rural                                                       -0.266       
leaders_endorse_covidVax            0.386                0.227  0.147       
covidVaxInfluencer_religiousLeader        -0.140  0.981                     
covidVaxInfluencer_healthWorker     0.243  0.356 -0.216  0.148         0.164
covidFactorInDecision_religious     0.317                0.123         0.438
regVax_importance                                                     -0.400
regVaxInfluencer_religiousLeader          -0.290  0.203                     
regVaxInfluencer_healthWorker       0.160  0.973                0.108       
leaders_endorse_regVax              0.636                                   
religious_belief_encourages_regVax  0.667                                   

                 ML3   ML1   ML2   ML4   ML6   ML5
SS loadings    1.566 1.208 1.082 0.711 0.488 0.468
Proportion Var 0.098 0.075 0.068 0.044 0.031 0.029
Cumulative Var 0.098 0.173 0.241 0.285 0.316 0.345

2.3.1.3 Split: regvax_B_model

regvax_B_model <- fa(regvax_B, nfactors = 6, rotate = "varimax", fm = "ml")
regvax_B_model
Factor Analysis using method =  ml
Call: fa(r = regvax_B, nfactors = 6, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                                     ML3   ML1   ML2   ML4   ML5   ML6    h2
has_covidVax                        0.21  0.05 -0.03  0.65  0.07 -0.04 0.478
continued_regVax                    0.34  0.08  0.00  0.32  0.01 -0.06 0.233
is_rfp                              0.23  0.05  0.09  0.02  0.58 -0.06 0.405
is_member_or_leader                 0.31  0.03  0.07 -0.08  0.20  0.20 0.186
age_group                          -0.05 -0.01  0.02  0.01  0.18 -0.16 0.062
is_female                          -0.14 -0.06 -0.03 -0.05 -0.06  0.00 0.029
is_rural                           -0.02  0.00  0.01 -0.02 -0.20 -0.01 0.043
leaders_endorse_covidVax            0.38  0.07 -0.02  0.25  0.02  0.01 0.216
covidVaxInfluencer_religiousLeader  0.07 -0.12  0.99 -0.03  0.05 -0.03 0.995
covidVaxInfluencer_healthWorker     0.20  0.37 -0.20  0.20  0.09  0.12 0.280
covidFactorInDecision_religious     0.33  0.03  0.06  0.12  0.10  0.37 0.276
regVax_importance                   0.05  0.00  0.03  0.07  0.08 -0.49 0.255
regVaxInfluencer_religiousLeader    0.01 -0.27  0.21 -0.01  0.07  0.05 0.128
regVaxInfluencer_healthWorker       0.18  0.98  0.05  0.04  0.04  0.04 0.995
leaders_endorse_regVax              0.66  0.02 -0.01  0.11  0.04  0.07 0.459
religious_belief_encourages_regVax  0.65  0.07 -0.01  0.10  0.03  0.01 0.438
                                      u2 com
has_covidVax                       0.522 1.3
continued_regVax                   0.767 2.2
is_rfp                             0.595 1.4
is_member_or_leader                0.814 2.8
age_group                          0.938 2.2
is_female                          0.971 2.3
is_rural                           0.957 1.1
leaders_endorse_covidVax           0.784 1.8
covidVaxInfluencer_religiousLeader 0.005 1.0
covidVaxInfluencer_healthWorker    0.720 3.3
covidFactorInDecision_religious    0.724 2.4
regVax_importance                  0.745 1.1
regVaxInfluencer_religiousLeader   0.872 2.1
regVaxInfluencer_healthWorker      0.005 1.1
leaders_endorse_regVax             0.541 1.1
religious_belief_encourages_regVax 0.562 1.1

                       ML3  ML1  ML2  ML4  ML5  ML6
SS loadings           1.53 1.21 1.08 0.69 0.50 0.48
Proportion Var        0.10 0.08 0.07 0.04 0.03 0.03
Cumulative Var        0.10 0.17 0.24 0.28 0.31 0.34
Proportion Explained  0.28 0.22 0.20 0.13 0.09 0.09
Cumulative Proportion 0.28 0.50 0.70 0.82 0.91 1.00

Mean item complexity =  1.8
Test of the hypothesis that 6 factors are sufficient.

df null model =  120  with the objective function =  1.55 with Chi Square =  7482.88
df of  the model are 39  and the objective function was  0.05 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic n.obs is  4797 with the empirical chi square  363.94  with prob <  2.4e-54 
The total n.obs was  4842  with Likelihood Chi Square =  255.9  with prob <  1.1e-33 

Tucker Lewis Index of factoring reliability =  0.909
RMSEA index =  0.034  and the 90 % confidence intervals are  0.03 0.038
BIC =  -75.02
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                   ML3  ML1  ML2   ML4   ML5
Correlation of (regression) scores with factors   0.81 0.99 0.99  0.69  0.63
Multiple R square of scores with factors          0.65 0.98 0.99  0.48  0.40
Minimum correlation of possible factor scores     0.30 0.97 0.98 -0.04 -0.20
                                                    ML6
Correlation of (regression) scores with factors    0.61
Multiple R square of scores with factors           0.38
Minimum correlation of possible factor scores     -0.25
regvax_B_model$loadings

Loadings:
                                   ML3    ML1    ML2    ML4    ML5    ML6   
has_covidVax                        0.212                0.649              
continued_regVax                    0.342                0.325              
is_rfp                              0.232                       0.580       
is_member_or_leader                 0.313                       0.196  0.196
age_group                                                       0.184 -0.158
is_female                          -0.136                                   
is_rural                                                       -0.204       
leaders_endorse_covidVax            0.384                0.252              
covidVaxInfluencer_religiousLeader        -0.120  0.986                     
covidVaxInfluencer_healthWorker     0.201  0.366 -0.205  0.203         0.119
covidFactorInDecision_religious     0.328                0.120  0.103  0.373
regVax_importance                                                     -0.490
regVaxInfluencer_religiousLeader          -0.275  0.211                     
regVaxInfluencer_healthWorker       0.176  0.978                            
leaders_endorse_regVax              0.664                0.109              
religious_belief_encourages_regVax  0.649                0.101              

                 ML3   ML1   ML2   ML4   ML5   ML6
SS loadings    1.530 1.209 1.082 0.686 0.497 0.477
Proportion Var 0.096 0.076 0.068 0.043 0.031 0.030
Cumulative Var 0.096 0.171 0.239 0.282 0.313 0.342

2.3.2 Covid vaccination

Factor analysis for the whole sample, related to Covid vaccination, and using 6 factors, varimax rotation and maximum likelihod method, shows that: - Factor ML2 seems to represent the influence of religious leaders on Covid vaccination - Factor ML1 seems to capture a willingness to get Covid vaccination - Factor ML3 apparently captures the influence of confidence in religious leaders - Factor ML5 is apparently representing the membership to a religious community, as belonging or not to RFP, and being a member of a leader of a religious community load into it. - However ML4 is also highly associated to belonging to RFP but not to being a member of a religious community. - ML5 is loaded by the membership to a religious community and age group. - ML6 seems to capture vaccination status.

2.3.2.1 covidVax_model

covidVax_model <- fa(covidVax, nfactors = 6, rotate = "varimax", fm = "ml")
covidVax_model
Factor Analysis using method =  ml
Call: fa(r = covidVax, nfactors = 6, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                                     ML2   ML1   ML3   ML5   ML4   ML6    h2
has_covidVax                       -0.06  0.00  0.10  0.04  0.22  0.45 0.264
is_rfp                              0.04  0.07  0.01  0.47  0.50 -0.06 0.482
is_member_or_leader                 0.03 -0.01  0.08  0.45 -0.04 -0.01 0.209
age_group                           0.04 -0.03  0.01 -0.01  0.29  0.04 0.088
is_female                          -0.03  0.01 -0.04  0.00  0.05 -0.10 0.015
is_rural                            0.01  0.02  0.00  0.00 -0.31  0.03 0.096
leaders_endorse_covidVax           -0.02  0.10  0.93  0.17  0.06  0.28 0.995
would_receive_covidVax             -0.03  0.99  0.08  0.09 -0.04  0.01 0.995
covidVaxInfluencer_religiousLeader  0.98  0.02 -0.02  0.19  0.04  0.07 0.995
covidVaxInfluencer_healthWorker    -0.30  0.12 -0.02  0.22 -0.03  0.28 0.235
covidFactorInDecision_religious     0.04  0.09  0.01  0.36 -0.12  0.21 0.197
has_children_under_5                0.01 -0.02  0.00  0.07 -0.27  0.00 0.077
                                      u2 com
has_covidVax                       0.736 1.6
is_rfp                             0.518 2.1
is_member_or_leader                0.791 1.1
age_group                          0.912 1.1
is_female                          0.985 2.0
is_rural                           0.904 1.0
leaders_endorse_covidVax           0.005 1.3
would_receive_covidVax             0.005 1.0
covidVaxInfluencer_religiousLeader 0.005 1.1
covidVaxInfluencer_healthWorker    0.765 3.2
covidFactorInDecision_religious    0.803 2.1
has_children_under_5               0.923 1.2

                       ML2  ML1  ML3  ML5  ML4  ML6
SS loadings           1.05 1.02 0.90 0.68 0.57 0.43
Proportion Var        0.09 0.08 0.07 0.06 0.05 0.04
Cumulative Var        0.09 0.17 0.25 0.30 0.35 0.39
Proportion Explained  0.23 0.22 0.19 0.15 0.12 0.09
Cumulative Proportion 0.23 0.45 0.64 0.79 0.91 1.00

Mean item complexity =  1.6
Test of the hypothesis that 6 factors are sufficient.

df null model =  66  with the objective function =  0.52 with Chi Square =  10361.88
df of  the model are 9  and the objective function was  0.01 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.03 

The harmonic n.obs is  13138 with the empirical chi square  254.7  with prob <  1e-49 
The total n.obs was  19847  with Likelihood Chi Square =  166.12  with prob <  4e-31 

Tucker Lewis Index of factoring reliability =  0.888
RMSEA index =  0.03  and the 90 % confidence intervals are  0.026 0.034
BIC =  77.06
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   ML2  ML1  ML3   ML5   ML4
Correlation of (regression) scores with factors   0.99 0.99 0.96  0.68  0.66
Multiple R square of scores with factors          0.97 0.99 0.92  0.46  0.44
Minimum correlation of possible factor scores     0.95 0.98 0.85 -0.07 -0.12
                                                    ML6
Correlation of (regression) scores with factors    0.58
Multiple R square of scores with factors           0.34
Minimum correlation of possible factor scores     -0.32
covidVax_model$loadings

Loadings:
                                   ML2    ML1    ML3    ML5    ML4    ML6   
has_covidVax                                                    0.219  0.448
is_rfp                                                   0.473  0.497       
is_member_or_leader                                      0.447              
age_group                                                       0.288       
is_female                                                                   
is_rural                                                       -0.307       
leaders_endorse_covidVax                   0.101  0.934  0.166         0.284
would_receive_covidVax                     0.989                            
covidVaxInfluencer_religiousLeader  0.976                0.191              
covidVaxInfluencer_healthWorker    -0.300  0.124         0.219         0.283
covidFactorInDecision_religious                          0.360 -0.122  0.207
has_children_under_5                                           -0.267       

                 ML2   ML1   ML3   ML5   ML4   ML6
SS loadings    1.053 1.019 0.899 0.680 0.570 0.426
Proportion Var 0.088 0.085 0.075 0.057 0.048 0.036
Cumulative Var 0.088 0.173 0.248 0.304 0.352 0.387

2.3.2.2 Split: covidvax_A_model

covidvax_A_model <- fa(covidvax_A, nfactors = 6, rotate = "varimax", fm = "ml")
covidvax_A_model
Factor Analysis using method =  ml
Call: fa(r = covidvax_A, nfactors = 6, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                                     ML1   ML2   ML5   ML4   ML6   ML3    h2
has_covidVax                       -0.01  0.18  0.07  0.15  0.21  0.18 0.138
is_rfp                              0.09  0.04  0.61  0.01  0.50 -0.33 0.743
is_member_or_leader                -0.02  0.08  0.40 -0.01 -0.09  0.03 0.174
age_group                          -0.04  0.02 -0.01 -0.04  0.32  0.07 0.111
is_female                           0.00 -0.03 -0.02 -0.01  0.00 -0.20 0.041
is_rural                            0.02  0.00  0.00 -0.01 -0.29  0.03 0.084
leaders_endorse_covidVax            0.11  0.97  0.16  0.03  0.05  0.15 0.995
would_receive_covidVax              0.99  0.10  0.07  0.07 -0.06  0.03 0.995
covidVaxInfluencer_religiousLeader  0.01 -0.03  0.29 -0.50  0.05  0.15 0.359
covidVaxInfluencer_healthWorker     0.08  0.02  0.20  0.62 -0.02  0.18 0.467
covidFactorInDecision_religious     0.09  0.03  0.36  0.03 -0.10  0.23 0.198
has_children_under_5               -0.02  0.00  0.07  0.01 -0.26  0.03 0.073
                                      u2 com
has_covidVax                       0.862 4.1
is_rfp                             0.257 2.6
is_member_or_leader                0.826 1.2
age_group                          0.889 1.2
is_female                          0.959 1.1
is_rural                           0.916 1.0
leaders_endorse_covidVax           0.005 1.1
would_receive_covidVax             0.005 1.0
covidVaxInfluencer_religiousLeader 0.641 1.8
covidVaxInfluencer_healthWorker    0.533 1.4
covidFactorInDecision_religious    0.802 2.1
has_children_under_5               0.927 1.2

                       ML1  ML2  ML5  ML4  ML6  ML3
SS loadings           1.01 0.99 0.82 0.67 0.57 0.32
Proportion Var        0.08 0.08 0.07 0.06 0.05 0.03
Cumulative Var        0.08 0.17 0.23 0.29 0.34 0.36
Proportion Explained  0.23 0.23 0.19 0.15 0.13 0.07
Cumulative Proportion 0.23 0.46 0.64 0.80 0.93 1.00

Mean item complexity =  1.7
Test of the hypothesis that 6 factors are sufficient.

df null model =  66  with the objective function =  0.52 with Chi Square =  5160.81
df of  the model are 9  and the objective function was  0.01 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.03 

The harmonic n.obs is  6550 with the empirical chi square  111.54  with prob <  7.1e-20 
The total n.obs was  9923  with Likelihood Chi Square =  76.48  with prob <  8e-13 

Tucker Lewis Index of factoring reliability =  0.903
RMSEA index =  0.027  and the 90 % confidence intervals are  0.022 0.033
BIC =  -6.34
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   ML1  ML2  ML5  ML4   ML6
Correlation of (regression) scores with factors   0.99 0.98 0.77 0.73  0.67
Multiple R square of scores with factors          0.99 0.96 0.59 0.53  0.45
Minimum correlation of possible factor scores     0.97 0.93 0.17 0.06 -0.11
                                                    ML3
Correlation of (regression) scores with factors    0.58
Multiple R square of scores with factors           0.33
Minimum correlation of possible factor scores     -0.33
covidvax_A_model$loadings

Loadings:
                                   ML1    ML2    ML5    ML4    ML6    ML3   
has_covidVax                               0.179         0.147  0.210  0.185
is_rfp                                            0.614         0.497 -0.330
is_member_or_leader                               0.399                     
age_group                                                       0.320       
is_female                                                             -0.199
is_rural                                                       -0.287       
leaders_endorse_covidVax            0.107  0.966  0.155                0.153
would_receive_covidVax              0.985                                   
covidVaxInfluencer_religiousLeader                0.286 -0.502         0.147
covidVaxInfluencer_healthWorker                   0.199  0.622         0.181
covidFactorInDecision_religious                   0.357        -0.101  0.225
has_children_under_5                                           -0.258       

                 ML1   ML2   ML5   ML4   ML6   ML3
SS loadings    1.009 0.986 0.824 0.669 0.569 0.320
Proportion Var 0.084 0.082 0.069 0.056 0.047 0.027
Cumulative Var 0.084 0.166 0.235 0.291 0.338 0.365

2.3.2.3 Split: covidvax_B_model

covidvax_B_model <- fa(covidvax_B, nfactors = 6, rotate = "varimax", fm = "ml")
covidvax_B_model
Factor Analysis using method =  ml
Call: fa(r = covidvax_B, nfactors = 6, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                                     ML2   ML1   ML3   ML4   ML6   ML5    h2
has_covidVax                       -0.04 -0.01  0.18  0.03  0.18  0.60 0.424
is_rfp                              0.04  0.06 -0.03  0.42  0.47  0.02 0.408
is_member_or_leader                 0.03  0.00  0.08  0.45  0.00 -0.05 0.210
age_group                           0.05 -0.02  0.00  0.00  0.29  0.05 0.090
is_female                          -0.02  0.02 -0.07 -0.01  0.03 -0.03 0.007
is_rural                            0.01  0.02  0.02  0.01 -0.34  0.01 0.114
leaders_endorse_covidVax           -0.08  0.14  0.96  0.17  0.09  0.09 0.995
would_receive_covidVax             -0.03  0.99  0.02  0.10 -0.02  0.01 0.995
covidVaxInfluencer_religiousLeader  0.98  0.02  0.06  0.18  0.04  0.00 0.995
covidVaxInfluencer_healthWorker    -0.28  0.12  0.04  0.23 -0.04  0.24 0.209
covidFactorInDecision_religious     0.05  0.08  0.06  0.39 -0.14  0.16 0.212
has_children_under_5                0.02 -0.01  0.02  0.07 -0.27 -0.03 0.079
                                      u2 com
has_covidVax                       0.576 1.4
is_rfp                             0.592 2.0
is_member_or_leader                0.790 1.1
age_group                          0.910 1.1
is_female                          0.993 2.2
is_rural                           0.886 1.0
leaders_endorse_covidVax           0.005 1.2
would_receive_covidVax             0.005 1.0
covidVaxInfluencer_religiousLeader 0.005 1.1
covidVaxInfluencer_healthWorker    0.791 3.4
covidFactorInDecision_religious    0.788 1.9
has_children_under_5               0.921 1.2

                       ML2  ML1  ML3  ML4  ML6  ML5
SS loadings           1.05 1.03 0.98 0.66 0.56 0.46
Proportion Var        0.09 0.09 0.08 0.06 0.05 0.04
Cumulative Var        0.09 0.17 0.25 0.31 0.36 0.39
Proportion Explained  0.22 0.22 0.21 0.14 0.12 0.10
Cumulative Proportion 0.22 0.44 0.65 0.79 0.90 1.00

Mean item complexity =  1.6
Test of the hypothesis that 6 factors are sufficient.

df null model =  66  with the objective function =  0.53 with Chi Square =  5272.93
df of  the model are 9  and the objective function was  0.01 

The root mean square of the residuals (RMSR) is  0.01 
The df corrected root mean square of the residuals is  0.03 

The harmonic n.obs is  6587 with the empirical chi square  125.8  with prob <  8.7e-23 
The total n.obs was  9924  with Likelihood Chi Square =  82.57  with prob <  5e-14 

Tucker Lewis Index of factoring reliability =  0.896
RMSEA index =  0.029  and the 90 % confidence intervals are  0.023 0.035
BIC =  -0.25
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   ML2  ML1  ML3   ML4   ML6
Correlation of (regression) scores with factors   0.99 0.99 0.99  0.67  0.65
Multiple R square of scores with factors          0.98 0.99 0.97  0.45  0.42
Minimum correlation of possible factor scores     0.96 0.98 0.94 -0.11 -0.16
                                                    ML5
Correlation of (regression) scores with factors    0.64
Multiple R square of scores with factors           0.40
Minimum correlation of possible factor scores     -0.19
covidvax_B_model$loadings

Loadings:
                                   ML2    ML1    ML3    ML4    ML6    ML5   
has_covidVax                                      0.181         0.179  0.598
is_rfp                                                   0.421  0.473       
is_member_or_leader                                      0.448              
age_group                                                       0.292       
is_female                                                                   
is_rural                                                       -0.336       
leaders_endorse_covidVax                   0.138  0.962  0.166              
would_receive_covidVax                     0.991         0.104              
covidVaxInfluencer_religiousLeader  0.978                0.185              
covidVaxInfluencer_healthWorker    -0.283  0.124         0.231         0.239
covidFactorInDecision_religious                          0.389 -0.143  0.164
has_children_under_5                                           -0.268       

                 ML2   ML1   ML3   ML4   ML6   ML5
SS loadings    1.052 1.028 0.980 0.662 0.559 0.457
Proportion Var 0.088 0.086 0.082 0.055 0.047 0.038
Cumulative Var 0.088 0.173 0.255 0.310 0.357 0.395

3 Concluding remarks

3.1 Regular vaccination

  • There seems to be a factor related to the role of leadership and religion (perhaps the role of the religious community) on regular vaccination, as leaders_endorse_regVax and religious_belief_encourages_regVax load into it.
  • Another factor seems to be related to the influence of religious leader on covid vaccination, apparently capturing a specific Covid vaccination factor.
  • A third factor seems to represent the influence of health workers in regular vaccination.

To a lesser extent:

  • The vaccination status loads into a fourth factor
  • A fifth factor seems to be formed by the belief in religion as a factor to decide on Covid vaccination, and the importance given to regular vaccination.
  • A sixth factor is loaded by the membership to a religious community and age group.

3.2 COVID-19 vaccination

  • One factor seems to represent the influence of religious leaders on Covid vaccination
  • A second factor seems to capture a willingness to get Covid vaccination
  • A third factor apparently captures the influence of confidence in religious leaders
  • A fourth factor is apparently representing the membership to a religious community, as belonging or not to RFP, and being a member of a leader of a religious community load into it.
  • A fourth factor is also highly associated to belonging to RFP but not to being a member of a religious community.
  • A fifth factor is loaded by the membership to a religious community and age group.
  • A sisxth factor seems to capture vaccination status.

4 References

  • Johnson, R. A., & Wichern, D. W. (2014). Applied multivariate statistical analysis. Pearson Education.
  • Tu, Dong et al. (2010). Using Cluster Analysis in Persona Development.
  • Agresti, A. (2013). Categorical data analysis. John Wiley & Sons.
  • Agresti, A. (2019). An introduction to categorical data analysis. John Wiley & Sons.