################################### PISA 2018 ########################################
# By Matthew Courtney, 
# Produced for 2020 proposed paper extending previous PISA covariate study in conjunction with Dr Mehmet

rm(list=ls())             
setwd("/Users/user/Desktop/Current Projects/Daniel PISA Wellbeing/2018")  
getwd()
dir()

# Student file 1:  INT_SCQ12_DEC03.txt
# School file:     INT_STU12_DEC03.txt
citation("NCmisc")
################################# Enable devtools ####################################
# refer: https://github.com/pbiecek/PISA2009lite/blob/master/loadData.R
library(devtools)
library(SAScii)
library(stringr)
library(dplyr)
library(lme4)
library(haven)
library(misty)
library(lavaan)
library(psych)
library(semTools)

citation("misty")
citation("lavaan")

# check files in WD
dir()
citation("normalr")
# Extract school data
a <- haven::read_sav("CY07_MSU_SCH_QQQ.sav")  
str(a)
a <- as.data.frame(a)
summary(a)
head(a)
str(a)

length(unique(a$CNT))

##############################################################################################
############################################ SCHOOL ##########################################
##############################################################################################

#################### SCHOOLID ##########################
#SCHOOLID <- apply(a, 2, FUN=function(x)substr(a, 25, 31))
#SCHOOLID <- as.numeric(SCHOOLID)

################ Life satisfaction [ST016Q01NA] ###################
attributes(a$SCHLTYPE)
table(a$SCHLTYPE)
unique(a$SCHLTYPE)
a$SCHLTYPE <- car::recode(a$SCHLTYPE, "
            1 = 1;
            2 = 1;
            3 = 2;
            7 = NA;
            8 = NA;
            9 = NA")
table(a$SCHLTYPE)
# 2 = PUB, 1 = PRIV inline with other study

#################### EXCURACT ##########################
attributes(a$CREACTIV)
table(a$CREACTIV)
unique(a$CREACTIV)
a$CREACTIV <- car::recode(a$CREACTIV, "
            5 = NA;
            6 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(a$CREACTIV)
mean(a$CREACTIV, na.rm=TRUE)

#################### SCMATEDU ##########################
attributes(a$EDUSHORT)
summary(a$EDUSHORT)
unique(sort(a$EDUSHORT))
a$EDUSHORT <- car::recode(a$EDUSHORT, "
            95 = NA;
            96 = NA;
            97 = NA;
            98 = NA;
            99 = NA")
summary(a$EDUSHORT)
mean(a$EDUSHORT, na.rm=TRUE)

#################### TCSHORT ##########################
attributes(a$STAFFSHORT)
summary(a$EDUSHORT)
unique(sort(a$EDUSHORT))
a$EDUSHORT <- car::recode(a$EDUSHORT, "
            95 = NA;
            96 = NA;
            97 = NA;
            98 = NA;
            99 = NA")
summary(a$EDUSHORT)
mean(a$EDUSHORT, na.rm=TRUE)

#################### STRATIO ##########################
attributes(a$STRATIO)
summary(a$EDUSHORT)
unique(sort(a$EDUSHORT))
a$STRATIO <- car::recode(a$STRATIO, "
            995 = NA;
            996 = NA;
            997 = NA;
            998 = NA;
            999 = NA")
summary(a$STRATIO)
mean(a$STRATIO, na.rm=TRUE)
# table(a$STRATIO)
# plot(sort(a$STRATIO))
# normalise later.

#################### IRATCOMP ##########################
attributes(a$RATCMP1)
psych::skew(a$RATCMP1) ##### skew of 6.519935, needs to be checked later
summary(a$RATCMP1)
table(sort(a$RATCMP1))
unique(sort(a$RATCMP1))
a$RATCMP1 <- car::recode(a$RATCMP1, "
            995 = NA;
            996 = NA;
            997 = NA;
            998 = NA;
            999 = NA")
summary(a$RATCMP1)

#################### COMPWEB ##########################
attributes(a$RATCMP2)
psych::skew(a$RATCMP2) ##### skew of -2.619738, needs to be checked later
summary(a$RATCMP2)
table(sort(a$RATCMP2))
unique(sort(a$RATCMP2))
a$RATCMP2 <- car::recode(a$RATCMP2, "
            995 = NA;
            996 = NA;
            997 = NA;
            998 = NA;
            999 = NA")
summary(a$RATCMP2)
psych::skew(a$RATCMP2)   # -2.619738



##############################################################################################
attributes(a$CNTSCHID)
length(unique(a$CNTSCHID))   # 21903
nrow(a)                      # 21903
which(colnames(a) == "CNTSCHID")
colnames(a)[3] <- "CNT_SCHOOLID" 
colnames(a)[3]

#################### ADD GDP TO School.df ##########################
# perhaps of interest to some analysts*
dim(a)                                                # [1] 21903   196
count.names <- as.character(unique(a$CNT))            # Save to put in correct GDP names
length(unique(a$CNT))                                 # 70
unique(a$CNT)                                         # Note, alphabetical but ARE is at end


## Read in df
library(readxl)
gdp <- readxl::read_xlsx("GDP_2018.xlsx")
gdp <- as.data.frame(gdp)
dim(gdp)

# length(unique(a$CNTRYID))
# set.seed(123)
# gdp <- rnorm(80, 0, 1)
# gdp <- cbind.data.frame(count.names, gdp)
colnames(gdp) <- c("2018_C", "2018_GDP")

length(unique(a$CNT))           # 80 countries
length(unique(gdp$`2018_C`))    # 80 countries

## Correct the names
gdp$`2018_C` <- count.names
print(gdp$`2018_C`)
print(gdp$`2018_GDP`)

## Replicate country names as necessary for vector
unname(table(a$CNT))
gdp <- rep(gdp$`2018_GDP`, unname(table(a$CNT)))
length(gdp)               # 21903
summary(gdp)
psych::skew(gdp)          # 1.133901
plot(sort(gdp))
hist(gdp)

a <- cbind.data.frame(a, gdp)
head(a)

##############################################################################################
############################################ STUDENT #########################################
##############################################################################################
dir()
b <- haven::read_sav("CY07_MSU_STU_QQQ.sav")  
b <- as.data.frame(b)
attributes(b$IMMIG)
summary(b)
head(b)
str(b)


table(b$CNTRYID)

####################### CNT ############################
# CNT_SCHOOLID
colnames(b)[3] <- "CNT_SCHOOLID"

################################################################################
####################### Life satisfaction (overall) ############################
################################################################################
attributes(b$ST016Q01NA)          # Overall how satisfied are you with your life as a whole these days?
table(b$ST016Q01NA)
str(b$ST016Q01NA)
summary(b$ST016Q01NA)

b$ST016Q01NA <- car::recode(b$ST016Q01NA, "
            95 = NA;
            97 = NA;
            98 = NA;
            99 = NA")
summary(b$ST016Q01NA)
mean(b$ST016Q01NA, na.rm=TRUE)
table(b$ST016Q01NA)

################################################################################
####################### Life satisfaction (10 items) ###########################
################################################################################
attributes(b$WB155Q01HA)          # "How satisfied are you with each of the following? Your health"
table(b$WB155Q01HA)
str(b$WB155Q01HA)
summary(b$WB155Q01HA)

b$WB155Q01HA <- car::recode(b$WB155Q01HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q01HA)
mean(b$WB155Q01HA, na.rm=TRUE)
table(b$WB155Q01HA)



attributes(b$WB155Q02HA)          # "How satisfied are you with each of the following? The way that you look
table(b$WB155Q02HA)
str(b$WB155Q02HA)
summary(b$WB155Q02HA)

b$WB155Q02HA <- car::recode(b$WB155Q02HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q02HA)
mean(b$WB155Q02HA, na.rm=TRUE)
table(b$WB155Q02HA)



attributes(b$WB155Q03HA)          # "How satisfied are you with each of the following? What you learn at school"
table(b$WB155Q03HA)
str(b$WB155Q03HA)
summary(b$WB155Q03HA)

b$WB155Q03HA <- car::recode(b$WB155Q03HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q03HA)
mean(b$WB155Q03HA, na.rm=TRUE)
table(b$WB155Q03HA)



attributes(b$WB155Q04HA)          # "How satisfied are you with each of the following? The friends you have"
table(b$WB155Q04HA)
str(b$WB155Q04HA)
summary(b$WB155Q04HA)

b$WB155Q04HA <- car::recode(b$WB155Q04HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q04HA)
mean(b$WB155Q04HA, na.rm=TRUE)
table(b$WB155Q04HA)



attributes(b$WB155Q05HA)          # "How satisfied are you with each of the following? The neighbourhood you live in"
table(b$WB155Q05HA)
str(b$WB155Q05HA)
summary(b$WB155Q05HA)

b$WB155Q05HA <- car::recode(b$WB155Q05HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q05HA)
mean(b$WB155Q05HA, na.rm=TRUE)
table(b$WB155Q05HA)


attributes(b$WB155Q06HA)          # "How satisfied are you with each of the following? All the things you have"
table(b$WB155Q06HA)
str(b$WB155Q06HA)
summary(b$WB155Q06HA)

b$WB155Q06HA <- car::recode(b$WB155Q06HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q06HA)
mean(b$WB155Q06HA, na.rm=TRUE)
table(b$WB155Q06HA)



attributes(b$WB155Q07HA)          # "How satisfied are you with each of the following? How you use your time"
table(b$WB155Q07HA)
str(b$WB155Q07HA)
summary(b$WB155Q07HA)

b$WB155Q07HA <- car::recode(b$WB155Q07HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q07HA)
mean(b$WB155Q07HA, na.rm=TRUE)
table(b$WB155Q07HA)


attributes(b$WB155Q08HA)          # "How satisfied are you with each of the following? Your relationship with your parents/guardians
table(b$WB155Q08HA)
str(b$WB155Q08HA)
summary(b$WB155Q08HA)

b$WB155Q08HA <- car::recode(b$WB155Q08HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q08HA)
mean(b$WB155Q08HA, na.rm=TRUE)
table(b$WB155Q08HA)




attributes(b$WB155Q09HA)          # "How satisfied are you with each of the following? Your relationship with your teachers"
table(b$WB155Q09HA)
str(b$WB155Q09HA)
summary(b$WB155Q09HA)

b$WB155Q09HA <- car::recode(b$WB155Q09HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q09HA)
mean(b$WB155Q09HA, na.rm=TRUE)
table(b$WB155Q09HA)


attributes(b$WB155Q10HA)          # "How satisfied are you with each of the following? Your life at school"
table(b$WB155Q10HA)
str(b$WB155Q10HA)
summary(b$WB155Q10HA)

b$WB155Q10HA <- car::recode(b$WB155Q10HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$WB155Q10HA)
mean(b$WB155Q10HA, na.rm=TRUE)
table(b$WB155Q10HA)

################################################################################
######################## Positive affect (5 items) #############################
################################################################################
attributes(b$ST186Q05HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Happy
table(b$ST186Q05HA)               # 1 = never, 4 = always
str(b$ST186Q05HA)
summary(b$ST186Q05HA)

b$ST186Q05HA <- car::recode(b$ST186Q05HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q05HA)
mean(b$ST186Q05HA, na.rm=TRUE)
table(b$ST186Q05HA)



attributes(b$ST186Q07HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Lively
table(b$ST186Q07HA)               # 1 = never, 4 = always
str(b$ST186Q07HA)
summary(b$ST186Q07HA)

b$ST186Q07HA <- car::recode(b$ST186Q07HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q07HA)
mean(b$ST186Q07HA, na.rm=TRUE)
table(b$ST186Q07HA)



attributes(b$ST186Q09HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Proud
table(b$ST186Q09HA)               # 1 = never, 4 = always
str(b$ST186Q09HA)
summary(b$ST186Q09HA)

b$ST186Q09HA <- car::recode(b$ST186Q09HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q09HA)
mean(b$ST186Q09HA, na.rm=TRUE)
table(b$ST186Q09HA)




attributes(b$ST186Q01HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Joyful
table(b$ST186Q01HA)               # 1 = never, 4 = always
str(b$ST186Q01HA)
summary(b$ST186Q01HA)

b$ST186Q01HA <- car::recode(b$ST186Q01HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q01HA)
mean(b$ST186Q01HA, na.rm=TRUE)
table(b$ST186Q01HA)




attributes(b$ST186Q03HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Cheerful
table(b$ST186Q03HA)               # 1 = never, 4 = always
str(b$ST186Q03HA)
summary(b$ST186Q03HA)

b$ST186Q03HA <- car::recode(b$ST186Q03HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q03HA)
mean(b$ST186Q03HA, na.rm=TRUE)
table(b$ST186Q03HA)


################################################################################
######################## Negative affect (4 items) #############################
################################################################################

attributes(b$ST186Q06HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Scared
table(b$ST186Q06HA)               # 1 = never, 4 = always
str(b$ST186Q06HA)
summary(b$ST186Q06HA)

b$ST186Q06HA <- car::recode(b$ST186Q06HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q06HA)
mean(b$ST186Q06HA, na.rm=TRUE)
table(b$ST186Q06HA)



attributes(b$ST186Q10HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Miserable"
table(b$ST186Q10HA)               # 1 = never, 4 = always
str(b$ST186Q10HA)
summary(b$ST186Q10HA)

b$ST186Q10HA <- car::recode(b$ST186Q10HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q10HA)
mean(b$ST186Q10HA, na.rm=TRUE)
table(b$ST186Q10HA)




attributes(b$ST186Q02HA)          # Thinking about yourself and how you normally feel: how often do you feel as described below? Afraid"
table(b$ST186Q02HA)               # 1 = never, 4 = always
str(b$ST186Q02HA)
summary(b$ST186Q02HA)

b$ST186Q02HA <- car::recode(b$ST186Q02HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q02HA)
mean(b$ST186Q02HA, na.rm=TRUE)
table(b$ST186Q02HA)




attributes(b$ST186Q08HA)          # "Thinking about yourself and how you normally feel: how often do you feel as described below? Sad"
table(b$ST186Q08HA)               # 1 = never, 4 = always
str(b$ST186Q08HA)
summary(b$ST186Q08HA)

b$ST186Q08HA <- car::recode(b$ST186Q08HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST186Q08HA)
mean(b$ST186Q08HA, na.rm=TRUE)
table(b$ST186Q08HA)

################################################################################
############################ Eudaemonia (3 items) ##############################
################################################################################

attributes(b$ST185Q01HA)          # "Agree: My life has clear meaning or purpose."
table(b$ST185Q01HA)                # 1 = strongly disagree, 4 = strongly agree
str(b$ST185Q01HA)
summary(b$ST185Q01HA)

b$ST185Q01HA <- car::recode(b$ST185Q01HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST185Q01HA)
mean(b$ST185Q01HA, na.rm=TRUE)
table(b$ST185Q01HA)



attributes(b$ST185Q02HA)          # "Agree: I have discovered a satisfactory meaning in life."
table(b$ST185Q02HA)                # 1 = strongly disagree, 4 = strongly agree
str(b$ST185Q02HA)
summary(b$ST185Q02HA)

b$ST185Q02HA <- car::recode(b$ST185Q02HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST185Q02HA)
mean(b$ST185Q02HA, na.rm=TRUE)
table(b$ST185Q02HA)



attributes(b$ST185Q03HA)          # "Agree: I have a clear sense of what gives meaning to my life."
table(b$ST185Q03HA)               # 1 = strongly disagree, 4 = strongly agree
str(b$ST185Q03HA)
summary(b$ST185Q03HA)

b$ST185Q03HA <- car::recode(b$ST185Q03HA, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST185Q03HA)
mean(b$ST185Q03HA, na.rm=TRUE)
table(b$ST185Q03HA)


################################################################################
########################## Single Item Wellbeing ###############################
################################################################################
attributes(b$ST016Q01NA)                                                        # "Overall, how satisfied are you with your life as a whole these days?"
table(b$ST016Q01NA)                                                             # 0 = Not satisfied at all, 10 = Highly satisfied
str(b$ST016Q01NA)
summary(b$ST016Q01NA)

b$ST016Q01NA <- car::recode(b$ST016Q01NA, "
            95 = NA;
            97 = NA;
            98 = NA;
            99 = NA")
summary(b$ST016Q01NA)
mean(b$ST016Q01NA, na.rm=TRUE)
table(b$ST016Q01NA)

################################# Recode gender ################################
attributes(b$ST004D01T)                                                         # female = 1, male = 2
table(b$ST004D01T)                                                              # 0 = Not satisfied at all, 10 = Highly satisfied
str(b$ST004D01T)
summary(b$ST004D01T)

b$ST004D01T <- car::recode(b$ST004D01T, "
            5 = NA;
            7 = NA;
            8 = NA;
            9 = NA")
summary(b$ST004D01T)
mean(b$ST004D01T, na.rm=TRUE)
table(b$ST004D01T)

################################################################################
############################ Collate Variables #################################
################################################################################
# identify all variables:
colnames(b)
attributes(b$SENWT)

# also positive student wellbeing (WLE)
dim(b)          # ample size: 612,004 
summary(b$SWBP) # 124,918 NAs
124918/612004   # 20.411%3 missing
b$ST016Q01NA
b$CNT_SCHOOLID
b$CNT

all.variables <- c("WB155Q01HA", "WB155Q02HA", "WB155Q03HA", "WB155Q04HA", "WB155Q05HA", "WB155Q06HA", "WB155Q07HA", "WB155Q08HA", "WB155Q09HA", "WB155Q10HA",
              "ST186Q01HA", "ST186Q03HA", "ST186Q05HA", "ST186Q07HA", "ST186Q09HA",
              "ST186Q02HA", "ST186Q06HA", "ST186Q08HA", "ST186Q10HA",
              "ST185Q01HA", "ST185Q02HA", "ST185Q03HA",
              "SWBP", "ST016Q01NA", "ST004D01T", "CNT_SCHOOLID", "CNT", "SENWT")

length(all.variables) #24
study.var.logic <- colnames(b) %in% all.variables
b1 <- b[,study.var.logic]                                                       # Retain necessary variables in b1

################################################################################
########################## Missing Value Analysis ##############################
################################################################################
dim(b1)   # 612004  26
colnames(b1)
b2 <- b1[complete.cases(b1),]
dim(b2)   # 65503    26                                                         # only several with 

65503/612004    #10.7%

# Examine countries
length(table(b2$CNT_SCHOOLID))                                                  # 3294 total schools
sum(sort(table(b2$CNT_SCHOOLID)) > 9)                                           # 2540 schools with 10 students and above
2540/3294                                                                       # retain 0.771099
3294 - 2540                                                                     # remove 754 schools
logic.retain.schools <- sort(table(b2$CNT_SCHOOLID)) > 9                        # create logical for schools to retain
school.names.keep <- names(logic.retain.schools)[logic.retain.schools]          # retain students from these schools
students.keep.l <- b2$CNT_SCHOOLID %in% school.names.keep                       # create logical for students to keep
sum(students.keep.l)                                                            # 61863
b3 <- b2[students.keep.l,]                                                      # retain large school students only
dim(b3)                                                                         # 61863    26
sort(table(b3$CNT), decreasing = T)

attributes(b3$CNT)
table(b3$CNT)
# Spain,                22,594
# United Arab Emirates, 13,749
# Hong Kong,            4,807 
# Ireland,              4,740
# Mexico,               4,625
# Serbia,               3,900
# Bulgaria,             2,711
# Georgia,              2,504
# Panama,               2,233

sum(b3$CNT == "ESP")
length(table(b3$CNT_SCHOOLID[b3$CNT == "ESP"])) 
round(sum(b3$CNT == "ESP")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "ESP"])), 2)

sum(b3$CNT == "ARE")
length(table(b3$CNT_SCHOOLID[b3$CNT == "ARE"])) 
round(sum(b3$CNT == "ARE")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "ARE"])), 2)

sum(b3$CNT == "HKG")
length(table(b3$CNT_SCHOOLID[b3$CNT == "HKG"])) 
round(sum(b3$CNT == "HKG")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "HKG"])), 2)

sum(b3$CNT == "IRL")
length(table(b3$CNT_SCHOOLID[b3$CNT == "IRL"])) 
round(sum(b3$CNT == "IRL")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "IRL"])), 2)

sum(b3$CNT == "MEX")
length(table(b3$CNT_SCHOOLID[b3$CNT == "MEX"])) 
round(sum(b3$CNT == "MEX")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "MEX"])), 2)

sum(b3$CNT == "SRB")
length(table(b3$CNT_SCHOOLID[b3$CNT == "SRB"])) 
round(sum(b3$CNT == "SRB")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "SRB"])), 2)

sum(b3$CNT == "BGR")
length(table(b3$CNT_SCHOOLID[b3$CNT == "BGR"])) 
round(sum(b3$CNT == "BGR")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "BGR"])), 2)

sum(b3$CNT == "GEO")
length(table(b3$CNT_SCHOOLID[b3$CNT == "GEO"])) 
round(sum(b3$CNT == "GEO")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "GEO"])), 2)

sum(b3$CNT == "PAN")
length(table(b3$CNT_SCHOOLID[b3$CNT == "PAN"])) 
round(sum(b3$CNT == "PAN")   /   length(table(b3$CNT_SCHOOLID[b3$CNT == "PAN"])), 2)

dim(b3)
length(table(b3$CNT_SCHOOLID)) 
dim(b3)[1]  /  length(table(b3$CNT_SCHOOLID)) 


################################################################################
############################### Examine ICCs ################################### # Hashed out as going with single level models
################################################################################

misty::multilevel.icc(b3[,3:ncol(b3)], b3$CNT_SCHOOLID, method = "lme4")

ICCs.school.all <- sort(misty::multilevel.icc(b3[,3:ncol(b3)], b3$CNT_SCHOOLID, method = "lme4"))
print(ICCs.school.all)                                                          # Only two variables above 10
length(ICCs.school.all)
citation("misty")
citation("lme4")
attributes(b3$ST186Q02HA)       # 19.8%                                         # "Thinking about yourself and how you normally feel: how often do you feel as described below? Afraid"
attributes(b3$ST004D01T)        # 22.6%                                         # Gender

length(table(b3$CNT_SCHOOLID))                                                  # 2528
dim(b3)                                                                         # 61722    26
avg.cluster <- 61722/2528                                                       # avg cluster

design.effect <- 1 + (ICCs.school.all*(avg.cluster - 1))
print(design.effect)
sum(2.00 > design.effect)                                                       #

############################### Examine ICCs ###################################
misty::multilevel.icc(b3[,3:ncol(b3)], b3$CNT, method = "lme4")
ICCs.school.all <- sort(misty::multilevel.icc(b3[,3:ncol(b3)], b3$CNT, method = "lme4"))
print(ICCs.school.all)                                                          # Only one variable above 10%
attributes(b3$ST186Q02HA)       # 18.9%

####################################################################################################
################### Establishing sampling weights for each country == 5000 #########################
colnames(b3)
table(b3$CNT)
# ARE
sum(b3$SENWT[b3$CNT == "ARE"]) # 5000/3737.494 = 1.337795
sum(b3$SENWT[b3$CNT == "ARE"] * 1.337795)  # 5000
b3$SENWT[b3$CNT == "ARE"] <- b3$SENWT[b3$CNT == "ARE"] * 1.337795

# ARE
sum(b3$SENWT[b3$CNT == "BGR"]) # 5000/2474.398 = 2.020694
sum(b3$SENWT[b3$CNT == "BGR"] * 2.020694)  # 5000
b3$SENWT[b3$CNT == "BGR"] <- b3$SENWT[b3$CNT == "BGR"] * 2.020694

# ESP
sum(b3$SENWT[b3$CNT == "ESP"]) # 5000/3285.287 = 1.521937
sum(b3$SENWT[b3$CNT == "ESP"] * 1.521937)  # 5000
b3$SENWT[b3$CNT == "ESP"] <- b3$SENWT[b3$CNT == "ESP"] * 1.521937

# GEO
sum(b3$SENWT[b3$CNT == "GEO"]) # 5000/2015.483 = 2.480795
sum(b3$SENWT[b3$CNT == "GEO"] * 2.480795)  # 5000
b3$SENWT[b3$CNT == "GEO"] <- b3$SENWT[b3$CNT == "GEO"] * 2.480795

# HKG
sum(b3$SENWT[b3$CNT == "HKG"]) # 5000/3960.232 = 1.262552
sum(b3$SENWT[b3$CNT == "HKG"] * 1.262552)  # 5000
b3$SENWT[b3$CNT == "HKG"] <- b3$SENWT[b3$CNT == "HKG"] * 1.262552

# IRL
sum(b3$SENWT[b3$CNT == "IRL"]) # 5000/4247.941 = 1.177041
sum(b3$SENWT[b3$CNT == "IRL"] * 1.177041)  # 5000
b3$SENWT[b3$CNT == "IRL"] <- b3$SENWT[b3$CNT == "IRL"] * 1.177041

# MEX
sum(b3$SENWT[b3$CNT == "MEX"]) # 5000/2897.189 = 1.725811
sum(b3$SENWT[b3$CNT == "MEX"] * 1.725811)  # 5000
b3$SENWT[b3$CNT == "MEX"] <- b3$SENWT[b3$CNT == "MEX"] * 1.725811

# PAN
sum(b3$SENWT[b3$CNT == "PAN"]) # 5000/1669.378 = 2.995128
sum(b3$SENWT[b3$CNT == "PAN"] * 2.995128)  # 5000
b3$SENWT[b3$CNT == "PAN"] <- b3$SENWT[b3$CNT == "PAN"] * 2.995128

# SRB
sum(b3$SENWT[b3$CNT == "SRB"]) # 5000/2916.075 = 1.71463354
sum(b3$SENWT[b3$CNT == "SRB"] * 1.71463354)  # 5000
b3$SENWT[b3$CNT == "SRB"] <- b3$SENWT[b3$CNT == "SRB"] * 1.71463354

tapply(b3$SENWT, b3$CNT, FUN=function(x)sum(x))

################################################################################
############## 10-item 1-factor life satisfaction Model (2a) ###################
################################################################################
dim(b3)  # 612004   1118
MLM.2a <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q03HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA + WB155Q09HA + WB155Q10HA'

######################## (a) Model 1 ICC and DE ################################
fit2a <- lavaan::cfa(MLM.2a, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
fit.summary <- summary(fit2a, fit.measures=TRUE, standardized = T) 
M.fita <- fit.summary$FIT
print(M.fita)
round(semTools::moreFitIndices(fit2a), 3)
estim.M1 <- parameterestimates(fit2a, standardized=TRUE) 
print(estim.M1)
attributes(b3$WB155Q01HA) # health
attributes(b3$WB155Q02HA) # look
attributes(b3$WB155Q04HA) # friends
attributes(b3$WB155Q05HA) # neighbourhood
attributes(b3$WB155Q06HA) # things you have
attributes(b3$WB155Q07HA) # use your time
attributes(b3$WB155Q08HA) # relat. parents/guard

attributes(b3$WB155Q03HA) # learn at school
attributes(b3$WB155Q09HA) # relation w/ teachers
attributes(b3$WB155Q10HA) # life at school

################### (b) Model 1 AVE-SV RULE (within) ###########################
lifesat.lambda <- estim.M1$std.all[1:10]
print(lifesat.lambda)
semTools::reliability(fit2a)[5,1] # avevar
semTools::reliability(fit2a)[1,1] # alpha

########################## (c) Model 1 Extract matrix ##########################
semTools::reliability(fit2a)[5,1] # avevar

###################### (d) Correlate with single factor ########################
dim(b3)  # 612004   1118
MLM.2ac <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q03HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA + WB155Q09HA + WB155Q10HA
          lifesat   ~~ ST016Q01NA'
fit2ac <- lavaan::cfa(MLM.2ac, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
fit.summary <- summary(fit2ac, fit.measures=TRUE, standardized = T) 
M.fit <- fit.summary$FIT
print(M.fit)
estim.M1 <- parameterestimates(fit2ac, standardized=TRUE) 
print(estim.M1)
attributes(b3$ST016Q01NA)







################################################################################
############## 10-item 2-factor life satisfaction Model (2b) ###################
################################################################################
dim(b3)  # 61722    26
b3$WB155Q03HA
b3$WB155Q09HA
b3$WB155Q10HA

MLM.2 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA +  WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA'

######################## (a) Model 2 ICC and DE ################################
fit2b <- lavaan::cfa(MLM.2, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
fit.summary<- summary(fit2b, fit.measures=TRUE, standardized = T) 
M.fitb <- fit.summary$FIT
print(M.fitb)
round(semTools::moreFitIndices(fit2b), 3)
estim.M1 <- parameterestimates(fit2b, standardized=TRUE) 
print(estim.M1)[nrow(estim.M1),ncol(estim.M1)]    # inter-factor correlation
print(estim.M1)[nrow(estim.M1),ncol(estim.M1)]^2  # shared variance
semTools::reliability(fit2b)
semTools::htmt(MLM.2, b3)

######################## (b) Check single item corr ############################
MLM.2 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA +  WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA
          lifesat   ~~ ST016Q01NA
          SWS       ~~ ST016Q01NA'

fit2bc <- lavaan::cfa(MLM.2, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
summary(fit2bc, fit.measures=TRUE, standardized = T) 
fit.summary<- summary(fit2bc, fit.measures=TRUE, standardized = T) 
M.fit <- fit.summary$FIT
print(M.fit)
estim.M1 <- parameterestimates(fit2bc, standardized=TRUE) 
print(estim.M1)
lavaan::standardizedsolution(fit2bc)
# no model comparisons necessary due to poor RMSEA for unidimensional model






################################################################################
################# 18-item 4-factor life satisfaction Model (3a) ################
################################################################################
dim(b3)  # 61722    26
MLM.3 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA
          posaffect =~ ST186Q01HA + ST186Q03HA + ST186Q05HA + ST186Q07HA 
          negaffect =~ ST186Q02HA + ST186Q06HA + ST186Q08HA + ST186Q10HA'

# ST186Q09HA is the pride item to be removed
# + ST186Q09HA is removed from pos affect as it is for pride
# Shame, guilt, embarrassment, and pride are self-conscious emotions http://dx.doi.org/10.2307/1131351. Also see pride-same emotional complex https://doi.org/10.1556/jep.10.2012.1.2

######################## (a) Model 3 ICC and DE ################################
fit3a4 <- lavaan::cfa(MLM.3, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
summary(fit3a4, fit.measures=TRUE, standardized = T) 
fit.summary<- summary(fit3a4, fit.measures=TRUE, standardized = T) 
M3.fit <- fit.summary$FIT
print(M3.fit)
round(semTools::moreFitIndices(fit3a4), 3)
estim.M1 <- parameterestimates(fit3a4, standardized=TRUE) 
print(estim.M1)
print(estim.M1)[41:46,]    # inter-factor correlation
print(estim.M1)[41:46,11]^2  # shared variance
semTools::reliability(fit3a4)
semTools::htmt(MLM.3, b3)

######################## (b) Check single item corr ############################
MLM.3 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA
          posaffect =~ ST186Q01HA + ST186Q03HA + ST186Q05HA + ST186Q07HA
          negaffect =~ ST186Q02HA + ST186Q06HA + ST186Q08HA + ST186Q10HA
          lifesat   ~~ ST016Q01NA
          SWS       ~~ ST016Q01NA
          posaffect ~~ ST016Q01NA
          negaffect ~~ ST016Q01NA'

######################## (a) Model 3 ICC and DE ################################
fit3a <- lavaan::cfa(MLM.3, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
summary(fit3a, fit.measures=TRUE, standardized = T) 
fit.summary<- summary(fit3a, fit.measures=TRUE, standardized = T) 
M3.fit <- fit.summary$FIT
estim.M1 <- parameterestimates(fit3a, standardized=TRUE) 
print(estim.M1)
lavaan::standardizedsolution(fit3a)







################################################################################
################################################################################
################# 22-item 5-factor life satisfaction Model (4a) ################
################################################################################
################################################################################
dim(b3)  # 612004   1118
MLM.4 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA 
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA 
          posaffect =~ ST186Q01HA + ST186Q03HA + ST186Q05HA + ST186Q07HA
          negaffect =~ ST186Q02HA + ST186Q06HA + ST186Q08HA + ST186Q10HA
          eudmo     =~ ST185Q01HA + ST185Q02HA + ST185Q03HA'

######################## (a) Model 6 ICC and DE ################################
fit4a5 <- lavaan::cfa(MLM.4, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
summary(fit4a5, fit.measures=TRUE, standardized = T) 
fit.summary<- summary(fit4a5, fit.measures=TRUE, standardized = T) 
M.fit <- fit.summary$FIT
print(M.fit)
round(semTools::moreFitIndices(fit4a5), 3)
estim.M1 <- parameterestimates(fit4a5, standardized=TRUE) 
print(estim.M1)
print(estim.M1)[48:57,]    # inter-factor correlation
print(estim.M1)[48:57,11]^2  # shared variance
semTools::reliability(fit4a5)
semTools::htmt(MLM.4, b3)

MLM.4 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA 
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA 
          posaffect =~ ST186Q01HA + ST186Q03HA + ST186Q05HA + ST186Q07HA
          negaffect =~ ST186Q02HA + ST186Q06HA + ST186Q08HA + ST186Q10HA
          eudmo     =~ ST185Q01HA + ST185Q02HA + ST185Q03HA
          lifesat   ~~ ST016Q01NA
          SWS       ~~ ST016Q01NA
          posaffect ~~ ST016Q01NA
          negaffect ~~ ST016Q01NA
          eudmo     ~~ ST016Q01NA'

######################## (a) Model 6 ICC and DE ################################
fit4a <- lavaan::cfa(MLM.4, data=b3, std.lv=TRUE, estimator = "ML", sampling.weights = "SENWT")
summary(fit4a, fit.measures=TRUE, standardized = T) 
fit.summary<- summary(fit4a, fit.measures=TRUE, standardized = T) 
M.fit <- fit.summary$FIT
print(M.fit)
estim.M1 <- parameterestimates(fit4a, standardized=TRUE) 
print(estim.M1)
lavaan::standardizedsolution(fit4a)


######################### (a) Model Invariance #################################
MLM.4 <- 'lifesat   =~ WB155Q01HA + WB155Q02HA + WB155Q04HA + WB155Q05HA + WB155Q06HA + WB155Q07HA + WB155Q08HA 
          SWS       =~ WB155Q03HA + WB155Q09HA + WB155Q10HA 
          posaffect =~ ST186Q01HA + ST186Q03HA + ST186Q05HA + ST186Q07HA
          negaffect =~ ST186Q02HA + ST186Q06HA + ST186Q08HA + ST186Q10HA
          eudmo     =~ ST185Q01HA + ST185Q02HA + ST185Q03HA'

CNT.num <- as.numeric(as.factor(b3$CNT))
b3 <- cbind.data.frame(b3, CNT.num)

unique(paste(b3$CNT, b3$CNT.num, sep = "-"))
# "ARE-1" "BGR-2" "ESP-3" "GEO-4" "HKG-5" "IRL-6" "MEX-7" "PAN-8" "SRB-9"

############################# "ARE-1" vs "BGR-2" ###############################
ARE.BGR <- b3[b3$CNT.num %in% c(1,2), ]
# config
fit1 <- cfa(MLM.4, data = ARE.BGR, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.BGR, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.BGR, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ARE-1" vs "ESP-3" ###############################
ARE.ESP <- b3[b3$CNT.num %in% c(1,3), ]

# config
fit1 <- cfa(MLM.4, data = ARE.ESP, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.ESP, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.ESP, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ARE-1" vs "GEO-4" ###############################
ARE.GEO <- b3[b3$CNT.num %in% c(1,4), ]

# config
fit1 <- cfa(MLM.4, data = ARE.GEO, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.GEO, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.GEO, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01


############################# "ARE-1" vs "HKG-5" ###############################
ARE.HKG <- b3[b3$CNT.num %in% c(1,5), ]

# config
fit1 <- cfa(MLM.4, data = ARE.HKG, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.HKG, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.HKG, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ARE-1" vs "IRL-6" ###############################
ARE.IRL <- b3[b3$CNT.num %in% c(1,6), ]

# config
fit1 <- cfa(MLM.4, data = ARE.IRL, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.IRL, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.IRL, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ARE-1" vs "MEX-7" ###############################
ARE.MEX <- b3[b3$CNT.num %in% c(1,7), ]

# config
fit1 <- cfa(MLM.4, data = ARE.MEX, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.MEX, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.MEX, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ARE-1" vs "PAN-8" ###############################
ARE.PAN <- b3[b3$CNT.num %in% c(1,8), ]

# config
fit1 <- cfa(MLM.4, data = ARE.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ARE-1" vs "SRB-9" ###############################
ARE.SRB <- b3[b3$CNT.num %in% c(1,9), ]

# config
fit1 <- cfa(MLM.4, data = ARE.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ARE.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ARE.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

################################################################################
############################# "BGR-2" vs "ESP-3" ###############################
BGR.ESP <- b3[b3$CNT.num %in% c(2,3), ]

# config
fit1 <- cfa(MLM.4, data = BGR.ESP, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.ESP, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.ESP, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "BGR-2" vs "GEO-4" ###############################
BGR.GEO <- b3[b3$CNT.num %in% c(2,4), ]

# config
fit1 <- cfa(MLM.4, data = BGR.GEO, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.GEO, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.GEO, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "BGR-2" vs "HKG-5" ###############################
BGR.HKG <- b3[b3$CNT.num %in% c(2,5), ]

# config
fit1 <- cfa(MLM.4, data = BGR.HKG, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.HKG, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.HKG, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "BGR-2" vs "IRL-6" ###############################
BGR.IRL <- b3[b3$CNT.num %in% c(2,6), ]

# config
fit1 <- cfa(MLM.4, data = BGR.IRL, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.IRL, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.IRL, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "BGR-2" vs "MEX-7" ###############################
BGR.MEX <- b3[b3$CNT.num %in% c(2,7), ]

# config
fit1 <- cfa(MLM.4, data = BGR.MEX, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.MEX, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.MEX, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "BGR-2" vs "PAN-8" ###############################
BGR.PAN <- b3[b3$CNT.num %in% c(2,8), ]

# config
fit1 <- cfa(MLM.4, data = BGR.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "BGR-2" vs "SRB-9" ###############################
BGR.SRB <- b3[b3$CNT.num %in% c(2,9), ]

# config
fit1 <- cfa(MLM.4, data = BGR.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = BGR.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = BGR.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

################################################################################
############################# "ESP-3" vs "GEO-4" ###############################
ESP.GEO <- b3[b3$CNT.num %in% c(3,4), ]

# config
fit1 <- cfa(MLM.4, data = ESP.GEO, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ESP.GEO, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ESP.GEO, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ESP-3" vs "HKG-5" ###############################
ESP.HKG <- b3[b3$CNT.num %in% c(3,5), ]

# config
fit1 <- cfa(MLM.4, data = ESP.HKG, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ESP.HKG, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ESP.HKG, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ESP-3" vs "IRL-6" ###############################
ESP.IRL <- b3[b3$CNT.num %in% c(3,6), ]

# config
fit1 <- cfa(MLM.4, data = ESP.IRL, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ESP.IRL, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ESP.IRL, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ESP-3" vs "MEX-7" ###############################
ESP.MEX <- b3[b3$CNT.num %in% c(3,7), ]

# config
fit1 <- cfa(MLM.4, data = ESP.MEX, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ESP.MEX, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ESP.MEX, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ESP-3" vs "PAN-8" ###############################
ESP.PAN <- b3[b3$CNT.num %in% c(3,8), ]

# config
fit1 <- cfa(MLM.4, data = ESP.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ESP.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ESP.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "ESP-3" vs "SRB-9" ###############################
ESP.SRB <- b3[b3$CNT.num %in% c(3,9), ]

# config
fit1 <- cfa(MLM.4, data = ESP.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = ESP.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = ESP.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01


################################################################################
############################# "GEO-4" vs "HKG-5" ###############################
GEO.HKG <- b3[b3$CNT.num %in% c(4,5), ]

# config
fit1 <- cfa(MLM.4, data = GEO.HKG, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = GEO.HKG, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = GEO.HKG, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "GEO-4" vs "IRL-6" ###############################
GEO.IRL <- b3[b3$CNT.num %in% c(4,6), ]

# config
fit1 <- cfa(MLM.4, data = GEO.IRL, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = GEO.IRL, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = GEO.IRL, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "GEO-4" vs "MEX-7" ###############################
GEO.MEX <- b3[b3$CNT.num %in% c(4,7), ]

# config
fit1 <- cfa(MLM.4, data = GEO.MEX, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = GEO.MEX, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = GEO.MEX, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "GEO-4" vs "PAN-8" ###############################
GEO.PAN <- b3[b3$CNT.num %in% c(4,8), ]

# config
fit1 <- cfa(MLM.4, data = GEO.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = GEO.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = GEO.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "GEO-4" vs "SRB-9" ###############################
GEO.SRB <- b3[b3$CNT.num %in% c(4,9), ]

# config
fit1 <- cfa(MLM.4, data = GEO.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = GEO.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = GEO.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

################################################################################
############################# "HKG-5" vs "IRL-6" ###############################
HKG.IRL <- b3[b3$CNT.num %in% c(5,6), ]

# config
fit1 <- cfa(MLM.4, data = HKG.IRL, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = HKG.IRL, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = HKG.IRL, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "HKG-5" vs "MEX-7" ###############################
HKG.MEX <- b3[b3$CNT.num %in% c(5,7), ]

# config
fit1 <- cfa(MLM.4, data = HKG.MEX, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = HKG.MEX, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = HKG.MEX, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "HKG-5" vs "PAN-8" ###############################
HKG.PAN <- b3[b3$CNT.num %in% c(5,8), ]

# config
fit1 <- cfa(MLM.4, data = HKG.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = HKG.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = HKG.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "HKG-5" vs "SRB-9" ###############################
HKG.SRB <- b3[b3$CNT.num %in% c(5,9), ]

# config
fit1 <- cfa(MLM.4, data = HKG.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = HKG.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = HKG.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

################################################################################
############################# "IRL-6" vs "MEX-7" ###############################
IRL.MEX <- b3[b3$CNT.num %in% c(6,7), ]

# config
fit1 <- cfa(MLM.4, data = IRL.MEX, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = IRL.MEX, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = IRL.MEX, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "IRL-6" vs "PAN-8" ###############################
IRL.PAN <- b3[b3$CNT.num %in% c(6,8), ]

# config
fit1 <- cfa(MLM.4, data = IRL.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = IRL.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = IRL.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "IRL-6" vs "SRB-9" ###############################
IRL.SRB <- b3[b3$CNT.num %in% c(6,9), ]

# config
fit1 <- cfa(MLM.4, data = IRL.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = IRL.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = IRL.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

################################################################################
############################# "MEX-7" vs "PAN-8" ###############################
MEX.PAN <- b3[b3$CNT.num %in% c(7,8), ]

# config
fit1 <- cfa(MLM.4, data = MEX.PAN, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = MEX.PAN, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = MEX.PAN, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

############################# "MEX-7" vs "SRB-9" ###############################
MEX.SRB <- b3[b3$CNT.num %in% c(7,9), ]

# config
fit1 <- cfa(MLM.4, data = MEX.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = MEX.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = MEX.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01


################################################################################
############################# "PAN-8" vs "SRB-9" ###############################
PAN.SRB <- b3[b3$CNT.num %in% c(8,9), ]

# config
fit1 <- cfa(MLM.4, data = PAN.SRB, group = "CNT.num", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = PAN.SRB, group = "CNT.num", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = PAN.SRB, group = "CNT.num", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

################################################################################
############################# "MALE" vs "FEMALE" ###############################
b3$ST004D01T <- as.numeric(b3$ST004D01T)
str(b3$ST004D01T)

# config
fit1 <- cfa(MLM.4, data = b3, group = "ST004D01T", sampling.weights = "SENWT")
fit.summary<- summary(fit1, fit.measures=TRUE, standardized = T) 
config.CFI <- fit.summary$FIT[17]
config.RMSEA <- fit.summary$FIT[31]
# metric
fit2 <- cfa(MLM.4, data = b3, group = "ST004D01T", group.equal = "loadings", sampling.weights = "SENWT")
fit.summary<- summary(fit2, fit.measures=TRUE, standardized = T) 
metric.CFI <- fit.summary$FIT[17]
metric.RMSEA <- fit.summary$FIT[31]
# scalar
fit3 <- cfa(MLM.4, data = b3, group = "ST004D01T", group.equal = c("intercepts", "loadings"), sampling.weights = "SENWT")
fit.summary<- summary(fit3, fit.measures=TRUE, standardized = T) 
scalar.CFI <- fit.summary$FIT[17]
scalar.RMSEA <- fit.summary$FIT[31]

# confi invar
config.CFI > .95
# metric invar
(abs(config.CFI - metric.CFI)) < .02
# scalar invar
(abs(metric.CFI - scalar.CFI)) < .01

# confi invar
config.RMSEA <= .05
# metric invar
(abs(config.RMSEA - metric.RMSEA)) < .03
# scalar invar
(abs(metric.RMSEA - scalar.RMSEA)) < .01

# END

