library(mgcv)

neps <- read.table("neps_final.txt")

## Nachbarschaften für ordinale Variablen, die mittels Splines modelliert wurden
nb_buecher <- list("weniger als 100" = "weniger als 200", "weniger als 200" = c("weniger als 100","weniger als 500"), 
                   "weniger als 500" = c("weniger als 200","mehr als 501"), "mehr als 501" = "weniger als 500")

nb_schulform <- list("Hauptschule" = "Realschule", "Realschule" = c("Hauptschule", "Schule mmB"),
                     "Schule mmB" = c("Realschule", "Gymnasium"), "Gymnasium" = "Schule mmB")

nb_muc_k_akademik <- list("bis <2%" = "2-3%", "2-3%" = c("bis <2%", "3-4%"), "3-4%" = c("2-3%", "4-5%"), "4-5%" = c("3-4%", "5-7.5%"),   
                          "5-7.5%" = c("4-5%", "7.5-10%"),  "7.5-10%" = c("5-7.5%", "10-12.5%"), 
                          "10-12.5%" = c("7.5-10%", "12.5-25%"), "12.5-25%" = c("10-12.5%", "?ber 25%"), "?ber 25%" = "12.5-25%")

## Verkleinerung des Datensatzes auf in Regression genutzte Variablen
## Für eine Verknüpfung mit den Bezeichnungen im Beitrag siehe Variablenselektion.R
neps1 <- neps[c("pm00133",
                "alq_p_quote",
                "ap_weiterarbeit_a",
                "buecher",
                "eigenebetr_a",
                "hiISEI",
                "hs_elt_a",
                "mag7_sc1",
                "mso_k_kinder",
                "muc_k_akademik",
                "nposgen",
                "p510001",
                "reg7_sc1",
                "s_kurzfristig",
                "s_langfristig",
                "scg7_sc1",
                "schulform",
                "selbstkonzept",
                "siedlung",
                "sorgfalt",
                "thf_k_garten",
                "tx80501_a",
                "untzeit",
                "wochenmittel_lk_mw",
                "ID_i"
                )]

## Vorbereitung der metrischen und ordinalen Prädiktoren für die Korrektur der fehlenden Werte
dname<- c("p510001", "hiISEI", "untzeit", "nposgen", "mso_k_kinder",
          "muc_k_akademik", "thf_k_garten", "wochenmittel_lk_mw",
          "s_kurzfristig", "s_langfristig",
          "sorgfalt", "selbstkonzept", "schulform", 
          "reg7_sc1", "mag7_sc1", "scg7_sc1", "alq_p_quote") 

for(i in 1:length(dname)) {
  by.name <- paste("m", dname[i], sep = "")
  neps1[[by.name]] <- is.na(neps1[[dname[i]]]) # neue Variable: Indikator missing value mVariablenname
  neps1[[dname[i]]][neps1[[by.name]]] <- mean(neps1[[dname[i]]], na.rm = TRUE) # ersetze NA durch Mittelwert
  lev <- rep(1, nrow(neps1)); lev[neps1[[by.name]]] <- 1:sum(neps1[[by.name]]) # 1 bis Anzahl NA
  id.name <- paste("id", dname[i], sep = "")
  neps1[[id.name]] <- factor(lev) # neue Variable mit level je NA
  neps1[[by.name]] <- as.numeric(neps1[[by.name]])
}

## Formel für Spline-Regression
formula <- pm00133 ~ 
                    # metrische und ordinale Variablen
                    s(hiISEI, by = ordered(!mhiISEI)) + s(idhiISEI, bs = "re", by = mhiISEI) +
                    s(untzeit, by = ordered(!muntzeit)) + s(iduntzeit, bs = "re", by = muntzeit) +
                    s(wochenmittel_lk_mw, by = ordered(!mwochenmittel_lk_mw)) + 
                    s(s_kurzfristig, by = ordered(!ms_kurzfristig)) + 
                    s(s_langfristig, by = ordered(!ms_langfristig)) + 
                    s(sorgfalt, by = ordered(!msorgfalt)) + s(idsorgfalt, bs = "re", by = msorgfalt) +
                    s(mso_k_kinder, by = ordered(!mmso_k_kinder)) + s(idmso_k_kinder, bs = "re", by = mmso_k_kinder) +
                    s(selbstkonzept, by = ordered(!mselbstkonzept)) + s(idselbstkonzept, bs = "re", by = mselbstkonzept) +
                    s(mag7_sc1, by = ordered(!mmag7_sc1)) + 
                    s(reg7_sc1, by = ordered(!mreg7_sc1)) + 
                    s(thf_k_garten, k=8, by = ordered(!mthf_k_garten)) + s(idthf_k_garten, bs = "re", by = mthf_k_garten) +
                    s(buecher_fac, bs = "mrf", xt = list(nb=nb_buecher), by = ordered(!mbuecher_fac)) +
                    s(schulform_fac, bs ="mrf", xt = list(nb=nb_schulform), by = ordered(!mschulform_fac)) +
                    s(muc_k_akademik_fac, bs = "mrf", xt = list(nb=nb_muc_k_akademik), by = ordered(!mmuc_k_akademik_fac)) +
                    s(scg7_sc1, by = ordered(!mscg7_sc1)) + 
                    s(alq_p_quote, by = ordered(!malq_p_quote)) + s(idalq_p_quote, bs = "re", by = malq_p_quote) + 
                    s(nposgen, by = ordered(!mnposgen)) + s(idnposgen, bs = "re", by = mnposgen) + 
                    s(p510001, by = ordered(!mp510001)) + 
                    # nominale Variablen
                    ap_weiterarbeit_a +
                    eigenebetr_a +
                    hs_elt_a +
                    tx80501_a +
                    s(ID_i, bs = "re")

## Spline-Regression, Normalverteilungsannahme für AV, Schätzung über Restricted Maximum Likelihood
full_mod_gauss <- gam(formula,
                      family = gaussian, 
                      data = neps1,
                      method = "REML")

#save.image("Z:/Projects/p000215_DUA_3912/Analysen_SC2/Remote_Daten/gaussian-splines_final.RData")
load("Z:/Projects/p000215_DUA_3912/Analysen_SC2/Remote_Daten/gaussian-splines_final.RData")

## Inspektion des Modells
AIC(full_mod_gauss) #12235.52
summary(full_mod_gauss)
plot(full_mod_gauss)
