#'Turn list of co/chronic mobidity and mental health into "ture" and "false"
#'
#' @param x the levels for patients in the original data frame to be turned into "ture" and "false"
#' @param possible numbers of possible levels for co/chronic mobidity and mental health
#' @return vectors of "ture" and "false" according to the levels of co/chronic mobidity and mental health
extractmorbidity=function(x,possible) #possible=#of possible values for 16 or 23 values for chronic / co-mobidity
{
if(x[1]==999||is.na(x[1]))
{
return(rep(F,possible))
}else{
has=rep(F,possible)
for(i in x){
has[i]=T
}
return(has)
}
}
hasrepeat=function(x,possible)
{
tab=table(x)
m=max(tab)
w=names(which.max(tab))
ifelse(m>1,w,NA)
}
#x=c(2,3,2,3,4)
#table(x)
#tab=table(t(data2[2,14:23]))
#tab["23"]
#'built a function that will count numbers of 23(mental health in comorbidity) in one patient
count23=function(x)
{
tab=table(t(x))
ans=ifelse(is.na(tab["23"]),0,tab["23"])
}
#'built a function that count the total numbers of actual mental health issue for each patient
countmh=function(x)
{
return(sum(table(t(x))))
}
#made fuction that label the specific values of each co-mobidity
extractco=function(x)
{
thenames=c("Other","Eat","Hypert","Cardio","Kidney","Retino","Wounds","Neuro","Liver",
"Vascular","Obesity","Cancer","Lipidd",
"Thyroid","Dementia","Pulmon","sleep",
"HIV","Pancreas","Celiac","Genetic","Deafblind","Mental")
M=extractmorbidity(x,23)
names(M)=thenames
return(M)
}
#made functionthat label the specific values for each chronic-morbidity
extractchronic=function(x)
{
thenames=c("COther","CNeuro","CRetino","CBlind","CCardio","CWounds",
"Amput","Skin","Lipo","Hypo",
"Diabetic","Foot","Stiff","Hear","Frac","Nephro")
M=extractmorbidity(x,16)
names(M)=thenames
return(M)
}
extractMH=function(x)
{
thenames=c("depress","OCD","schizophrenia","alcoholism","bipolar","anxiety","develop","delusional",
"psychosis","mood","drug","adjustment","alzheimers","cognitive","personality","klinfelter",
"PTSD","agaraphobia","binge","panic","cope","socialanx","manic","hoarding","eating","maladaptive",
"imsomnia","clusterc","schizo","ADD","generalizeanx","addiction")
M=extractmorbidity(x,32)
names(M)=thenames
return(M)
}
# read data in from csv
#
# a paragraph with more details about function
#
# @param file.name name of imported file
#
# @return dataframe containing all variables as appropriatly dates, factor and logicals
# @export
# @import dplyr
# @import lubridate
library(dplyr)
Readdata=function(file.name)
{
data=read.csv("../inst/extdata/finaldata.csv",header=T)
#refer the column names by numbers
#take the rows that are not NA for location and gender
#cut = converted the numbers into factors --> converted the numbers to factors of the following variables
#library(dplyr)
data %>%
dplyr::slice(1:622) ->data2
locationf=cut(data2[,2],breaks=c(0,1.2,3),labels=c("HALTON","MISSISSAUGA"))
genderf=cut(data2[,4],breaks=c(0,1.5,3),labels=c("M","F"))
agef=cut(data2[,3],breaks=c(15,35,55,75,95))
repeatreferral=cut(data2[,7],breaks=c(-1,0.5,2),labels=c("No","Yes"))
referralfrom=cut(data2[,8],breaks=c(-1,1.5,2.5,3.5,4.5,6),labels=c("primary","self","specialist","hospital","DEC"))
socialissue=cut(data2[,9],breaks=c(0,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,11,1000),
labels=c("social","community","income","elderly","smoke","drugs","housing","mobility","language","education","none"))
#consider changing the short names to the actual names
profcareplan=cut(data2[,64],breaks=c(-1,0.5,2,1000),labels=c("No","Yes","N/A"))
SelfMGoals=cut(data2[,65],breaks=c(-1,0.5,2,1000),labels=c("No","Yes","N/A"))
ExtentSelfM=cut(data2[,66],breaks=c(-1,0.5,1.5,2.5,3.5,1000),labels=c("None","Some","Most","All","N/A"))
Pdischwithtrans=cut(data2[,67],breaks=c(-1,0.5,2,1000),labels=c("No","Yes","N/A"))
DischSt=cut(data2[,69],breaks=c(0,1.5,2.5,3.5),labels=c("withdrawal","discharged","death"))
Endorefer=cut(data2[,87],breaks=c(-1,0.5,2),labels=c("no","yes"))
#extract the dates and truned them into Rdate
#obtain different duration between admit date and discharge date
#library(lubridate)
referdate=lubridate::dmy(data2[,6])
admitdate=lubridate::dmy(data2[,34])
dischargedate=lubridate::dmy(data2[,68])
#dis - data2[,73] #column 73 is numbers of weeeks between admitdate and discharge date as calculated in spreadsheet
#summary(as.numeric(dis) - data2[,73]) #checking if the calculation is consisting
#column Bu- Time in CCDC doesn't appear in the final spread sheet
#co-mo is from column 14-23
#chronic comlication is from column 24-33
#made the function for "T=pts has both morbidity and F=pts doesn't have morbidity"
como=t(apply(data2[,14:23],1,extractco))
comorep=apply(data2[,14:23],1,hasrepeat)
comorep
comomhrep=apply(data2[,14:23],1,count23)
comomhrep #'counted numbers of "23" for each patient among the comorbidity columns
actualmhrep=apply(data2[,74:78],1,countmh)
actualmhrep #'counted numbers of actual mental health issue for each patient among the mental health sections
difference=actualmhrep-comomhrep
which(difference!=0)
#'#'there are a lot of difference= 96 patients have different value
#'this show which patients have different total numbers of actual mental health issues than the mental health issue from comorbidity section
which(comomhrep>1)
table(comomhrep)
table(comorep)
which(!is.na(comorep))
#only co-morbidity has a lot of repeats
chronic=t(apply(data2[,24:33],1,extractchronic))
chronicrep=apply(data2[,24:33],1,hasrepeat)
chronicrep
table(chronicrep)
MH=t(apply(data2[,74:78],1,extractMH))
head(MH)
MHrep=apply(data2[,74:78],1,hasrepeat)
MHrep
table(MHrep)
como=as.data.frame(como)
chronic=as.data.frame(chronic)
MH=as.data.frame(MH)
#make a new dataframe (note that chronic and como factors are displaced one after the other, and chronics factors start from "Cother")
dataframe=data.frame(locationf,age=data2[,3],genderf,distance=data2[,5],referdate,repeatreferral,referralfrom,socialissue,
data2[,10:13],como,chronic,admitdate,data2[,35:49],DCweight=as.numeric(data2[,50]),data2[,51:63],profcareplan,
SelfMGoals,ExtentSelfM,Pdischwithtrans,dischargedate,DischSt,data2[,70:73],MH,data2[,79:86],Endorefer)
#column 59-60: treat 999 N/A
return(dataframe)
}
dataframe=Readdata()
head(dataframe)
#'1a.Numbers of male and female patients from each site:
outofregions <- table(dataframe$locationf,dataframe$genderf)
outofregions
prop.table(outofregions,margin=1)
#'no effect of genders - same percentage of males and females from both regions
boxplot(dataframe$age~dataframe$locationf)
#'outlier on Missussauga site
#'no great difference in midean and spread for both sites
boxplot(dataframe$distance~dataframe$locationf)
#'one outlier on the Halton site (mistake: still need to get permission from PI to change 750 to 7.5)
#'1b.numbers of patients with each social issue:
socialissues <- table(dataframe$socialissue)
socialissues
plot(dataframe$socialissue,las=2)
#'compare to the impactful issues you mentioned, the following social issues appears to be more frequent: low income, social support, smoking, elderly
#'1c.numbers of patients with each co-morbidity
a=subset(dataframe, select=c("Other","Eat","Hypert","Cardio","Kidney","Retino","Wounds",
"Neuro","Liver","Vascular","Obesity","Cancer","Lipidd","Thyroid","Dementia",
"Pulmon","sleep","HIV","Pancreas","Celiac","Celiac","Deafblind","Mental"))
a
library(tidyr)
library(dplyr)
a %>% gather(col,v,Other:Mental) %>% table()
#'1c.the co-morbidities with the highest frequency:Lipidd
#' 1c.average # of co-morbidities
sumofcomofoeachpt=apply(a,1,sum) #'how many como each pt has
summary(sumofcomofoeachpt) #each pt have avg 3 como
#'1c.numbers of patients with each chronic-morbidity
b=subset(dataframe, select=c("COther","CNeuro","CRetino","CBlind","CCardio","CWounds","Amput","Skin","Lipo","Hypo",
"Diabetic","Foot","Stiff","Hear","Frac","Nephro"))
b
b %>% gather(col,v,COther:Nephro) %>% table()
#' 1c.average # of chronic-morbidities
sumofchronicfoeachpt=apply(b,1,sum) #'how many chronicmo each pt has
summary(sumofchronicfoeachpt) #each pt have avg 1 chronic
#'1c.numbers of patients with mental health as co-morbidity:
comomental <- table(dataframe$Mental)
comomental
which(dataframe$Mental)
#'it appears that 189 patients have mental health issue as comorbidity, but there are lots of repeats (refers to line 184-185)
#'need to verify with PI
#'numbers of patients with "other" as co-morbidity
conmoother <- table(dataframe$Other)
conmoother
which(dataframe$Other)
#335 vs. 230 --> very big difference
#'numbers of patients with "eat" as co-morbidity
comoeat <- table(dataframe$Eat)
comoeat
#this is the same total numbers as per excel calculated
chronicother <- table(dataframe$COther)
chronicother
chronicamputation <- table(dataframe$Amput)
chronicamputation
#chronic numebrs are correct, no repeats
#' 1c.the range of co-morbidities/complication?? --> ask her
#' 1d. How many has mental health as one of the co-morbidities(protions of F and M have metal health issue as co-morbidity)
comomental <- table(dataframe$Mental,dataframe$genderf)
comomental
prop.table(comomental,margin=2)
#'among Male, only 25% have mental health issues, but higher proportion of female than male have mental health issue
#' #7.logistic data-mental vs. admit A1C
logisticmentaladmitedA1C=glm(Mental~admit.A1C,data=dataframe,family="binomial")
summary(logisticmentaladmitedA1C)
#'not significant (re-do this one with final data)
#' #8.logistic data-mental vs. discharged A1C
logisticmentaldischargedA1C=glm(Mental~D.C.A1C,data=dataframe,family="binomial")
summary(logisticmentaldischargedA1C)
#'almost significant
#'slope is positive = meaning as discharged A1C level increase, the patients are more likely to have mental health issue as one of co-morbidity
#this regression model "true" (2nd one after "false")
#' 2a.comparing admit and discharged clinical metrics
aggregate(cbind(admit.A1C,D.C.A1C)~genderf+agef,data=dataframe,mean)
#'average Dischaged A1C level is lower for both male and female! --> good/strong evidence + the effect is also consistant (As the change is about the same for both gender)
#'(however, the target is 6-7, both male and female patients are above target)
library(dplyr)
library(tidyr)
library(ggplot2)
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=A1C))+geom_boxplot()+facet_grid(admitdischarge~agef)
#'older pts have lower discharged A1C value + consistant difference between two genders
#'+ A1C values goes down as age increase
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n(),ybar=mean(A1C))
#' resonably large frequency for each age group
#'ask for her age group!
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
filter(is.na(A1C)) %>% select(c(admitdischarge,A1C))
#'found 116 NA(missing values) for A1C in total (more for discharged A1C)
#'2a.Lipids level(HDL cholesterol):
aggregate(cbind(admit.HDL.Cholesterol, D.C.HDL.Cholesterol)~genderf+agef,data=dataframe,mean)
#lower discharged HDL cholesterol level in male, but same for female
dataframe %>% gather(admitdischarge,LipidHDL,c(admit.HDL.Cholesterol, D.C.HDL.Cholesterol)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=LipidHDL))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,LipidHDL,c(admit.HDL.Cholesterol, D.C.HDL.Cholesterol)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2a.Lipids level(LDL cholesterol):
aggregate(cbind(admit.LDL.Cholesterol, D.C.LDL.Cholesterol)~genderf+agef,data=dataframe,mean)
#both male and female have lower discharged LDL cholesterol levle = good thing!
dataframe %>% gather(admitdischarge,LipidLDL,c(admit.LDL.Cholesterol, D.C.LDL.Cholesterol)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=LipidLDL))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,LipidLDL,c(admit.LDL.Cholesterol, D.C.LDL.Cholesterol)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2a.eGFR:
aggregate(cbind(admit.eGFR, D.C.eGFR)~genderf+agef,data=dataframe,mean)
#both male and female have lower discharged eGFR levle
dataframe %>% gather(admitdischarge,eGFR,c(admit.eGFR, D.C.eGFR)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=eGFR))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,eGFR,c(admit.eGFR, D.C.eGFR)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2a.Micro Albumin
aggregate(cbind(admit.Micro.Albumin, D.C.Micro.Albumin)~genderf+agef,data=dataframe,mean)
#increase discharged microalbumin level for male, but decrease discharged microalbumin for female
dataframe %>% gather(admitdischarge,Microalbumin,c(admit.Micro.Albumin, D.C.Micro.Albumin)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=Microalbumin))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,Microalbumin,c(admit.Micro.Albumin, D.C.Micro.Albumin)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2c.Change in QoL index (emotional burden)
dataframe %>% gather(admitdischarge,emotional-burden,c(DDS.Score.Sub.scale.A_Emotional.burden..Enrollment., DDS.Score.Sub.scale.A_Emotional.Burden..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=emotional-burden))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,emotional-burden,c(DDS.Score.Sub.scale.A_Emotional.burden..Enrollment., DDS.Score.Sub.scale.A_Emotional.Burden..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2c.Change in QoL index (physician related distress)
dataframe %>% gather(admitdischarge,physician-related,c(DDS.Score.Sub.scale.B_Physician.related.distress..Enrollment., DDS.Score.Sub.scale.B_Physician.related.distress..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=physician-related))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,physician-related,c(DDS.Score.Sub.scale.B_Physician.related.distress..Enrollment., DDS.Score.Sub.scale.B_Physician.related.distress..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2c.Change in QoL index (Regimen related distress)
dataframe %>% gather(admitdischarge,Regimen-related,c(DDS.Score.Sub.scale.C_Regimen.related.distress..Enrollment., DDS.Score.Sub.scale.C_Regimen.related.distress..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=Regimen-related))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,Regimen-related,c(DDS.Score.Sub.scale.C_Regimen.related.distress..Enrollment., DDS.Score.Sub.scale.C_Regimen.related.distress..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2c.Change in QoL index (Interpersonal distress)
dataframe %>% gather(admitdischarge,interpersonal-distress,c(DDS.Score.Sub.scale.D_Interpersonal.distress..Enrollment., DDS.Score.Sub.scale.D_Interpersonal.distress..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>%
ggplot(aes(x=genderf,y=Regimen-related))+geom_boxplot()+facet_grid(agef~admitdischarge)
dataframe %>% gather(admitdischarge,interpersonal-distress,c(DDS.Score.Sub.scale.D_Interpersonal.distress..Enrollment., DDS.Score.Sub.scale.D_Interpersonal.distress..Discharge.)) %>%
mutate(agef=cut(age,breaks=c(15,35,55,75,95))) %>% group_by(agef,genderf) %>%
summarise(n=n())
#'2d. Change in clinical metrics for subgroups: mental health patients
comomental <- table(dataframe$Mental)
comomental
aggregate(cbind(admit.HDL.Cholesterol, D.C.HDL.Cholesterol)~Mental,data=dataframe,mean)
#'patients with mental health diagnosis have almost the same HDL.cholesterol level as admission
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
ggplot(aes(x=genderf,y=A1C))+geom_boxplot()+facet_grid(Mental~admitdischarge)
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
group_by(Mental,genderf) %>%
summarise(n=n())
#'2d. Change in clinical metrics for subgroups: patients with wounds
dataframe$CWounds
aggregate(cbind(admit.HDL.Cholesterol, D.C.HDL.Cholesterol)~CWounds,data=dataframe,mean)
#'patients with chronic wounds have slightly lower HDL.cholesterol level as admission
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
ggplot(aes(x=genderf,y=A1C))+geom_boxplot()+facet_grid(CWounds~admitdischarge)
dataframe %>% gather(admitdischarge,A1C,c(admit.A1C,D.C.A1C)) %>%
group_by(CWounds,genderf) %>%
summarise(n=n())
#'2e.Does # social issues and co-morbidities impact health outcomes, to what extent
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.