--- title: "DiPS Validation" author: "TJ" date: "2024-05-29" output: word_document: default pdf_document: default html_document: default --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) #install and load packages install.packages("tidyverse", repos = "https://cloud.r-project.org/") install.packages("psych", repos = "https://cloud.r-project.org/") install.packages("GPArotation", repos = "https://cloud.r-project.org/") install.packages("ltm", repos = "https://cloud.r-project.org/") install.packages("paran", repos = "https://cloud.r-project.org/") install.packages("lavaan") install.packages("lavaanPlot") install.packages("semPlot") library(psych) library(tidyverse) library(corpcor) library(GPArotation) library(ltm) library(paran) library(lavaan) library(lavaanPlot) library(semPlot) ``` ```{r} #load in data. dat1 = full dataset, dat2 = test-retest participants only dat <- read_csv("DiPS_data_final.csv") dat1 <- filter(dat, dips_validation_study_survey_1_complete == "2") dat2 <- filter(dat, dips_validation_study_survey_2_complete == "2") ``` ```{r} #demographics demographics1 <- dat1 %>% mutate(ethnicity = dplyr::recode(ethnicity, "1" = "Bangladeshi", "2" = "Chinese", "3" = "Indian", "4" = "Pakistani", "5" = "OtherAsian", "6" = "African", "7" = "Caribbean", "8" = "OtherBlack", "9" = "WhiteAsian", "10" = "WhiteBlackAfrican", "11" = "WhiteBlackCaribbean", "12" = "OtherMixed", "13" = "WhiteEnglish", "14" = "WhiteIrish", "15" = "WhiteGypsy", "16" = "WhiteRoma", "17" = "OtherWhite", "18" = "Arab", "19" = "OtherEthnic")) %>% mutate(gender = dplyr::recode(gender, "1" = "Male", "2" = "Female", "3" = "Non-binary", "4" = "Other", "5" = "Prefer_not")) %>% mutate(age = dplyr::recode(age, "1" = "18-24", "2" = "25-34", "3" = "35-44", "4" = "45-54", "5" = "55-64", "6" = "65+")) %>% mutate(diagnosis = dplyr::recode(diagnosis, "1" = "Schizophrenia", "2" = "Schizoaffective_disorder", "3" = "Schizotypal_disorder", "4" = "Psychotic_disorder", "5" = "Delusional_disorder", "6" = "Other", "7" = "None")) %>% mutate(medication = dplyr::recode(medication, "1" = "Yes", "2" = "No")) table(demographics1$ethnicity) table(demographics1$gender) table(demographics1$diagnosis) table(demographics1$diagnosis_other) table(demographics1$medication) table(demographics1$age) ``` ```{r} #reverse code dat1 <- dat1 %>% mutate(dips6 = dplyr::recode(dips6, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips6 = as.numeric(dips6)) %>% mutate(dips13 = dplyr::recode(dips13, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips13 = as.numeric(dips13)) %>% mutate(dips15 = dplyr::recode(dips15, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips15 = as.numeric(dips15)) %>% mutate(dips22 = dplyr::recode(dips22, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips22 = as.numeric(dips22)) %>% mutate(scs1 = dplyr::recode(scs1, "1" = "5", "2" = "4", "3" = "3", "4" = "2", "5" = "1"), scs1 = as.numeric(scs1)) %>% mutate(scs4 = dplyr::recode(scs4, "1" = "5", "2" = "4", "3" = "3", "4" = "2", "5" = "1"), scs4 = as.numeric(scs4)) %>% mutate(scs8 = dplyr::recode(scs8, "1" = "5", "2" = "4", "3" = "3", "4" = "2", "5" = "1"), scs8 = as.numeric(scs8)) %>% mutate(scs9 = dplyr::recode(scs9, "1" = "5", "2" = "4", "3" = "3", "4" = "2", "5" = "1"), scs9 = as.numeric(scs9)) %>% mutate(scs11 = dplyr::recode(scs11, "1" = "5", "2" = "4", "3" = "3", "4" = "2", "5" = "1"), scs11 = as.numeric(scs11)) %>% mutate(scs12 = dplyr::recode(scs12, "1" = "5", "2" = "4", "3" = "3", "4" = "2", "5" = "1"), scs12 = as.numeric(scs12)) %>% mutate(ismi2 = dplyr::recode(ismi2, "1" = "4", "2" = "3", "3" = "2", "4" = "1"), ismi2 = as.numeric(ismi2)) %>% mutate(ismi9 = dplyr::recode(ismi9, "1" = "4", "2" = "3", "3" = "2", "4" = "1"), ismi9 = as.numeric(ismi9)) dat2 <- dat2 %>% mutate(dips_retest6 = dplyr::recode(dips_retest6, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips_retest6 = as.numeric(dips_retest6)) %>% mutate(dips_retest13 = dplyr::recode(dips_retest13, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips_retest13 = as.numeric(dips_retest13)) %>% mutate(dips_retest15 = dplyr::recode(dips_retest15, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips_retest15 = as.numeric(dips_retest15)) %>% mutate(dips_retest22 = dplyr::recode(dips_retest22, "0" = "4", "1" = "3", "2" = "2", "3" = "1", "4" = "0"), dips_retest22 = as.numeric(dips_retest22)) ``` ```{r} #create individual measure variables dips_only <- dplyr::select(dat1, study_id, dips1:dips22) dips_only$dips1sum <- rowSums(dips_only[,-1]) dips13_only <- dplyr::select(dat1, study_id,dips2, dips4, dips6, dips7, dips8, dips9, dips10, dips12, dips13, dips14, dips17, dips21, dips22) dips13_only$dips13sum <- rowSums(dips13_only[,-1]) dips_retest_only <- dplyr::select(dat2, study_id, dips_retest1:dips_retest22) dips_retest_only$dips_retestsum <- rowSums(dips_retest_only[,-1]) dips13_retest_only <- dplyr::select(dat2, study_id,dips2, dips4, dips6, dips7, dips8, dips9, dips10, dips12, dips13, dips14, dips17, dips21, dips22) dips13_retest_only$dips13_retestsum <- rowSums(dips13_retest_only[,-1]) scs_only <- dplyr::select(dat1, study_id, scs1:scs12) scs_only$scssum <- rowSums(scs_only[,-1]) ismi_only <- dplyr::select(dat1, study_id, ismi1:ismi9) ismi_only$ismisum <- rowSums(ismi_only[,-1]) rgpts_only <- dplyr::select(dat1, study_id, r_gpts1:r_gpts18) rgpts_only$rgptssum <- rowSums(rgpts_only[,-1]) hpsvq_only <- dplyr::select(dat1, study_id, hpsvq1:hpsvq9) hpsvq_only$hpsvqsum <- rowSums(hpsvq_only[,-1]) hpsvq_VH <- filter(hpsvq_only, hpsvqsum > 0) ``` ```{r} #split sample EFA_sample <- dips_only[1:220, ] CFA_sample <- dips13_only[221:456, ] ``` ```{r} #set up factor analysis dat1FA <- dplyr::select(EFA_sample, dips1:dips22) dat_matrix <- cor(dat1FA) round(dat_matrix, 2) cortest.bartlett(dat_matrix, n=220) alpha(dat1FA) cortest.bartlett(dat1FA) det(cor(dat1FA)) KMO(dat1FA) ``` ```{r} #factor analysis DiPS13 dat2FA <- dplyr::select(dat1FA, -dips1, -dips3, -dips5, -dips11, -dips15, -dips16, -dips18, -dips19, -dips20) cortest.bartlett(dat2FA) KMO(dat2FA) det(cor(dat2FA)) cronbach.alpha(dat2FA) fa1 <- fa(dat2FA, nfactors = 13, rotate = "oblimin") summary(fa1) plot(fa1$values, type = "b") print(fa1$e.values) ``` ```{r} #parallel analysis paran(dat2FA, cfa = TRUE, graph = TRUE) ``` ```{r} #factor analysis fa1 <- fa(dat2FA, nfactors = 4, rotate = "oblimin") fa1$values factor_loadings <- fa1$loadings print(factor_loadings) display_fa <- print.psych(fa1, cut = 0.3, sort = TRUE) print.psych(fa1, cut = 0.3, sort = TRUE) ``` ```{r} #diagram colnames(fa1$loadings) <- c("Humanity", "Identity", "Personhood", "Agency") fa.diagram(fa1, "dat2FA", main = "DiPS Exploratory factor analysis") ``` ```{r} #Confirmatory Factor Analysis dat1CFA <- dplyr::select(CFA_sample, -study_id, -dips13sum) model1 <- 'Identity =~ dips2 + dips8 + dips21 Humanity =~ dips7 + dips10 + dips14 + dips17 Personhood =~ dips6 + dips13 + dips22 Agency =~ dips4 + dips9 + dips12' fit <- cfa(model1, data = dat1CFA) summary(fit, standardized = TRUE, ci = TRUE, fit.measures = TRUE) standardizedsolution(fit) ``` ```{r} #CFAdiagram label_list <- c("dips1", "dips5", "dips12", "dips4", "dips7", "dips10", "dips11", "dips3", "dips9", "dips13", "dips2", "dips6", "dips8", "Identity", "Humanity", "Personhood", "Agency") semPaths(fit, whatLabels = "std", fade = FALSE, layout = "spring", nodeLabels = label_list, nCharNodes = 10, edge.label.cex = 1, edge.label.position = 0.5, label.cex = 1, sizeLat = 8, sizeMan = 6, residuals = FALSE, color = list(lat = "skyblue", man = "white"), edge.color = "black") ``` ```{r} #floor and ceiling effects dips_floor <- filter(dips13_only, dips13sum > 0) dips_ceiling <- filter(dips13_only, dips13sum == 52) ``` ```{r} #density plot ggplot(dips13_only, aes(x = dips13sum)) + geom_density(fill = "skyblue", alpha = 0.5) + labs(title = "Density of DiPS scores", x = "Values", y = "Density") + theme_minimal() ``` ```{r} #inner join - only use for correlations validation_sums <- dips13_only %>% inner_join(scs_only, by = "study_id") %>% inner_join(ismi_only, by = "study_id") %>% inner_join(rgpts_only, by = "study_id") %>% inner_join(hpsvq_only, by = "study_id") %>% dplyr::select(dips13sum,ismisum,rgptssum,scssum,hpsvqsum) validation_sums_VH <- dips13_only %>% inner_join(scs_only, by = "study_id") %>% inner_join(ismi_only, by = "study_id") %>% inner_join(rgpts_only, by = "study_id") %>% inner_join(hpsvq_VH, by = "study_id") %>% dplyr::select(dips13sum,ismisum,rgptssum,scssum,hpsvqsum) ``` ```{r} #inner join - RETEST - only for correlations validation_sums_retest <- dips13_only %>% inner_join(scs_only, by = "study_id") %>% inner_join(ismi_only, by = "study_id") %>% inner_join(rgpts_only, by = "study_id") %>% inner_join(hpsvq_only, by = "study_id") %>% inner_join(dips13_retest_only, by = "study_id") %>% dplyr::select(dips13sum,ismisum,rgptssum,scssum,hpsvqsum, dips13_retestsum) ``` ```{r} #visualisations ggplot(data = validation_sums, aes(x = dips13sum, y = scssum)) + geom_point()+ geom_smooth(method = lm) ggplot(data = validation_sums, aes(x = dips13sum, y = rgptssum)) + geom_point()+ geom_smooth(method = lm) ggplot(data = validation_sums, aes(x = dips13sum, y = scssum)) + geom_point()+ geom_smooth(method = lm) ggplot(data = validation_sums, aes(x = dips13sum, y = hpsvqsum)) + geom_point()+ geom_smooth(method = lm) ggplot(data = validation_sums, aes(x = dips13sum, y = ismisum)) + geom_point()+ geom_smooth(method = lm) ggplot(data = validation_sums_retest, aes(x = dips13sum, y = dips13_retestsum)) + geom_point()+ geom_smooth(method = lm) ``` ```{r} #reliability dat_cronbach <- dplyr::select(dips13_only, -study_id, -dips13sum) alpha(dat_cronbach) psychosis13<-dat_cronbach[, c(1, 5, 12)] dehumanisation13<-dat_cronbach[, c(4, 7, 10, 11)] agency13<-dat_cronbach[, c(2, 6, 8)] human13<-dat_cronbach[, c(3, 9, 13)] reliabilty <- psych::alpha(dat_cronbach) reliabiltypsy<-psych::alpha(psychosis13) reliabiltyde <- psych::alpha(dehumanisation13) reliabiltyhu <- psych::alpha(human13) reliabiltyagen <- psych::alpha(agency13) ``` ```{r} #Cronbach alpha for each scale Cronbach_voices <- dplyr::select(hpsvq_only, hpsvq1:hpsvq9) alpha(Cronbach_voices) Cronbach_paranoia<- dplyr::select(rgpts_only, r_gpts1:r_gpts18) alpha(Cronbach_paranoia) Cronbach_compassion<- dplyr::select(scs_only, scs1:scs12) alpha(Cronbach_compassion) Cronbach_stigma<- dplyr::select(ismi_only, ismi1:ismi9) alpha(Cronbach_stigma) ``` ```{r} #correlations cor.test(validation_sums_VH$dips13sum, validation_sums_VH$hpsvqsum, method = "pearson") cor.test(validation_sums_VH$scssum, validation_sums_VH$hpsvqsum, method = "pearson") cor.test(validation_sums_VH$ismisum, validation_sums_VH$hpsvqsum, method = "pearson") cor.test(validation_sums_VH$rgptssum, validation_sums_VH$hpsvqsum, method = "pearson") cor.test(validation_sums$dips13sum, validation_sums$rgptssum, method = "pearson") cor.test(validation_sums$dips13sum, validation_sums$ismisum, method = "pearson") cor.test(validation_sums$dips13sum, validation_sums$hpsvqsum, method = "spearman") cor.test(validation_sums$dips13sum, validation_sums$scssum, method = "pearson") cor.test(validation_sums_retest$dips13sum, validation_sums_retest$dips13_retestsum, method = "pearson") cor.test(validation_sums$scssum, validation_sums$rgptssum, method = "pearson") cor.test(validation_sums$scssum, validation_sums$ismisum, method = "pearson") cor.test(validation_sums$scssum, validation_sums$hpsvqsum, method = "spearman") cor.test(validation_sums$ismisum, validation_sums$rgptssum, method = "pearson") cor.test(validation_sums$scssum, validation_sums$ismisum, method = "pearson") cor.test(validation_sums$ismisum, validation_sums$hpsvqsum, method = "spearman") cor.test(validation_sums$rgptssum, validation_sums$ismisum, method = "pearson") cor.test(validation_sums$rgptssum, validation_sums$hpsvqsum, method = "spearman") ```