Exploratory Data Analysis

Load libraries and data

#####################Read and Pre-Clean the Data#######################
require(Amelia)
## Loading required package: Amelia
## Loading required package: Rcpp
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.7.6, built: 2019-11-24)
## ## Copyright (C) 2005-2020 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
library(car)
## Loading required package: carData
library(corrplot)
## corrplot 0.84 loaded
library(ggcorrplot)
## Loading required package: ggplot2
library(heplots)
library(kableExtra)
library(MANOVA.RM)
## Warning: package 'MANOVA.RM' was built under R version 4.0.3
library(MASS)
library(MVN)
## Warning: package 'MVN' was built under R version 4.0.3
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## sROC 0.1-2 loaded
library(mvtnorm)
require(psych) #to describe
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## The following object is masked from 'package:car':
## 
##     logit
require(ggplot2)
library(ggcorrplot)
library(qcc)
## Warning: package 'qcc' was built under R version 4.0.3
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
require(reticulate) #to use Python in R as well
## Loading required package: reticulate
require(ResourceSelection)
## Loading required package: ResourceSelection
## ResourceSelection 0.3-5   2019-07-22
library(rstatix)
## Warning: package 'rstatix' was built under R version 4.0.3
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:MASS':
## 
##     select
## The following object is masked from 'package:ggcorrplot':
## 
##     cor_pmat
## The following object is masked from 'package:stats':
## 
##     filter
library(tidyverse)
## -- Attaching packages ---------------------------------------- tidyverse 1.3.0 --
## v tibble  3.0.3     v dplyr   1.0.2
## v tidyr   1.1.2     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## v purrr   0.3.4
## -- Conflicts ------------------------------------------- tidyverse_conflicts() --
## x psych::%+%()        masks ggplot2::%+%()
## x psych::alpha()      masks ggplot2::alpha()
## x dplyr::filter()     masks rstatix::filter(), stats::filter()
## x dplyr::group_rows() masks kableExtra::group_rows()
## x dplyr::lag()        masks stats::lag()
## x dplyr::recode()     masks car::recode()
## x dplyr::select()     masks rstatix::select(), MASS::select()
## x purrr::some()       masks car::some()
corfunction=function(d){
  mycorr=cor(d[, 1:ncol(d)]); p.mat=ggcorrplot::cor_pmat(d[,1:ncol(d)])
  myplot=ggcorrplot(mycorr, hc.order=TRUE,type="lower",colors=c("red", "white","green"),tl.cex = 8, tl.col = "black", lab=TRUE, lab_size=2, p.mat=p.mat, insig="pch", pch=4)
  print(myplot)}

mydata=read.csv("C:/Users/lfult/Desktop/PaulaEcho/global.csv", stringsAsFactors = TRUE)
colnames(mydata)
##  [1] "PrePost"               "Duration..in.seconds." "Date"                 
##  [4] "Profession"            "Specialization"        "Practice"             
##  [7] "Years"                 "Knowledge"             "Recent"               
## [10] "Texas"                 "Cause"                 "Saliva"               
## [13] "Location"              "Prevalence"            "Onset"                
## [16] "Symptoms"              "Diagnosis"             "AntiT_Drugs"          
## [19] "Prevention"            "Score"                 "Age"                  
## [22] "Ethnicity"             "Gender"                "Screened"             
## [25] "Tested"
#########################################################################

Check Missing

We have true missing for Quantitative Methods, as that section was recently added.

#########################################################################
missmap(mydata)

#########################################################################

Descriptives

Gender

#########################################################################
as.data.frame(100*round(table(mydata$Gender)/length(mydata$Gender),4))%>%
  kbl(col.names = c("Gender", "%"))%>%kable_classic(full_width=F)
Gender %
Female 73.3
Male 26.7
#########################################################################

Ethnicity

#########################################################################
as.data.frame(100*round(table(mydata$Ethnicity)/length(mydata$Ethnicity),4))%>%
  kbl(col.names = c("Ethnicity", "%"))%>%kable_classic(full_width=F)
Ethnicity %
Hispanic 49.51
Non-Hispanic 46.60
Prefer not to respond 3.88
#########################################################################

Age

#########################################################################
as.data.frame(100*round(table(mydata$Age)/length(mydata$Age),4))%>%
  kbl(col.names = c("Age", "%"))%>%kable_classic(full_width=F)
Age %
18 to 24 6.80
25 to 34 18.45
35 to 44 27.18
45 to 64 39.32
65 and over 6.80
Prefer not to respond 1.46
#########################################################################

Profession

#########################################################################
as.data.frame(100*round(table(mydata$Profession)/length(mydata$Profession),4))%>%
  kbl(col.names = c("Profession", "%"))%>%kable_classic(full_width=F)
Profession %
CHW 25.24
DVM 4.37
MD/DO 34.95
NP/PA 2.91
Other 32.52
#########################################################################

Specialization

#########################################################################
as.data.frame(100*round(table(mydata$Specialization)/length(mydata$Specialization),4))%>%
  kbl(col.names = c("Specialization", "%"))%>%kable_classic(full_width=F)
Specialization %
52.91
Air Force idmt 0.49
Air Force IDMT 0.49
Biomedicine 0.49
Community health 17.96
DC 0.49
economist 0.49
Economist 0.49
Epidemiologist 1.46
FSC 0.49
Infectious disease,Cardiology,General practitioner/Family physician,Community health 0.49
LVN 0.49
Microbiologist 0.49
MLS 0.49
Other / Does not apply 5.34
Ph.D. / Post-Grad / Faculty 5.34
PharmD / MPharm / Pharm Student 5.83
PT, MHA, PhD 0.49
Public Health 1.94
R&D Industry 0.49
RCS 0.49
Student 1.94
Zoonosis Control Program Specialist 0.49
#########################################################################

Knowledge

#########################################################################

myt=table(mydata$PrePost,mydata$Knowledge)
myt=myt/rowSums(myt)
colnames(myt)=c("None", "Very Limited", "Limited", "Good", "Excellent")
row.names(myt)=c("Pre","Post")
myt=round(100*myt, 4)
myt%>%
  kbl()%>%kable_classic(full_width=F)
None Very Limited Limited Good Excellent
Pre 8.3871 16.7742 34.1935 33.5484 7.0968
Post 0.0000 5.8824 23.5294 56.8627 13.7255
#########################################################################

Knowledge

#########################################################################

myt=table(mydata$PrePost,mydata$Recent)
myt=myt/rowSums(myt)
colnames(myt)=c("Not at all Confident", "Somewhat Confident", "Confident", "Very Confident")
row.names(myt)=c("Pre","Post")
myt=round(100*myt, 4)
myt%>%
  kbl()%>%kable_classic(full_width=F)
Not at all Confident Somewhat Confident Confident Very Confident
Pre 36.7742 35.4839 19.3548 8.3871
Post 1.9608 19.6078 54.9020 23.5294
#########################################################################

Score Pre-Post

mydata$PrePost2=mydata$PrePost
mydata$PrePost=as.factor(mydata$PrePost)
levels(mydata$PrePost)=c("Pre", "Post")
boxplot(mydata$Score~mydata$PrePost, main="Knowledge Score, Pre vs. Post",notch=TRUE, col=c("red", "dark green"), horizontal = TRUE)

Subscores

Correlations

Test questions are uncorrelated.

#########################################################################
mycorr=cor(mydata[, c(10:19)])
corfunction(mycorr)

#########################################################################

Pre-Test

We would expect poor performance on the pre-test scores. Students are likely to have only 3308 as the basis for knowledge.

#########################################################################
pre=round(describe(mydata[mydata$PrePost=="Pre",10:19]), 3)

pre%>%kbl(caption="Pre-Test")%>%kable_classic(full_width = F, html_font = "Cambria")
Pre-Test
vars n mean sd median trimmed mad min max range skew kurtosis se
Texas 1 155 0.981 0.138 1 1.000 0 0 1 1 -6.910 46.047 0.011
Cause 2 155 0.794 0.406 1 0.864 0 0 1 1 -1.436 0.064 0.033
Saliva 3 155 0.374 0.485 0 0.344 0 0 1 1 0.515 -1.746 0.039
Location 4 155 0.890 0.314 1 0.984 0 0 1 1 -2.474 4.148 0.025
Prevalence 5 155 0.465 0.500 0 0.456 0 0 1 1 0.141 -1.993 0.040
Onset 6 155 0.710 0.455 1 0.760 0 0 1 1 -0.915 -1.170 0.037
Symptoms 7 155 0.271 0.446 0 0.216 0 0 1 1 1.021 -0.964 0.036
Diagnosis 8 155 0.600 0.491 1 0.624 0 0 1 1 -0.404 -1.848 0.039
AntiT_Drugs 9 155 0.710 0.455 1 0.760 0 0 1 1 -0.915 -1.170 0.037
Prevention 10 155 0.277 0.449 0 0.224 0 0 1 1 0.985 -1.037 0.036
#########################################################################

Post-Test

We would hope that our work teaching the students resulted in better scores. These are the raw descriptives. We will look at pre-post later.

#########################################################################
post=round(describe(mydata[mydata$PrePost=="Post",10:19]), 3)

pre%>%kbl(caption="Post-Test")%>%kable_classic(full_width = F, html_font = "Cambria")
Post-Test
vars n mean sd median trimmed mad min max range skew kurtosis se
Texas 1 155 0.981 0.138 1 1.000 0 0 1 1 -6.910 46.047 0.011
Cause 2 155 0.794 0.406 1 0.864 0 0 1 1 -1.436 0.064 0.033
Saliva 3 155 0.374 0.485 0 0.344 0 0 1 1 0.515 -1.746 0.039
Location 4 155 0.890 0.314 1 0.984 0 0 1 1 -2.474 4.148 0.025
Prevalence 5 155 0.465 0.500 0 0.456 0 0 1 1 0.141 -1.993 0.040
Onset 6 155 0.710 0.455 1 0.760 0 0 1 1 -0.915 -1.170 0.037
Symptoms 7 155 0.271 0.446 0 0.216 0 0 1 1 1.021 -0.964 0.036
Diagnosis 8 155 0.600 0.491 1 0.624 0 0 1 1 -0.404 -1.848 0.039
AntiT_Drugs 9 155 0.710 0.455 1 0.760 0 0 1 1 -0.915 -1.170 0.037
Prevention 10 155 0.277 0.449 0 0.224 0 0 1 1 0.985 -1.037 0.036
#########################################################################

Comparisons

We compare pre-means versus post-means

mydf=data.frame("Pre-test"=pre$mean, "Post-test"=post$mean)
rownames(mydf)=colnames(mydata[10:19])

mydf%>%kbl(caption="Comparison of Means")%>%kable_classic(full_width = F, html_font = "Cambria")
Comparison of Means
Pre.test Post.test
Texas 0.981 1.000
Cause 0.794 0.980
Saliva 0.374 0.608
Location 0.890 0.980
Prevalence 0.465 0.765
Onset 0.710 0.784
Symptoms 0.271 0.235
Diagnosis 0.600 0.569
AntiT_Drugs 0.710 0.882
Prevention 0.277 0.235

Simple Inferentials

Unpaired t-tests

#########################################################################

myf=function(x,y){
  
  myt=t.test(x, y)
  newp=round(p.adjust(myt$p.value),3)
  a=c(round(myt$estimate[1],3),round(myt$estimate[2],3),
      round(myt$conf.int[1],3),   
      round(myt$conf.int[2],3),round(myt$statistic,3), 
      round(myt$parameter,3),round(newp,3))
  return(a)
  
}

p1=mydata[mydata$PrePost=="Pre",]
p2=mydata[mydata$PrePost=="Post",]
a=matrix(rep(NA, 7*11), 11)
for (i in 1:11){a[i,1:7]=myf(p1[,i+9], p2[,i+9])}
a=as.data.frame(a)
for (i in 1:6){a[,i]=as.numeric(a[,i])}
rownames(a)=colnames(mydata[10:20])
colnames(a)=c("Mean Pre","Mean Post","Lower 95% CI", "Upper 95% CI", "t-Value", "df", "Holm-Adjusted p")
a%>%kbl()%>%kable_classic()
Mean Pre Mean Post Lower 95% CI Upper 95% CI t-Value df Holm-Adjusted p
Texas 0.981 1.000 -0.041 0.003 -1.743 154.000 0.083
Cause 0.794 0.980 -0.262 -0.112 -4.910 203.544 0.000
Saliva 0.374 0.608 -0.391 -0.076 -2.947 84.201 0.004
Location 0.890 0.980 -0.153 -0.027 -2.822 186.353 0.005
Prevalence 0.465 0.765 -0.443 -0.157 -4.157 98.513 0.000
Onset 0.710 0.784 -0.211 0.062 -1.086 92.658 0.280
Symptoms 0.271 0.235 -0.103 0.175 0.511 88.354 0.611
Diagnosis 0.600 0.569 -0.129 0.191 0.390 84.059 0.697
AntiT_Drugs 0.710 0.882 -0.288 -0.057 -2.955 119.142 0.004
Prevention 0.277 0.235 -0.097 0.181 0.602 88.935 0.549
Score 0.607 0.704 -0.148 -0.046 -3.763 120.345 0.000
p1=mydata[mydata$Profession=="CHW",]
p2=mydata[mydata$Profession!="CHW",]
a=matrix(rep(NA, 7*11), 11)
for (i in 1:11){a[i,1:7]=myf(p1[,i+9], p2[,i+9])}
a=as.data.frame(a)
for (i in 1:6){a[,i]=as.numeric(a[,i])}
rownames(a)=colnames(mydata[10:20])
colnames(a)=c("Mean CHW","Mean non-CHW","Lower 95% CI", "Upper 95% CI", "t-Value", "df", "Holm-Adjusted p")
a%>%kbl()%>%kable_classic()
Mean CHW Mean non-CHW Lower 95% CI Upper 95% CI t-Value df Holm-Adjusted p
Texas 0.962 0.994 -0.087 0.024 -1.154 57.039 0.253
Cause 0.712 0.883 -0.308 -0.035 -2.503 68.887 0.015
Saliva 0.462 0.422 -0.120 0.199 0.491 86.736 0.625
Location 0.904 0.916 -0.105 0.082 -0.250 83.279 0.803
Prevalence 0.481 0.558 -0.238 0.083 -0.963 86.971 0.338
Onset 0.404 0.838 -0.583 -0.284 -5.792 71.171 0.000
Symptoms 0.038 0.338 -0.391 -0.207 -6.398 197.006 0.000
Diagnosis 0.442 0.643 -0.359 -0.042 -2.519 84.833 0.014
AntiT_Drugs 0.769 0.747 -0.114 0.159 0.327 89.875 0.744
Prevention 0.173 0.299 -0.254 0.003 -1.944 104.604 0.055
Score 0.535 0.664 -0.185 -0.073 -4.606 97.956 0.000
#########################################################################

Models

Regression

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
mydata$CHW=mydata$Profession
mydata$CHW=rep(0, nrow(mydata))
mydata$CHW[mydata$Profession=="CHW"]=1
mydata$CHW=as.numeric(mydata$CHW)
mydata$Female=as.numeric(mydata$Gender)
mydata$Female[mydata$Female==2]=0
mylm=lm(Score~Age+Female+Ethnicity+Knowledge+Recent+CHW+PrePost2, data=mydata)
summary(mylm)$coefficients%>%kbl()%>%kable_classic(html_font = 'Cambria')
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.2081394 0.0568646 3.6602617 0.0003252
Age25 to 34 0.2330511 0.0482367 4.8314091 0.0000028
Age35 to 44 0.1677854 0.0479785 3.4970959 0.0005837
Age45 to 64 0.1702103 0.0460639 3.6950899 0.0002862
Age65 and over 0.1741708 0.0604918 2.8792446 0.0044363
AgePrefer not to respond 0.1916403 0.1010143 1.8971607 0.0592999
Female -0.0169473 0.0254994 -0.6646171 0.5070888
EthnicityNon-Hispanic 0.0957541 0.0284595 3.3645727 0.0009248
EthnicityPrefer not to respond -0.0192610 0.0610587 -0.3154513 0.7527599
Knowledge 0.0637281 0.0157578 4.0442290 0.0000758
Recent 0.0039090 0.0170409 0.2293894 0.8188091
CHW -0.0685608 0.0332813 -2.0600388 0.0407367
PrePost2 0.0787416 0.0286512 2.7482844 0.0065591
summary(mylm)
## 
## Call:
## lm(formula = Score ~ Age + Female + Ethnicity + Knowledge + Recent + 
##     CHW + PrePost2, data = mydata)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.44242 -0.10403 -0.00328  0.10646  0.44117 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     0.208139   0.056865   3.660 0.000325 ***
## Age25 to 34                     0.233051   0.048237   4.831 2.76e-06 ***
## Age35 to 44                     0.167785   0.047979   3.497 0.000584 ***
## Age45 to 64                     0.170210   0.046064   3.695 0.000286 ***
## Age65 and over                  0.174171   0.060492   2.879 0.004436 ** 
## AgePrefer not to respond        0.191640   0.101014   1.897 0.059300 .  
## Female                         -0.016947   0.025499  -0.665 0.507089    
## EthnicityNon-Hispanic           0.095754   0.028460   3.365 0.000925 ***
## EthnicityPrefer not to respond -0.019261   0.061059  -0.315 0.752760    
## Knowledge                       0.063728   0.015758   4.044 7.58e-05 ***
## Recent                          0.003909   0.017041   0.229 0.818809    
## CHW                            -0.068561   0.033281  -2.060 0.040737 *  
## PrePost2                        0.078742   0.028651   2.748 0.006559 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1509 on 193 degrees of freedom
## Multiple R-squared:  0.4251, Adjusted R-squared:  0.3893 
## F-statistic: 11.89 on 12 and 193 DF,  p-value: < 2.2e-16
hist(mylm$residuals, col="blue", main="Residuals")

MANCOVA for Subscores

Ethnicity, previous knowledge, and pre-post status are the primary predictors for the subscores.

attach(mydata)
myt=powerTransform(cbind(Texas, Cause, Saliva, Location, Prevalence, 
                        Onset, Symptoms, Diagnosis, AntiT_Drugs, Prevention)+.1)

mydata$nTexas=(mydata$Texas+.1)^myt$lambda[1]
mydata$nCause=(mydata$Cause+.1)^myt$lambda[2]
mydata$nSaliva=(mydata$Saliva+.1)^myt$lambda[3]
mydata$nLocation=(mydata$Location+.1)^myt$lambda[4]
mydata$nPrevalence=(mydata$Prevalence+.1)^myt$lambda[5]
mydata$nOnset=(mydata$Onset+.1)^myt$lambda[6]
mydata$nSymptoms=(mydata$Symptoms+.1)^myt$lambda[7]
mydata$nDiagnosis=(mydata$Diagnosis+.1)^myt$lambda[8]
mydata$nAntiT_Drugs=(mydata$AntiT_Drugs+.1)^myt$lambda[9]
mydata$nPrevention=(mydata$Prevention+.1)^myt$lambda[10]

res.man <- manova(cbind(nTexas, nCause, nSaliva, nLocation, nPrevalence, 
                        nOnset, nSymptoms, nDiagnosis, nAntiT_Drugs, nPrevention) ~
                    Gender+Ethnicity+PrePost, data = mydata)
summary(res.man, intercept=TRUE)
##              Df  Pillai approx F num Df den Df    Pr(>F)    
## (Intercept)   1 0.99261  2580.60     10    192 < 2.2e-16 ***
## Gender        1 0.08047     1.68     10    192 0.0877653 .  
## Ethnicity     2 0.24541     2.70     20    386 0.0001262 ***
## PrePost       1 0.15831     3.61     10    192 0.0002023 ***
## Residuals   201                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary.aov(res.man, intercept = TRUE)
##  Response nTexas :
##              Df Sum Sq Mean Sq    F value Pr(>F)    
## (Intercept)   1  47008   47008 13782.8521 <2e-16 ***
## Gender        1      4       4     1.0964 0.2963    
## Ethnicity     2      1       0     0.1258 0.8819    
## PrePost       1      5       5     1.3395 0.2485    
## Residuals   201    686       3                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nCause :
##              Df  Sum Sq Mean Sq   F value    Pr(>F)    
## (Intercept)   1 237.291 237.291 1165.7210 < 2.2e-16 ***
## Gender        1   0.001   0.001    0.0071 0.9329440    
## Ethnicity     2   1.438   0.719    3.5317 0.0310832 *  
## PrePost       1   2.682   2.682   13.1769 0.0003596 ***
## Residuals   201  40.915   0.204                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nSaliva :
##              Df Sum Sq Mean Sq   F value    Pr(>F)    
## (Intercept)   1 575.80  575.80 1634.1116 < 2.2e-16 ***
## Gender        1   0.02    0.02    0.0628 0.8023148    
## Ethnicity     2   2.79    1.40    3.9611 0.0205464 *  
## PrePost       1   4.05    4.05   11.4943 0.0008403 ***
## Residuals   201  70.82    0.35                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nLocation :
##              Df Sum Sq Mean Sq   F value  Pr(>F)    
## (Intercept)   1 426.14  426.14 2166.0037 < 2e-16 ***
## Gender        1   0.04    0.04    0.2033 0.65253    
## Ethnicity     2   0.27    0.14    0.6895 0.50301    
## PrePost       1   0.94    0.94    4.7961 0.02967 *  
## Residuals   201  39.54    0.20                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nPrevalence :
##              Df  Sum Sq Mean Sq   F value    Pr(>F)    
## (Intercept)   1 146.516 146.516 4658.4490 < 2.2e-16 ***
## Gender        1   0.068   0.068    2.1727  0.142047    
## Ethnicity     2   0.384   0.192    6.1060  0.002665 ** 
## PrePost       1   0.630   0.630   20.0440 1.267e-05 ***
## Residuals   201   6.322   0.031                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nOnset :
##              Df  Sum Sq Mean Sq  F value    Pr(>F)    
## (Intercept)   1 144.935 144.935 686.6143 < 2.2e-16 ***
## Gender        1   1.850   1.850   8.7658 0.0034385 ** 
## Ethnicity     2   3.099   1.550   7.3411 0.0008373 ***
## PrePost       1   0.733   0.733   3.4729 0.0638400 .  
## Residuals   201  42.429   0.211                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nSymptoms :
##              Df Sum Sq Mean Sq  F value    Pr(>F)    
## (Intercept)   1  71593   71593 749.1910 < 2.2e-16 ***
## Gender        1    448     448   4.6902   0.03151 *  
## Ethnicity     2   3431    1715  17.9514 6.713e-08 ***
## PrePost       1     15      15   0.1596   0.68995    
## Residuals   201  19208      96                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nDiagnosis :
##              Df  Sum Sq Mean Sq  F value Pr(>F)    
## (Intercept)   1 118.109 118.109 976.5792 <2e-16 ***
## Gender        1   0.146   0.146   1.2079 0.2731    
## Ethnicity     2   0.490   0.245   2.0245 0.1348    
## PrePost       1   0.000   0.000   0.0022 0.9625    
## Residuals   201  24.309   0.121                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nAntiT_Drugs :
##              Df  Sum Sq Mean Sq  F value    Pr(>F)    
## (Intercept)   1 158.505 158.505 694.9111 < 2.2e-16 ***
## Gender        1   0.179   0.179   0.7828  0.377352    
## Ethnicity     2   0.921   0.460   2.0178  0.135628    
## PrePost       1   1.675   1.675   7.3453  0.007305 ** 
## Residuals   201  45.847   0.228                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response nPrevention :
##              Df Sum Sq Mean Sq  F value Pr(>F)    
## (Intercept)   1  59243   59243 623.5895 <2e-16 ***
## Gender        1      6       6   0.0589 0.8086    
## Ethnicity     2    284     142   1.4958 0.2266    
## PrePost       1     15      15   0.1597 0.6899    
## Residuals   201  19096      95                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1