Chapter 5 ALLBUS

5.1 Analysis

The original publication has three tables where ALLBUS-2014 is used:

  1. Table 15 (Appendix): Descriptive statistics of items and dimensions of the short BSJO scale (ALLBUS-2014 panel).
  2. Table 8 (Article): Factor structure of the justice principles on the basis of the short version of the BSJO scale
  3. Table A6 (Supplementary materials): Reference values of the short BSJO scale by socio-demographic characteristics

The following analysis are focused on the first two tables (Table 15 and Table 8), because they contain the main resutls regarding this data source and the table from supplementary materials should not matter as long as factor loadings in Table 8 are correct.

5.1.1 Table 15

The descriptive statistics of the eight items displayed in Table 15 of the original article are reproduced from the article’s website in Table 5.1

5.1.1.1 Original Table 15

url <- "https://link.springer.com/article/10.1007/s11205-017-1580-x"
tab.15 <- url %>% 
            read_html() %>% 
            html_nodes(xpath = '//*[@id="Tab15"]/div[2]/table') %>% 
            html_table(fill = T)


tab.15.df <- as.data.frame(tab.15)
tab.15.albs <- tab.15.df[,c(1,2, grep("ALLB", names(tab.15.df)))]
tab.15.header <- c("Dimension", "Item", as.character(tab.15.albs[1,3:6]))
tab.15.albs <- tab.15.albs[2:13,c(1,2:6)]
names(tab.15.albs) <- tab.15.header
knitr::kable(tab.15.albs, "html", row.names = F, caption = "Published ALLBUS descriptive statistics") %>% 
  kable_styling() %>% 
  footnote(general = "M = mean; SD = standard deviation; Min = minimum; Max = maximum; listwise deletion in all cases; all respondents; ALLBUS 2014: inverted scale ranging from (1) ‘‘strongly disagree’’ to (5) ‘‘strongly agree,’’ N = 1682")
Table 5.1: Published ALLBUS descriptive statistics
Dimension Item M SD Min Max
Equality C 3.34 1.27 1 5
Equality K 2.41 1.31 1 5
Equality Subscale 2.88 1.07 1 5
Need E 4.66 0.60 1 5
Need J 4.75 0.50 1 5
Need Subscale 4.71 0.44 2.5 5
Equity B 4.59 0.72 1 5
Equity I 3.69 1.14 1 5
Equity Subscale 4.14 0.71 1 5
Entitlement D 1.65 0.90 1 5
Entitlement L 2.34 1.22 1 5
Entitlement Subscale 2.00 0.86 1 5
Note:
M = mean; SD = standard deviation; Min = minimum; Max = maximum; listwise deletion in all cases; all respondents; ALLBUS 2014: inverted scale ranging from (1) ‘‘strongly disagree’’ to (5) ‘‘strongly agree,’’ N = 1682

5.1.1.2 Reproduced Table 15

Using the dataset the same table is reproduced in Table 5.2:

bsjo.albs.sb <- with(bsjo.albs, 
                     data.frame(C, K, CK = (C+K)/2, E, J, EJ = (E+J)/2,
                                B, I, BI = (B+I)/2, D, L, DL = (D+L)/2))

mean.albs <- round(colMeans(bsjo.albs.sb),2)
sd.albs   <- round(apply(bsjo.albs.sb, 2, sd),2)
min.bsjo  <- apply(bsjo.albs.sb, 2, min)
max.bsjo  <- apply(bsjo.albs.sb, 2, max)

tab.15.rep <- data.frame(Dimension = tab.15.albs$Dimension, Item = tab.15.albs$Item, 
                         M = mean.albs, SD = sd.albs, Min = min.bsjo, Max = max.bsjo)
knitr::kable(tab.15.rep, "html", row.names = F,
             caption = 'Reproduced ALLBUS descriptive statistics') %>% 
    kable_styling() %>% 
    footnote(general = paste0("M = mean; SD = standard deviation; Min = minimum; Max = maximum; listwise deletion in all cases; all respondents; ALLBUS 2014: inverted scale ranging from (1) ‘‘strongly disagree’’ to (5) ‘‘strongly agree,’’ N =", nrow(bsjo.albs)))
Table 5.2: Reproduced ALLBUS descriptive statistics
Dimension Item M SD Min Max
Equality C 3.34 1.27 1.0 5
Equality K 2.41 1.31 1.0 5
Equality Subscale 2.88 1.07 1.0 5
Need E 4.66 0.60 1.0 5
Need J 4.75 0.50 1.0 5
Need Subscale 4.71 0.44 2.5 5
Equity B 4.59 0.72 1.0 5
Equity I 3.69 1.14 1.0 5
Equity Subscale 4.14 0.71 1.0 5
Entitlement D 1.65 0.90 1.0 5
Entitlement L 2.34 1.22 1.0 5
Entitlement Subscale 2.00 0.86 1.0 5
Note:
M = mean; SD = standard deviation; Min = minimum; Max = maximum; listwise deletion in all cases; all respondents; ALLBUS 2014: inverted scale ranging from (1) ‘‘strongly disagree’’ to (5) ‘‘strongly agree,’’ N =1682

5.1.1.3 Checks

The number of observations in both analysis are equal (n = 1682). Then we check if means and standard deviations from both tables are equal.

identical(as.numeric(tab.15.albs$M), tab.15.rep$M)
## [1] TRUE
identical(as.numeric(tab.15.albs$SD), tab.15.rep$SD)
## [1] TRUE

5.1.2 Table 8

In Table 8 of the original article the factor loadings from the principal component analysis (PCA) with ALLBUS-2014 are displayed. The sample for this analysis was reduced to full-time and part-time employees (n = 1036), as described in the footnote of the original table.

5.1.2.1 Original Table 8

Given that Table 8 can only be directly downloaded while having access to the full article, the original table is reproduced in a comma separated values file (tab8_original.csv), imported and displayed in Table 5.3

tab8 <- read.csv2(paste0(data_path, "tab8_original.csv"))
knitr::kable(tab8, "html", row.names = F, caption = "Published ALLBUS PCA results") %>% 
  kable_styling() %>% 
  footnote(general = "Factor loadings of the principal component analysis; rotation method: varimax; eigenvalues: at least 0.96; total explained variance: 66.2 percent; data: ALLBUS 2014; full-time and part-time employees; listwise deletion; N = 1036")
Table 5.3: Published ALLBUS PCA results
Item Equality Need Equity Entitlement Uniqueness
C 0.698 0.230 0.009 -0.012 0.460
K 0.821 0.017 0.076 0.041 0.318
E 0.089 0.790 -0.172 -0.066 0.334
J 0.031 0.752 0.125 -0.053 0.415
B -0.474 0.312 0.407 0.146 0.492
I 0.049 -0.049 0.932 0.033 0.126
D 0.274 -0.082 0.048 0.809 0.262
L -0.322 -0.015 0.030 0.770 0.302
Note:
Factor loadings of the principal component analysis; rotation method: varimax; eigenvalues: at least 0.96; total explained variance: 66.2 percent; data: ALLBUS 2014; full-time and part-time employees; listwise deletion; N = 1036

5.1.2.2 Reproduced Table 8

The same table is reproduced directly from the dataset in Table 5.4.

bsjo.albs.rd <- albs[albs$v103 <= 3, ]
bsjo.albs.rd <- with(bsjo.albs.rd, data.frame(C = v218, K = v223, E = v220, J = v222,
                        B = v217, I = v221, D = v219, L = v224))
bsjo.albs.rd <- sapply(bsjo.albs.rd, function(x) ifelse(x >= 1 & x <= 5, x, NA))
bsjo.albs.rd <- as.data.frame((na.omit(bsjo.albs.rd)-6)*-1)

pca.albs <- principal(bsjo.albs.rd, rotate="varimax", nfactors=4, 
                                normalize=FALSE,eps=1e-14)
pca.albs <- fa.organize(pca.albs, c(1,2,4,3))

tab8.rep <- round(unclass(pca.albs$loadings),3)
tab8.rep <- cbind(tab8.rep, as.numeric(1-round(pca.albs$communality,3)))
colnames(tab8.rep) <- c("Factor 1", "Factor 2", "Factor 4", "Factor 3", "Factor 1")
knitr::kable(tab8.rep, "html", align = "r", caption = "Reproduced ALLBUS PCA results") %>% 
    kable_styling() %>% 
    add_header_above(header = c("Item", as.character(unique(tab.15.rep$Dimension)), "Uniqueness"),
                     align = "r") %>% 
   footnote(general = paste0("Factor loadings of the principal component analysis; rotation method: varimax; eigenvalues: at least 0.96; total explained variance: ", 100*round(sum(pca.albs$Vaccounted[2,]),3), " percent; data: ALLBUS 2014; full-time and part-time employees; listwise deletion; N =", 
                             nrow(bsjo.albs.rd)))
Table 5.4: Reproduced ALLBUS PCA results
Item
Equality
Need
Equity
Entitlement
Uniqueness
Factor 1 Factor 2 Factor 4 Factor 3 Factor 1
C 0.698 0.230 0.009 -0.012 0.460
K 0.821 0.017 0.076 0.041 0.318
E 0.089 0.790 -0.172 -0.066 0.334
J 0.031 0.752 0.125 -0.053 0.415
B -0.474 0.312 0.407 0.146 0.492
I 0.049 -0.049 0.932 0.033 0.126
D 0.274 -0.082 0.048 0.809 0.262
L -0.322 -0.015 0.030 0.770 0.302
Note:
Factor loadings of the principal component analysis; rotation method: varimax; eigenvalues: at least 0.96; total explained variance: 66.1 percent; data: ALLBUS 2014; full-time and part-time employees; listwise deletion; N =1036

5.1.2.3 Checks

The number of observations in both analysis are equal (n = 1036). Then we check if factor loadings in both tables are equal

tab8.ori <- as.matrix(tab8[,2:6])
identical(as.numeric(tab8.ori[,1]), as.numeric(tab8.rep[,1])) # Equality
## [1] TRUE
identical(as.numeric(tab8.ori[,2]), as.numeric(tab8.rep[,2])) # Need
## [1] TRUE
identical(as.numeric(tab8.ori[,3]), as.numeric(tab8.rep[,3])) # Equity
## [1] TRUE
identical(as.numeric(tab8.ori[,4]), as.numeric(tab8.rep[,4])) # Entitlement
## [1] TRUE

Despite the correspondence of these elements, it can be seen in the footnotes of both tables that there is a very small difference in the cumulative variance in the four factors. The reproduction of the PCA results is 66.1 per cent, while the original analysis reports 66.2.

5.2 Conclusion

This reproduction analysis shows that results from the original publication with ALLBUS-2014 can be exactly reproduced, with a minor difference of 0.1 percentage points in cumulative variance explained by the four factors in PCA displayed in Table 8.