Chapter 6 Dimensionality of the BSJO

This section aims to examine the dimensionality of the BSJO scale by adding analyses not presented in the original publication of two available data sources: SOEP-IS 2012 and ALLBUS 2014. The rationale for these analyses is to analyze the performance of the scale in terms of the theoretical grounding supporting it upon four dimensions: equality, need, equity and entitlement. I first present the bivariate distribution of the full scale (12 items) and short scale (8 items) and then reassess the suggested dimensions to extract from these items from a statistical point of view. Based on the results, I also present exploratory factor analysis (EFA) solutions for three available cases: SOEP-IS 2012 full scale, SOEP-IS 2012 short scale and ALLBUS 2014 short scale.

6.1 Bivariate distribution

As was shown in Chapter 2 the developed BSJO scale has a short version of eight items. Additionally, it has a longer version of twelve items that adds one for each of the four dimensions (Table 6.1).

knitr::kable(items, row.names = F, caption = "Full BSJO scale")
Table 6.1: Full BSJO scale
Justice principle Item Item text
Equality (Gleichheit) C Gerecht ist, wenn alle die gleichen Lebensbedingungen haben
K Es ist gerecht, wenn Einkommen und Vermögen in unserer Gesellschaft an alle Personen gleich verteilt werden
G Eine Gesellschaft ist gerecht, wenn die Einkommensunterschiede zwischen den Menschen gering sind
Need (Bedarf) E Eine Gesellschaft ist gerecht, wenn sie sich um die Schwachen und Hilfsbedürftigen kümmert
J Es ist gerecht, wenn Personen, die Kinder oder pflegebedürftige Angehörige zu versorgen haben, besondere Unterstützung und Vergünstigungen erhalten
A Eine Gesellschaft ist gerecht, wenn jede Person ausreichend Essen, Wohnraum, Kleidung sowie Zugang zu Bildung und medizinischer Versorgung hat
Equity (Leistung) B Es ist gerecht, wenn Personen, die hart arbeiten, mehr verdienen als andere
I Gerecht ist, wenn jede Person nur das bekommt, was sie sich durch eigene Anstrengungen erarbeitet hat
H Eine Gesellschaft ist gerecht, wenn Unterschiede in Einkommen und Vermögen die Leistungsunterschiede zwischen Menschen widerspiegeln
Entitlement (Anrecht) D Es ist gerecht, wenn Personen, die aus angesehenen Familien stammen, dadurch Vorteile im Leben haben
L Es ist gerecht, wenn diejenigen, die in einer Gesellschaft oben stehen, bessere Lebensbedingungen haben als diejenigen, die unten stehen
F Es ist gerecht, wenn Personen, die es im Laufe ihres Lebens zu Ansehen und Wohlstand gebracht haben, auch im Alter davon profitieren
soep.is.bio <- read_dta(paste0(data_path, "bio.dta"))
soep.is.es <- soep.is.bio %>%
        select(pid, l0879) %>% # Employment status
        right_join(y = soep.is, by = "pid") %>%
        filter(l0879 == 1 | l0879 == 2)


bsjo.f.soep <- data.frame(C = soep.is.es$sim0403, K = soep.is.es$sim0411,
                          G = soep.is.es$sim0407, E = soep.is.es$sim0405,
                          J = soep.is.es$sim0410, A = soep.is.es$sim0401,
                          B = soep.is.es$sim0402, I = soep.is.es$sim0409,
                          H = soep.is.es$sim0408, D = soep.is.es$sim0404,
                          L = soep.is.es$sim0412, F = soep.is.es$sim0406)
bsjo.f.soep <- sapply(bsjo.f.soep, function(x) ifelse(x >= 1 & x <= 7, x, NA))
bsjo.f.soep <- as.data.frame((na.omit(bsjo.f.soep)))
cors.soep <- round(polychoric(bsjo.soep.rd)$rho,2)
cors.soep[upper.tri(cors.soep, diag = T)] <- NA

In Table 6.2 the polychoric correlations between the eight items of the short scale are displayed. In general, correlations are rather low and in some cases they are higher between different dimensions. The dimension of equity highlights in this sense. While items B and I measuring this dimension have a correlation of 0.24, item B has a higher correlations with three items from different dimensions: with item K from the equality dimension (-0.28) and from the need dimension with items E (0.34) and J (0.3). Also, items C and K measuring the dimension of equality have a correlation of 0.31, while item K shows a similar association (0.28) with item D (measuring entitlement) and the stated correlation between B and K.

options(knitr.kable.NA = '')
knitr::kable(cors.soep[1:8,1:8],
             "html", row.names = T, align = "r",
             caption = "Polychoric correlations short BSJO scale") %>%
        kable_styling("striped", "bordered") %>%
        add_header_above(c(" ", "Equality" = 2, "Need" = 2, "Equity" = 2, "Entitlement" = 2)) %>%
        footnote(general = paste0("SOEP-IS 2012,  full-time and part-time employees; listwise deletion, N = ", nrow(bsjo.soep.rd)))
Table 6.2: Polychoric correlations short BSJO scale
Equality
Need
Equity
Entitlement
C K E J B I D L
C
K 0.31
E 0.24 -0.02
J 0.16 -0.08 0.49
B 0.06 -0.28 0.34 0.30
I 0.14 -0.03 0.14 0.16 0.24
D 0.04 0.28 -0.26 -0.25 -0.19 -0.05
L -0.24 0.08 -0.23 -0.21 0.01 -0.01 0.36
Note:
SOEP-IS 2012, full-time and part-time employees; listwise deletion, N = 742
cors.soep.f <- round(polychoric(bsjo.f.soep)$rho,2)
## Warning in matpLower(x, nvar, gminx, gmaxx, gminy, gmaxy): 59 cells were
## adjusted for 0 values using the correction for continuity. Examine your
## data carefully.
cors.soep.f[upper.tri(cors.soep.f, diag = T)] <- NA

The correlations of the full scale are displayed in Table 6.3. The general pattern is similar, although in some cases within dimensions the highest correlations are between some item and one of the items suggested to be left-out in the short version. For example, in the equality dimension the highest correlation is between items G and K 0.37 while the short scale chooses items C and K with a correlation of 0.31.

options(knitr.kable.NA = '')
knitr::kable(cors.soep.f[1:12,1:12],
             "html", row.names = T, align = "r",
             caption = "Polychoric correlations full BSJO scale") %>%
        kable_styling("striped", "bordered") %>%
        add_header_above(c(" ", "Equality" = 3, "Need" = 3, "Equity" = 3, "Entitlement" = 3)) %>%
        footnote(general = paste0("SOEP-IS 2012,  full-time and part-time employees; listwise deletion, N = ", nrow(bsjo.f.soep)))
Table 6.3: Polychoric correlations full BSJO scale
Equality
Need
Equity
Entitlement
C K G E J A B I H D L F
C
K 0.31
G 0.35 0.37
E 0.24 -0.03 0.14
J 0.17 -0.09 0.10 0.49
A 0.25 -0.05 0.12 0.49 0.35
B 0.07 -0.26 0.03 0.35 0.32 0.40
I 0.13 -0.02 0.14 0.13 0.16 0.18 0.25
H -0.11 -0.18 -0.06 0.16 0.15 0.12 0.30 0.13
D 0.03 0.27 0.03 -0.26 -0.26 -0.25 -0.17 -0.05 -0.04
L -0.25 0.07 -0.14 -0.23 -0.21 -0.18 0.02 -0.02 0.12 0.36
F 0.03 -0.20 -0.01 0.31 0.29 0.26 0.46 0.22 0.22 -0.09 0.04
Note:
SOEP-IS 2012, full-time and part-time employees; listwise deletion, N = 727

As shown in Chapter 4, this decision is probably based on the principal components analysis (see Table 4.3). In the spirit of understanding the rationale originally followed for deciding the number of dimensions in the data, I use two common techniques for assessing the number of factors when exploring the factorial structure: parallel analysis and very simple structure analysis (Brown 2006; Ruscio and Roche 2012). These analyses are conducted in SOEP-IS considering the full and short scale, as well as in ALLBUS. As it can be seen in Table 6.4, there is no unique number of dimensions suggested by these results. Although this is not uncommon, there is a strong tendency toward a three-dimensions structure. In the section below, I present EFA solutions for three and four factors.

set.seed(101007) # For reproduction of parallel analysis

nfact.soep.f <- fa.parallel(bsjo.f.soep, fm = 'minres', fa = 'both', cor = "poly")
nfact.soep <- fa.parallel(bsjo.soep.rd, fm = 'minres', fa = 'both', cor = "poly")
nfact.albs <- fa.parallel(bsjo.albs.rd, fm = 'minres', fa = 'both', cor = "poly")

vss.soep.f <- VSS(bsjo.f.soep, cor = "poly", fm = "minres")
vss.soep <- VSS(bsjo.soep.rd, cor = "poly", fm = "minres")
vss.albs <- VSS(bsjo.albs.rd, cor = "poly", fm = "minres")
nfact.vss <- function(x){which(max(x) == x)}

nfact.tab <- matrix(c(nfact.soep.f$nfact, nfact.soep$nfact, nfact.albs$nfact,
                       nfact.soep.f$ncomp, nfact.soep$ncomp, nfact.albs$ncomp,
                       nfact.vss(vss.soep.f$cfit.1), nfact.vss(vss.soep.f$cfit.2),
                       nfact.vss(vss.soep$cfit.1), nfact.vss(vss.soep$cfit.2),
                       nfact.vss(vss.albs$cfit.1), nfact.vss(vss.albs$cfit.2)),
                       byrow = T, ncol = 4)
colnames(nfact.tab) <- c("Number of factors", "Number of components", "VSS 1", "VSS 2")
rownames(nfact.tab) <- c("SOEP-IS full scale", "SOEP-IS short scale", "ALLBUS short scale")
knitr::kable(nfact.tab, align = rep("c", 4),
             caption = "Number of dimensions suggested by parallel analysis and very simple structure") %>% 
        kable_styling() %>% 
        add_header_above(c("Data", "Parallel analysis" = 2, "Very simple structure" = 2)) %>% 
        footnote(general = paste0("Method for all analyses: ", ifelse(nfact.soep.f$Call$fm == "ml", "maximun likelihood", ifelse(nfact.soep.f$Call$fm == "minres", "minimun residual", "other (check code)")), " with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion"))
Table 6.4: Number of dimensions suggested by parallel analysis and very simple structure
Data
Parallel analysis
Very simple structure
Number of factors Number of components VSS 1 VSS 2
SOEP-IS full scale 3 4 4 3
SOEP-IS short scale 3 3 3 3
ALLBUS short scale 3 3 4 5
Note:
Method for all analyses: minimun residual with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion

6.2 Explotary Factor Analysis

Based on the results of parallel analysis and very simple structure, in this section I present EFA solutions for three and four factors for the three cases of BSJO data. Considering a structure of three dimensions would imply mixing some of the theoretical dimensions of the BSJO scale. Despite not a desirable option, it may lead to a reassessment of the instrument as such.

6.2.1 EFA SOEP-IS full scale

efa3.soep.f <- fa(bsjo.f.soep, nfactors = 3, 
                 rotate = "varimax",fm="minres", cor = "poly")
efa3.soep <- fa(bsjo.soep, nfactors = 3, 
                 rotate = "varimax",fm="minres", cor = "poly")
efa3.albs <- fa(bsjo.albs.rd, nfactors = 3, 
                 rotate = "varimax",fm="minres", cor = "poly")
efa4.soep.f <- fa(bsjo.f.soep, nfactors = 4, 
                 rotate = "varimax",fm="minres", cor = "poly")
efa4.soep <- fa(bsjo.soep, nfactors = 4, 
                 rotate = "varimax",fm="minres", cor = "poly")
efa4.albs <- fa(bsjo.albs.rd, nfactors = 4, 
                 rotate = "varimax",fm="minres", cor = "poly")
efas.soep.f <- cbind(efa3.soep.f$loadings[], efa4.soep.f$loadings[])
efas.soep.f <- efas.soep.f[order(efas.soep.f[,1], decreasing = T), ]
efas.soep.f[efas.soep.f <= 0.3] <- NA
knitr::kable(efas.soep.f, digits = 2,
             caption = "EFA solutions for three and four factors with SOEP-IS full scale") %>% 
        kable_styling() %>% 
        add_header_above(c("Item", "3 factor solution" = 3, "4 factor solution" = 4)) %>% 
        footnote(general = paste0("Factorial loadings; Method for all analyses: ", ifelse(nfact.soep.f$Call$fm == "ml", "maximun likelihood", ifelse(nfact.soep.f$Call$fm == "minres", "minimun residual", "other (check code)")), " with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion"))
Table 6.5: EFA solutions for three and four factors with SOEP-IS full scale
Item
3 factor solution
4 factor solution
MR1 MR2 MR3 MR4 MR2 MR1 MR3
B 0.73 0.73
F 0.60 0.55
E 0.52 0.79
A 0.50 0.36 0.44
J 0.46 0.46
H 0.39 0.35
I 0.33 0.38
C 0.60 0.61
L 0.67 0.73
G 0.55 0.58
D 0.58 0.51
K 0.67 0.64
Note:
Factorial loadings; Method for all analyses: minimun residual with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion

6.2.2 EFA SOEP-IS short scale

efas.soep <- cbind(efa3.soep$loadings[], efa4.soep$loadings[])
efas.soep <- efas.soep[order(efas.soep[,1], decreasing = T), ]
efas.soep[efas.soep <= 0.3] <- NA
knitr::kable(efas.soep, digits = 2,
             caption = "EFA solutions for three and four factors with SOEP-IS short scale") %>% 
        kable_styling() %>% 
        add_header_above(c("Item", "3 factor solution" = 3, "4 factor solution" = 4)) %>% 
        footnote(general = paste0("Factorial loadings; Method for all analyses: ", ifelse(nfact.soep.f$Call$fm == "ml", "maximun likelihood", ifelse(nfact.soep.f$Call$fm == "minres", "minimun residual", "other (check code)")), " with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion"))
Table 6.6: EFA solutions for three and four factors with SOEP-IS short scale
Item
3 factor solution
4 factor solution
MR1 MR3 MR2 MR2 MR1 MR3 MR4
J 0.64 0.38 0.46
B 0.62 0.58
E 0.62 0.95
I 0.38 0.51
C 0.63 0.57
L 0.76 0.99
K 0.65 0.71
D 0.57 0.45
Note:
Factorial loadings; Method for all analyses: minimun residual with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion

6.2.3 EFA ALLBUS short scale

efas.albs <- cbind(efa3.albs$loadings[], efa4.albs$loadings[])
efas.albs <- efas.albs[order(efas.albs[,1], decreasing = T), ]
efas.albs[efas.albs <= 0.3] <- NA
knitr::kable(efas.albs, digits = 2,
             caption = "EFA solutions for three and four factors with ALLBUS") %>% 
        kable_styling() %>% 
        add_header_above(c("Item", "3 factor solution" = 3, "4 factor solution" = 4)) %>% 
        footnote(general = paste0("Factorial loadings; Method for all analyses: ", ifelse(nfact.soep.f$Call$fm == "ml", "maximun likelihood", ifelse(nfact.soep.f$Call$fm == "minres", "minimun residual", "other (check code)")), " with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion"))
Table 6.7: EFA solutions for three and four factors with ALLBUS
Item
3 factor solution
4 factor solution
MR2 MR1 MR3 MR1 MR2 MR3 MR4
K 0.79 0.87
C 0.51 0.48
D 0.61 0.40
E 0.70 0.87
J 0.65 0.55
I 0.61
L 0.58 0.96
B 0.33
Note:
Factorial loadings; Method for all analyses: minimun residual with polychoric correlations; rotation method: varimax; full-time and part-time employees; listwise deletion

6.2.4 Conclusion

Considering EFAs with three factors, the loadings show that the Equality and Entitlement dimensions remain practically the same in the three cases. In contrast, the dimensions of Equity and Need tend to mix as it can be seen in Tables 6.5, 6.6 and 6.7. In terms of EFA solutions of four factors, the loading structure that most resemble the proposed dimensionality in the paper is with SOEP-IS short scale (Table 6.6), although item J has a high loading in the factor measuring equity. In the case of SOEP-IS full scale the factor measuring equity displays a high loading of item B (0.73), but the other items are rather low (I = 0.38 and H = 0.35). Items from the dimension of entitlement and need have higher loadings in the equity factor in this case. In ALLBUS there is a factor measuring equity that only has a high loading of item I, but item B has a lesser than 0.3 loading.

In sum, the dimensionality of the scale it is not clear when contrasting the theoretical model with the results from the shown statistical procedures. Possibly, the BSJO scale requires further development or reformulation regarding the equity and need dimensions.