

library(foreign)
library(survey)

load("/Users/stefanorousset/Library/CloudStorage/GoogleDrive-stefano.rousset@unito.it/Il mio Drive/Statistica/DSSPP/Analisi articolo calibrazione/Database/db_finale2_R.RData")

#Prepare data for survey
pre.design <- svydesign(id=~0, data=DB_stata_2, fpc=~pop_totale, weights=~weight)


#Dataframe with population data
post.weight.sex <- data.frame(sex = c(0, 1), Freq = c(30293, 49485))
post.weight.areacorso <- data.frame(course_area = c(1, 2, 3, 4, 5, 6, 7), Freq = c(2196, 22901, 7542, 9719, 13371, 22799, 1250))
post.weight.tipocorso <- data.frame(course_tipo_tot = c(1, 2, 3), Freq = c(50462, 17268, 12048))
                                                                   
post.weight.sex$sex <- factor(post.weight.sex$sex, levels = levels(DB_stata_2$sex))
post.weight.areacorso$course_area <- factor(post.weight.areacorso$course_area, levels = levels(DB_stata_2$course_area))
post.weight.tipocorso$course_tipo_tot <- factor(post.weight.tipocorso$course_tipo_tot, levels = levels(DB_stata_2$course_tipo_tot))




#UNWEIGHTED ESTIMATES
library(DescTools)

#Anagrafica
summary(DB_stata_2$age)
summary(DB_stata_2$macarthur)

stud_loc <- table(DB_stata_2$study_location)
prop.stud_loc <- prop.table(stud_loc)
prop.stud_loc
BinomCI(x=1629, n=5275, method="logit")
BinomCI(x=1785, n=5275, method="logit")
BinomCI(x=1861, n=5275, method="logit")

progression <- table(DB_stata_2$progress)
prop.progression <- prop.table(progression)
prop.progression
BinomCI(x=2390, n=5225, method="logit")
BinomCI(x=1791, n=5225, method="logit")
BinomCI(x=1044, n=5225, method="logit")




###Mental outcomes 
#PHQ2
phq2 <- table(DB_stata_2$PHQ2_cat)
prop.phq <- prop.table(phq2)
prop.phq
BinomCI(x=2565, n=4833, method="logit")
BinomCI(x=2268, n=4833, method="logit")


#GAD2
gad2 <- table(DB_stata_2$GAD2_cat)
prop.gad2 <- prop.table(gad2)
prop.gad2
BinomCI(x=1346, n=4841, method="logit")
BinomCI(x=3495, n=4841, method="logit")

#SBQR
sbqr <- table(DB_stata_2$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
prop.sbqr
BinomCI(x=3048, n=4644, method="logit")
BinomCI(x=1596, n=4644, method="logit")




#MHC-SF, MSPSS 
summary(DB_stata_2$mhcsf_emot_tot)
summary(DB_stata_2$mhcsf_soc_tot)
summary(DB_stata_2$mhcsf_psy_tot)
summary(DB_stata_2$MHCSF_tot)

summary(DB_stata_2$mspss_fam_finale)
summary(DB_stata_2$mspss_friend_finale)
summary(DB_stata_2$mspss_spec_finale)
summary(DB_stata_2$mspss_finale)










###RAKING

rake <- rake(pre.design, sample.margins=list(~sex, ~course_area, ~course_tipo_tot), population=list(post.weight.sex, post.weight.areacorso, post.weight.tipocorso))

weights_rake <- weights(rake)
DB_stata_2$weights_rake <- weights_rake
summary(DB_stata_2$weights_rake)


#WEIGHTED ESTIMATES
#PHQ2
prop.phq2.rake <- svytable(~PHQ2_cat, rake)
proportion.phq2.rake <- prop.table(prop.phq2.rake)
print(proportion.phq2.rake)
svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2 
prop.gad2.rake <- svytable(~GAD2_cat, rake)
proportion.gad2.rake <- prop.table(prop.gad2.rake)
print(proportion.gad2.rake)
svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))


#SBQR 
prop.sbqr.rake <- svytable(~SBQR_cat, rake)
proportion.sbqr.rake <- prop.table(prop.sbqr.rake)
print(proportion.sbqr.rake)
svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))




#Mental well being
prop.mentalwb.rake <- svytable(~benessere, rake)
proportion.mentalwb.rake <- prop.table(prop.mentalwb.rake)
print(proportion.mentalwb.rake)
svyciprop(~I(benessere==0), rake, method = c("logit"))
svyciprop(~I(benessere==1), rake, method = c("logit"))
svyciprop(~I(benessere==2), rake, method = c("logit"))



#MSPSS
mean_mspss_family_rake <- svymean(~mspss_fam_finale, rake, na.rm=TRUE)
print(mean_mspss_family_rake)
confint(mean_mspss_family_rake)

mean_mspss_friend_rake <- svymean(~mspss_friend_finale, rake, na.rm=TRUE)
print(mean_mspss_friend_rake)
confint(mean_mspss_friend_rake)

mean_mspss_spec_rake <- svymean(~mspss_spec_finale, rake, na.rm=TRUE)
print(mean_mspss_spec_rake)
confint(mean_mspss_spec_rake)

mean_mspss_overall_rake <- svymean(~mspss_finale, rake, na.rm=TRUE)
print(mean_mspss_overall_rake)
confint(mean_mspss_overall_rake)



#Mental well-being (MHC-SF)
mean_mhcsf_emotional_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_mhcsf_emotional_rake)
confint(mean_mhcsf_emotional_rake)

mean_mhcsf_social_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_mhcsf_social_rake)
confint(mean_mhcsf_social_rake)

mean_mhcsf_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_mhcsf_psy_rake)
confint(mean_mhcsf_psy_rake)

mean_mhcsf_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_mhcsf_tot_rake)
confint(mean_mhcsf_tot_rake)



#Socio-demographic
#Age

mean_age_rake <- svymean(~age, rake, na.rm=TRUE)
print(mean_age_rake)
confint(mean_age_rake)


#Sep
mean_sep_rake <- svymean(~macarthur, rake, na.rm=TRUE)
print(mean_sep_rake)
confint(mean_sep_rake)


#Study location
prop.studyloc.rake <- svytable(~study_location, rake)
proportion.studyloc.rake <- prop.table(prop.studyloc.rake)
print(proportion.studyloc.rake)
svyciprop(~I(study_location==1), rake, method = c("logit"))
svyciprop(~I(study_location==2), rake, method = c("logit"))
svyciprop(~I(study_location==3), rake, method = c("logit"))



#Academic progress
prop.progress.rake <- svytable(~progress, rake)
proportion.progress.rake <- prop.table(prop.progress.rake)
print(proportion.progress.rake)
svyciprop(~I(progress==1), rake, method = c("logit"))
svyciprop(~I(progress==2), rake, method = c("logit"))
svyciprop(~I(progress==3), rake, method = c("logit"))





library(foreign)
library(survey)


###AGRICULTURAL
#Creo dataset e modifico valori pop totale e weight
area_agri <- subset(DB_stata_2, course_area==1)
area_agri$pop_totale <- 2196
area_agri$weight <- 2196/123

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.agri <- data.frame(sex = c(0, 1), Freq = c(1344, 852))
pop_tipocorso.agri <- data.frame(course_tipo_tot = c(1, 2), Freq = c(1557, 639))

pop_sex.agri$sex <- factor(pop_sex.agri$sex, levels = levels(area_agri$sex))
pop_tipocorso.agri$course_tipo_tot <- factor(pop_tipocorso.agri$course_tipo_tot, levels = levels(area_agri$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.agri <- svydesign(id=~0, data=area_agri, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.agri, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.agri, pop_tipocorso.agri))
area_agri$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_agri$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=63, n=116, method="logit")
BinomCI(x=53, n=116, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_agri$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=33, n=116, method="logit")
BinomCI(x=83, n=116, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_agri$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
prop.sbqr
BinomCI(x=74, n=112, method="logit")
BinomCI(x=38, n=112, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)


###HUMANITIES AND PHILOSOPHY
#Creo dataset e modifico valori pop totale e weight
area_human <- subset(DB_stata_2, course_area==2)
area_human$pop_totale <- 22901
area_human$weight <- 22901/1404

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.human <- data.frame(sex = c(0, 1), Freq = c(5700, 17201))
pop_tipocorso.human <- data.frame(course_tipo_tot = c(1, 2, 3), Freq = c(15878, 4973, 2050))

pop_sex.human$sex <- factor(pop_sex.human$sex, levels = levels(area_human$sex))
pop_tipocorso.human$course_tipo_tot <- factor(pop_tipocorso.human$course_tipo_tot, levels = levels(area_human$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.human <- svydesign(id=~0, data=area_human, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.human, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.human, pop_tipocorso.human))
area_human$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_human$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=632, n=1291, method="logit")
BinomCI(x=659, n=1291, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_human$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=325, n=1293, method="logit")
BinomCI(x=968, n=1293, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_human$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
sbqr
BinomCI(x=754, n=1241, method="logit")
BinomCI(x=487, n=1241, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)





###LAW
#Creo dataset e modifico valori pop totale e weight
area_law <- subset(DB_stata_2, course_area==3)
area_law$pop_totale <- 7542
area_law$weight <- 7542/298

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.law <- data.frame(sex = c(0, 1), Freq = c(2362, 5180))
pop_tipocorso.law <- data.frame(course_tipo_tot = c(1, 2, 3), Freq = c(3345, 440, 3757))

pop_sex.law$sex <- factor(pop_sex.law$sex, levels = levels(area_law$sex))
pop_tipocorso.law$course_tipo_tot <- factor(pop_tipocorso.law$course_tipo_tot, levels = levels(area_law$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.law <- svydesign(id=~0, data=area_law, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.law, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.law, pop_tipocorso.law))
area_law$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_law$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=151, n=267, method="logit")
BinomCI(x=116, n=267, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_law$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=78, n=268, method="logit")
BinomCI(x=190, n=268, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_law$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
sbqr
BinomCI(x=189, n=258, method="logit")
BinomCI(x=69, n=258, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)



###MEDICAL SCIENCES
#Creo dataset e modifico valori pop totale e weight
area_med <- subset(DB_stata_2, course_area==4)
area_med$pop_totale <- 9719
area_med$weight <- 9719/1035

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.med <- data.frame(sex = c(0, 1), Freq = c(3292, 6427))
pop_tipocorso.med <- data.frame(course_tipo_tot = c(1, 2, 3), Freq = c(4437, 1092, 4190))

pop_sex.med$sex <- factor(pop_sex.med$sex, levels = levels(area_med$sex))
pop_tipocorso.med$course_tipo_tot <- factor(pop_tipocorso.med$course_tipo_tot, levels = levels(area_med$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.med <- svydesign(id=~0, data=area_med, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.med, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.med, pop_tipocorso.med))
area_med$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_med$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=554, n=962, method="logit")
BinomCI(x=408, n=962, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_med$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=277, n=964, method="logit")
BinomCI(x=687, n=964, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_med$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
sbqr
BinomCI(x=644, n=923, method="logit")
BinomCI(x=279, n=923, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)






###NATURAL SCIENCES
#Creo dataset e modifico valori pop totale e weight
area_nat <- subset(DB_stata_2, course_area==5)
area_nat$pop_totale <- 13371
area_nat$weight <- 13371/984

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.nat <- data.frame(sex = c(0, 1), Freq = c(7759, 5612))
pop_tipocorso.nat <- data.frame(course_tipo_tot = c(1, 2, 3), Freq = c(9387, 2701, 1283))

pop_sex.nat$sex <- factor(pop_sex.nat$sex, levels = levels(area_nat$sex))
pop_tipocorso.nat$course_tipo_tot <- factor(pop_tipocorso.nat$course_tipo_tot, levels = levels(area_nat$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.nat <- svydesign(id=~0, data=area_nat, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.nat, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.nat, pop_tipocorso.nat))
area_nat$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_nat$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=446, n=894, method="logit")
BinomCI(x=448, n=894, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_nat$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=272, n=894, method="logit")
BinomCI(x=622, n=894, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_nat$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
sbqr
BinomCI(x=563, n=856, method="logit")
BinomCI(x=293, n=856, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)






###SOCIAL AND ECONOMIC SCIENCES
#Creo dataset e modifico valori pop totale e weight
area_soc <- subset(DB_stata_2, course_area==6)
area_soc$pop_totale <- 22799
area_soc$weight <- 22799/1317

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.soc <- data.frame(sex = c(0, 1), Freq = c(9576, 13223))
pop_tipocorso.soc <- data.frame(course_tipo_tot = c(1, 2), Freq = c(15376, 7423))

pop_sex.soc$sex <- factor(pop_sex.soc$sex, levels = levels(area_soc$sex))
pop_tipocorso.soc$course_tipo_tot <- factor(pop_tipocorso.soc$course_tipo_tot, levels = levels(area_soc$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.soc <- svydesign(id=~0, data=area_soc, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.soc, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.soc, pop_tipocorso.soc))
area_soc$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_soc$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=670, n=1190, method="logit")
BinomCI(x=520, n=1190, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_soc$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=343, n=1192, method="logit")
BinomCI(x=849, n=1192, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_soc$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
sbqr
BinomCI(x=774, n=1148, method="logit")
BinomCI(x=374, n=1148, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)






###VETERINARY SCIENCES
#Creo dataset e modifico valori pop totale e weight
area_vet <- subset(DB_stata_2, course_area==7)
area_vet$pop_totale <- 1250
area_vet$weight <- 1250/123

#Creo i dataframe con dati di popolazione di ogni area e li codifico in factor
pop_sex.vet <- data.frame(sex = c(0, 1), Freq = c(260, 990))
pop_tipocorso.vet <- data.frame(course_tipo_tot = c(1, 3), Freq = c(482, 768))

pop_sex.vet$sex <- factor(pop_sex.vet$sex, levels = levels(area_vet$sex))
pop_tipocorso.vet$course_tipo_tot <- factor(pop_tipocorso.vet$course_tipo_tot, levels = levels(area_vet$course_tipo_tot))     

#Imposto i dati per survey e faccio raking
pre.design.vet <- svydesign(id=~0, data=area_vet, fpc=~pop_totale, weights=~weight)
rake <- rake(pre.design.vet, sample.margins=list(~sex, ~course_tipo_tot), population=list(pop_sex.vet, pop_tipocorso.vet))
area_vet$weights_rake <- weights(rake)

#Calcolo stime mentali grezze e calibrate
library(DescTools)

#PHQ2
phq2 <- table(area_vet$PHQ2_cat)
prop.phq <- prop.table(phq2)
phq2
BinomCI(x=49, n=113, method="logit")
BinomCI(x=64, n=113, method="logit")

svyciprop(~I(PHQ2_cat==1), rake, method = c("logit"))
svyciprop(~I(PHQ2_cat==2), rake, method = c("logit"))

#GAD2
gad2 <- table(area_vet$GAD2_cat)
prop.gad2 <- prop.table(gad2)
gad2
BinomCI(x=18, n=114, method="logit")
BinomCI(x=96, n=114, method="logit")

svyciprop(~I(GAD2_cat==1), rake, method = c("logit"))
svyciprop(~I(GAD2_cat==2), rake, method = c("logit"))

#SBQR
sbqr <- table(area_vet$SBQR_cat)
prop.sbqr <- prop.table(sbqr)
sbqr
BinomCI(x=50, n=106, method="logit")
BinomCI(x=56, n=106, method="logit")

svyciprop(~I(SBQR_cat==1), rake, method = c("logit"))
svyciprop(~I(SBQR_cat==2), rake, method = c("logit"))

#MHC-SF
mean_emo_rake <- svymean(~mhcsf_emot_tot, rake, na.rm=TRUE)
print(mean_emo_rake)
confint(mean_emo_rake)

mean_soc_rake <- svymean(~mhcsf_soc_tot, rake, na.rm=TRUE)
print(mean_soc_rake)
confint(mean_soc_rake)

mean_psy_rake <- svymean(~mhcsf_psy_tot, rake, na.rm=TRUE)
print(mean_psy_rake)
confint(mean_psy_rake)

mean_tot_rake <- svymean(~MHCSF_tot, rake, na.rm=TRUE)
print(mean_tot_rake)
confint(mean_tot_rake)







###MULTIPLE IMPUTATION
library(mice)
library(dplyr)

###Creo dataset con variabili outcome + sesso, età e nazionalità
newdataframe1 <- DB_stata_2 %>% select(course_area, course_tipo_tot, year_stud,
                                       progress, Nazionalita_2cat, age, sex, 
                                       gender_id, gender_conform_cat, sexual_orient,
                                       study_location, macarthur, fut_plans, fut_exp, 
                                       mspss_spec_finale, mspss_fam_finale, mspss_friend_finale,
                                       mspss_finale, PHQ2_cat, GAD2_cat, SBQR_cat,
                                       mhcsf_emot_tot, mhcsf_soc_tot, mhcsf_psy_tot, MHCSF_tot,
                                       erisq_over_tot, eri_ratio)


###Seleziono variabili predittori e faccio l'imputation
prediction <- quickpred(newdataframe1, mincor = 0.1, minpuc = 0.5)
imputation <- mice(newdataframe1, predictorMatrix = prediction, m=20, maxit=5)

###STIME VARIABILI CONTINUE

#Calcolo medie e varianze su dataset imputati
results <- with(imputation, {
  mean <- mean(mspss_finale)
  var <-  var(mspss_finale)
  list(mean = mean, var = var)
})

#Estraggo da "results" la media e la varianza
Q <- sapply(results$analyses, function(x) x$mean)  
U <- sapply(results$analyses, function(x) x$var)

#Metto insieme le stime da tutti i dataset
pooled_result <- pool.scalar(Q, U)

#Calcolo DS e ES
sd_combined <- sqrt(pooled_result$t)
se_combined <- sd_combined / sqrt(5284)

#Calcolo l'IC
alpha <- 0.05
t_crit <- qt(1 - alpha / 2, df = pooled_result$df)
lower_ci <- pooled_result$qbar - t_crit * se_combined
upper_ci <- pooled_result$qbar + t_crit * se_combined

#Stampa dei risultati
cat("Media:", pooled_result$qbar, "\n")
cat("DS:", sd_combined, "\n")
cat("ES:", se_combined, "\n")
cat("IC 95%: [", lower_ci, ",", upper_ci, "]\n")





#STIME VARIABILI CATEGORICHE

###Calcolo prevalenze su dataset imputati
results <- with(imputation, {
  prevalenza <- mean(PHQ2_cat==2) 
  varianza <- var(PHQ2_cat==2)
  list(prevalenza = prevalenza, varianza = varianza)
})


#Estraggo da "results" le prevalenze e le varianze
Q <- sapply(results$analyses, function(x) x$prevalenza)  
U <- sapply(results$analyses, function(x) x$varianza)

#Metto insieme le stime da tutti i dataset
pooled_result <- pool.scalar(Q = Q, U = U)

#Calcolo DS e ES
sd_combined <- sqrt(pooled_result$t)
se_combined <- sd_combined / sqrt(5284)

#Calcolo l'intervallo di confidenza
alpha <- 0.05
t_crit <- qt(1 - alpha / 2, df = pooled_result$df)

#Calcolo l'intervallo di confidenza
lower_ci <- pooled_result$qbar - t_crit * se_combined
upper_ci <- pooled_result$qbar + t_crit * se_combined

#Stampa dei risultati
cat("Prevalenza combinata:", pooled_result$qbar, "\n")
cat("Errore standard:", se_combined, "\n")
cat("IC 95%: [", lower_ci, ",", upper_ci, "]\n")



###STIME CALIBRATE
#Creo i dataframe con dati di popolazione e li codifico in factor
post.weight.sex <- data.frame(sex = c(0, 1), Freq = c(30293, 49485))
post.weight.areacorso <- data.frame(course_area = c(1, 2, 3, 4, 5, 6, 7), Freq = c(2196, 22901, 7542, 9719, 13371, 22799, 1250))
post.weight.tipocorso <- data.frame(course_tipo_tot = c(1, 2, 3), Freq = c(50462, 17268, 12048))

post.weight.sex$sex <- factor(post.weight.sex$sex, levels = levels(DB_stata_2$sex))
post.weight.areacorso$course_area <- factor(post.weight.areacorso$course_area, levels = levels(DB_stata_2$course_area))
post.weight.tipocorso$course_tipo_tot <- factor(post.weight.tipocorso$course_tipo_tot, levels = levels(DB_stata_2$course_tipo_tot))     


#Creo funzione rake per tutti i dataset
raked_designs <- lapply(1:imputation$m, function(i) {
  complete_data <- complete(imputation, i)  # Extract the ith imputed dataset
  
  #Define survey design
  design <- svydesign(id=~0, data=complete_data, fpc=~pop_totale, weights=~weight)
  
  #Apply raking
  raked_design <- rake(design, sample.margins=list(~sex, ~course_area, ~course_tipo_tot), population=list(post.weight.sex, post.weight.areacorso, post.weight.tipocorso))
  
  return(raked_design)
})


###Calcolo le stime nei vari dataset per variabili categoriche

##PHQ2, GAD2 e SBQR
estimates <- lapply(raked_designs, function(design) {
  svymean(~GAD2_cat, design)
})

#Estraggo le medie per ciascuna categoria da tutti i dataset
means_list <- lapply(estimates, function(x) coef(x))

#Estraggo gli SE per ciascuna categoria da tutti i dataset
se_list <- lapply(estimates, function(x) sqrt(diag(vcov(x))))

#Organizzo le medie per ciascuna categoria
means_category1 <- sapply(means_list, function(x) x["GAD2_cat1"])
means_category2 <- sapply(means_list, function(x) x["GAD2_cat2"])

#Organizzo gli SE per ciascuna categoria
se_category1 <- sapply(se_list, function(x) x["GAD2_cat1"])
se_category2 <- sapply(se_list, function(x) x["GAD2_cat2"])

#Calcolo DS e varianze per entrambe le categorie
sd1 <- se_category1*(sqrt(5284))
var1 <- sd1^2

sd2 <- se_category2*(sqrt(5284))
var2 <- sd2^2

##Estraggo medie e SE per ogni dataset
#Creo gli oggetti Q e U
Q1 <- means_category1
Q2 <- means_category2

U1 <- var1
U2 <- var2

#Metto insieme le stime da tutti i dataset
pooled_result1 <- pool.scalar(Q1, U1)
pooled_result2 <- pool.scalar(Q2, U2)

#Calcolo l'errore standard
sd_combined1 <- sqrt(pooled_result1$t)
se_combined1 <- sd_combined1 / sqrt(5284)

sd_combined2 <- sqrt(pooled_result2$t)
se_combined2 <- sd_combined2 / sqrt(5284)


#Quantile t per IC 95%
alpha <- 0.05
t_crit1 <- qt(1 - alpha / 2, df = pooled_result1$df)
t_crit2 <- qt(1 - alpha / 2, df = pooled_result2$df)

#Calcolo l'intervallo di confidenza
lower_ci1 <- pooled_result1$qbar - t_crit1 * se_combined1
upper_ci1 <- pooled_result1$qbar + t_crit1 * se_combined1

lower_ci2 <- pooled_result2$qbar - t_crit2 * se_combined2
upper_ci2 <- pooled_result2$qbar + t_crit2 * se_combined2

#Stampa dei risultati
cat("Prevalenza combinata:", pooled_result1$qbar, "\n")
cat("Errore standard:", se_combined1, "\n")
cat("IC 95%: [", lower_ci1, ",", upper_ci1, "]\n")

cat("Prevalenza combinata:", pooled_result2$qbar, "\n")
cat("Errore standard:", se_combined2, "\n")
cat("IC 95%: [", lower_ci2, ",", upper_ci2, "]\n")



##Study location and progress
estimates <- lapply(raked_designs, function(design) {
  svymean(~progress, design)
})

#Estraggo le medie per ciascuna categoria da tutti i dataset
means_list <- lapply(estimates, function(x) coef(x))

#Estraggo gli SE per ciascuna categoria da tutti i dataset
se_list <- lapply(estimates, function(x) sqrt(diag(vcov(x))))

#Organizzo le medie per ciascuna categoria
means_category1 <- sapply(means_list, function(x) x["progress1"])
means_category2 <- sapply(means_list, function(x) x["progress2"])
means_category3 <- sapply(means_list, function(x) x["progress3"])

#Organizzo gli SE per ciascuna categoria
se_category1 <- sapply(se_list, function(x) x["progress1"])
se_category2 <- sapply(se_list, function(x) x["progress2"])
se_category3 <- sapply(se_list, function(x) x["progress3"])

#Calcolo DS e varianze per entrambe le categorie
sd1 <- se_category1*(sqrt(8695))
var1 <- sd1^2

sd2 <- se_category2*(sqrt(8695))
var2 <- sd2^2

sd3 <- se_category3*(sqrt(8695))
var3 <- sd3^2

##Estraggo medie e SE per ogni dataset
#Creo gli oggetti Q e U
Q1 <- means_category1
Q2 <- means_category2
Q3 <- means_category3

U1 <- var1
U2 <- var2
U3 <- var3

#Metto insieme le stime da tutti i dataset
pooled_result1 <- pool.scalar(Q1, U1)
pooled_result2 <- pool.scalar(Q2, U2)
pooled_result3 <- pool.scalar(Q3, U3)

#Calcolo l'errore standard
sd_combined1 <- sqrt(pooled_result1$t)
se_combined1 <- sd_combined1 / sqrt(8695)

sd_combined2 <- sqrt(pooled_result2$t)
se_combined2 <- sd_combined2 / sqrt(8695)

sd_combined3 <- sqrt(pooled_result3$t)
se_combined3 <- sd_combined3 / sqrt(8695)

#Quantile t per IC 95%
alpha <- 0.05
t_crit1 <- qt(1 - alpha / 2, df = pooled_result1$df)
t_crit2 <- qt(1 - alpha / 2, df = pooled_result2$df)
t_crit3 <- qt(1 - alpha / 2, df = pooled_result3$df)

#Calcolo l'intervallo di confidenza
lower_ci1 <- pooled_result1$qbar - t_crit1 * se_combined1
upper_ci1 <- pooled_result1$qbar + t_crit1 * se_combined1

lower_ci2 <- pooled_result2$qbar - t_crit2 * se_combined2
upper_ci2 <- pooled_result2$qbar + t_crit2 * se_combined2

lower_ci3 <- pooled_result3$qbar - t_crit3 * se_combined3
upper_ci3 <- pooled_result3$qbar + t_crit3 * se_combined3

#Stampa dei risultati
cat("Prevalenza combinata:", pooled_result1$qbar, "\n")
cat("Errore standard:", se_combined1, "\n")
cat("IC 95%: [", lower_ci1, ",", upper_ci1, "]\n")

cat("Prevalenza combinata:", pooled_result2$qbar, "\n")
cat("Errore standard:", se_combined2, "\n")
cat("IC 95%: [", lower_ci2, ",", upper_ci2, "]\n")

cat("Prevalenza combinata:", pooled_result3$qbar, "\n")
cat("Errore standard:", se_combined3, "\n")
cat("IC 95%: [", lower_ci3, ",", upper_ci3, "]\n")








###Calcolo le stime nei vari dataset per variabili continue
estimates <- lapply(raked_designs, function(design) {
  svymean(~mhcsf_psy_tot, design)
})


##Estraggo medie e SE per ogni dataset
mean <- sapply(estimates, function(x) x["mhcsf_psy_tot"])  
se <- sapply(estimates, function(x) SE(x))

#Calcolo SD e. varianza
sd <- se*(sqrt(5284))
var <- sd^2

#Metto insieme le stime da tutti i dataset
Q <- mean
U <- var
pooled_result <- pool.scalar(Q, U)

#Calcolo la DS e l'ES pooled
sd_combined <- sqrt(pooled_result$t)
se_combined <- sd_combined / sqrt(5284)

#Calcolo l'intervallo di confidenza
alpha <- 0.05
t_crit <- qt(1 - alpha / 2, df = pooled_result$df)
lower_ci <- pooled_result$qbar - t_crit * se_combined
upper_ci <- pooled_result$qbar + t_crit * se_combined

#Stampa dei risultati
cat("Prevalenza combinata:", pooled_result$qbar, "\n")
cat("DS:", sd_combined, "\n")
cat("ES:", se_combined, "\n")
cat("IC 95%: [", lower_ci, ",", upper_ci, "]\n")




