#-------------------------------------
# Bivariate (load from cotwincontrol.R !)
#-------------------------------------

cat("Recode for <Session 2 - ACE-beta models> started ")

########################
# load data (TwinLife 6.0.0)
data_full <- read_dta(file = "Data/SUF/ZA6701_person_wid1_v6-0-0.dta")

########################
# define missing values
data_full[data_full < 0] <- NA
data_full <- data.frame(data_full)

########################
# duplicate of data frame
df <- data_full %>% filter(cgr == 2 & !is.na(zyg0102)) %>% rename(zyg = zyg0102)
df <- zap_label(df)
df <- zap_labels(df)

df <- df %>% 
    mutate(educparind = case_when(ptyp %in% c(300, 400) ~ eca0109,
                                  TRUE ~ as.numeric(NA))) %>% 
    group_by(fid) %>% 
    mutate(educpar = max(educparind, na.rm = TRUE)) %>% 
    ungroup() %>% 
    mutate(educpar = case_when(is.infinite(educpar) ~ as.numeric(NA),
                               TRUE ~ educpar)) %>% 
    filter(ptyp %in% c(1,2))

########################
# Math grades
df <- df %>% 
    mutate(math = case_when(is.na(cer2200) ~ 7 - cer1400,
                            TRUE ~ 7 - cer2200)) 

########################
# German grades
df <- df %>% 
    mutate(german = case_when(is.na(cer2201) ~ 7 - cer1500,
                            TRUE ~ 7 - cer2201)) 

########################
# Self-Efficacy
df <- df %>% 
    rowwise() %>% 
    mutate(selfeff = round(mean(c(sef0100, sef0101, sef0102), na.rm = TRUE),2)) %>% 
    ungroup()
table(df$selfeff)

########################
# Cognitive abilities
model <- "CA =~ igf0182 + igf0282 + igf0382 + igf0482"
fit <- suppressWarnings(cfa(model = model, data = df, missing = "fiml"))
summary(fit, fit.measures = TRUE)
lvscore <- lavPredict(object = fit, type = "lv")
df <- cbind(df,lvscore)
#plot(density(df$CA, na.rm = TRUE))

########################
# Self-perceived ability
df <- df %>% 
    rowwise() %>% 
    mutate(spabschool = mean(c(spa0200, spa0201, 6 - spa0202), na.rm = TRUE)) %>% 
    mutate(spabmath = mean(c(spa0300, spa0301, 6 - spa0302), na.rm = TRUE)) %>% 
    mutate(spabgerman = mean(c(spa0400, spa0401, 6 - spa0402), na.rm = TRUE)) %>% 
    ungroup()


########################
# Global Life Satisfaction
df <- df %>% 
    rowwise() %>% 
    mutate(lifesat = mean(c(gls0600, gls0700, gls0800, gls0900, gls1000), na.rm = TRUE)) %>% 
    ungroup()

########################
# Internalizing Problem Behavior
df <- df %>% 
    rowwise() %>% 
    mutate(intemo = mean(c(int0100, int0101, int0102, int0103, int0104), na.rm = TRUE)) %>% 
    mutate(intpeers = mean(c(int0105, 4-int0106, 4-int0107, int0108, int0109), na.rm = TRUE)) %>% 
    ungroup()

########################
# Externalizing Problem Behavior
df <- df %>% 
    rowwise() %>% 
    mutate(exthyp = mean(c(ext0100, ext0101, ext0102, 4-ext0103, 4-ext0104), na.rm = TRUE)) %>% 
    mutate(extcond = mean(c(ext0105, 4-ext0106, ext0107, ext0108, ext0109), na.rm = TRUE)) %>% 
    ungroup()

########################
# Zygosity
table(df$zyg) # 1 = MZ, 2 = DZ
table(df$zyg)


########################
# Sex
df <- df %>% # 1 = male; 2 = female
    mutate(female = sex - 1) %>% # 0 = male; 1 = female
    mutate(age = age0100 - 10) # 0 = 10 years
# Select variables
df_final <- df %>% 
    select(fid, pid, ptyp, zyg, age, female, educpar, math, german, selfeff, CA, spabschool, spabmath, spabgerman, lifesat, intemo, intpeers, exthyp, extcond)

########################
# Reshape into wide format
reshapevars <- c(names(df_final)[8:ncol(df_final)])
df_final_wide <- df_final %>% 
    filter(!is.na(zyg)) %>% 
    select(-pid) %>% 
    pivot_wider(names_from = ptyp, 
                values_from = all_of(reshapevars)) 
df_final_wide$fid[duplicated(df_final_wide$fid)] # No double entries of a fid
df_final_wide <- data.frame(df_final_wide)

########################
# Remove objects
rm(df_final, data_full, df, fit, lvscore)

########################
# save data
write.csv(df_final_wide,"Data/Out/Session 2/data_final.csv", row.names = FALSE)

cat("\n\n\nRecode for <Session 2 - ACE-beta model> finished. Final data frame was saved in: \nTwinLife Workshop Advanced/Data/Out/Session 2/data_final.csv\n\n")

