@@ -8,52 +8,49 @@ load ("sir.data.rda") #long format input file with 1 row per event entry
8
8
#Identify potential creatinine based CKD patients (individuals with any egfr<60)
9
9
#Isolate the first qualifying test for each patient
10
10
11
- crea.rep$KDmarkE <-ifelse(!is.na(crea.rep$CKDEPIeGFR) & crea.rep$CKDEPIeGFR<60,1,0)
12
- CKsE <-crea.rep[crea.rep$KDmarkE ==1,c("PatientID","EntryDate","KDmarkE ")] #Kidney Injury flagged tests
11
+ crea.rep$KDmark <-ifelse(!is.na(crea.rep$CKDEPIeGFR) & crea.rep$CKDEPIeGFR<60,1,0)
12
+ CKs <-crea.rep[crea.rep$KDmark ==1,c("PatientID","EntryDate","KDmark ")] #Kidney Injury flagged tests
13
13
14
14
#Create a dataset including all data from patients with at least 1 KD flag:
15
- CKpotE <-crea.rep[crea.rep$PatientID %in% CKsE $PatientID,]
16
- CKpotE $EntryDate2<-as.Date(as.character(CKpotE $EntryDate),format="%Y%m%d")
15
+ CKpot <-crea.rep[crea.rep$PatientID %in% CKs $PatientID,]
16
+ CKpot $EntryDate2<-as.Date(as.character(CKpot $EntryDate),format="%Y%m%d")
17
17
18
18
#Mark a 90 day lookback period
19
- CKpotE $EntryDate1<-as.Date(as.character(CKpotE $EntryDate),format="%Y%m%d")-90
20
- CKpotE<-CKpotE [,c("PatientID","event.date","KDmarkE ","EntryDate1","EntryDate2","CKDEPIeGFR")]
19
+ CKpot $EntryDate1<-as.Date(as.character(CKpot $EntryDate),format="%Y%m%d")-90
20
+ CKpot<-CKpot [,c("PatientID","event.date","KDmark ","EntryDate1","EntryDate2","CKDEPIeGFR")]
21
21
22
- ##############################################################################################
22
+ ############################################################################################## CHECKED
23
23
#Diagnose CKD
24
24
#If eGFR under 60 is not sustained for 90 days, recode KDmark as 0
25
- for (i in 1:length(CKpotE $PatientID)){
26
- CKpotE$CKDE [i]<-min(crea.rep$KDmarkE [crea.rep$PatientID==CKpotE $PatientID[i] &
27
- crea.rep$event.date>CKpotE $EntryDate1[i] & crea.rep$event.date<=CKpotE $EntryDate2[i]])
28
- CKpotE$MaxCKDE [i]<-max(crea.rep$CKDEPIeGFR[crea.rep$PatientID==CKpotE $PatientID[i] &
29
- crea.rep$event.date>CKpotE $EntryDate1[i] & crea.rep$event.date<=CKpotE $EntryDate2[i]])
30
- CKpotE$MinCKDE [i]<-min(crea.rep$CKDEPIeGFR[crea.rep$PatientID==CKpotE $PatientID[i] &
31
- crea.rep$event.date>CKpotE $EntryDate1[i] & crea.rep$event.date<=CKpotE $EntryDate2[i]])
25
+ for (i in 1:length(CKpot $PatientID)){
26
+ CKpot$CKD [i]<-min(crea.rep$KDmark [crea.rep$PatientID==CKpot $PatientID[i] &
27
+ crea.rep$event.date>CKpot $EntryDate1[i] & crea.rep$event.date<=CKpot $EntryDate2[i]])
28
+ CKpot$MaxCKD [i]<-max(crea.rep$CKDEPIeGFR[crea.rep$PatientID==CKpot $PatientID[i] &
29
+ crea.rep$event.date>CKpot $EntryDate1[i] & crea.rep$event.date<=CKpot $EntryDate2[i]])
30
+ CKpot$MinCKD [i]<-min(crea.rep$CKDEPIeGFR[crea.rep$PatientID==CKpot $PatientID[i] &
31
+ crea.rep$event.date>CKpot $EntryDate1[i] & crea.rep$event.date<=CKpot $EntryDate2[i]])
32
32
}
33
33
#CKD is 1 if the test qualifies and there is no normal test within 3 months prior
34
34
#At this stage some are temporarily falsely positively identified that have no lookback test
35
35
36
36
#Near date match EntryDate1 (90 days prior date)- to entries from the full dataset
37
37
#neardate preferably matches to a prior entry if one is available
38
38
#if the closest match is before EntryDate1 (data from more than 90 days prior available), retain row.
39
- indx1<-neardate(CKpotE $PatientID,crea.rep$PatientID,CKpotE $EntryDate1,crea.rep$event.date,best="prior",nomatch=NA_integer_)
40
- CKpotE $Lookback<-crea.rep[indx1,"event.date"]
41
- CKpotE$CKDGEStage <-ifelse(CKpotE $Lookback<=CKpotE $EntryDate1 & CKpotE $CKDE==1,1,0)
42
- CKpotE<-CKpotE[CKpotE$CKDGEStage ==1,]
39
+ indx1<-neardate(CKpot $PatientID,crea.rep$PatientID,CKpot $EntryDate1,crea.rep$event.date,best="prior",nomatch=NA_integer_)
40
+ CKpot $Lookback<-crea.rep[indx1,"event.date"]
41
+ CKpot$CKDGStage <-ifelse(CKpot $Lookback<=CKpot $EntryDate1 & CKpot $CKDE==1,1,0)
42
+ CKpot<-CKpot[CKpot$CKDGStage ==1,]
43
43
#CKpot is a subset table of CKD qualifying tests and their markers to be merged onto crea.rep
44
- CKpotE<-unique(CKpotE)
45
-
46
-
47
- crea.rep<-merge(crea.rep,CKpotE[,c(1,2,8:10)],all.x=TRUE)
44
+ CKpot<-unique(CKpot)
45
+ crea.rep<-merge(crea.rep,CKpot[,c(1,2,8:10)],all.x=TRUE)
48
46
crea.rep$CKDGStage<-ifelse(!is.na(crea.rep$CKDGStage),2,0)
49
- crea.rep$CKDZStage<-ifelse(!is.na(crea.rep$CKDGStage),2,0)
50
47
#Stage 1 is skipped here as it cannot be identified from creatinine only, start by coding all as stage 2
51
48
table(crea.rep$CKDGStage)
52
49
53
- crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKDE >=30&crea.rep$MaxCKDE <45,3.5,crea.rep$CKDGStage)
54
- crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKDE >=45&crea.rep$MaxCKDE <60,3,crea.rep$CKDGStage)
55
- crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKDE >=15&crea.rep$MaxCKDE <30,4,crea.rep$CKDGStage)
56
- crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKDE <15,5,crea.rep$CKDGStage)
50
+ crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKD >=30&crea.rep$MaxCKD <45,3.5,crea.rep$CKDGStage)
51
+ crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKD >=45&crea.rep$MaxCKD <60,3,crea.rep$CKDGStage)
52
+ crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKD >=15&crea.rep$MaxCKD <30,4,crea.rep$CKDGStage)
53
+ crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage>0&crea.rep$MaxCKD <15,5,crea.rep$CKDGStage)
57
54
crea.rep$CKDGStage<-ifelse(is.na(crea.rep$CKDGStage),0,crea.rep$CKDGStage)
58
55
table(crea.rep$CKDGStage)
59
56
@@ -62,12 +59,6 @@ table(crea.rep$CKDGStage)
62
59
crea.rep$CKDGStage<-ifelse(crea.rep$CKDGStage==3.5,paste("3b"),paste(crea.rep$CKDGStage))
63
60
crea.rep$MaxCKDGStage<-ifelse(crea.rep$MaxCKDGStage==3.5,paste("3b"),paste(crea.rep$MaxCKDGStage))
64
61
65
- crea.rep$CKDZStage<-ifelse(crea.rep$CKDZStage>0&crea.rep$MinCKDE>=30&crea.rep$MinCKDE<45,3.5,crea.rep$CKDZStage)
66
- crea.rep$CKDZStage<-ifelse(crea.rep$CKDZStage>0&crea.rep$MinCKDE>=45&crea.rep$MinCKDE<60,3,crea.rep$CKDZStage)
67
- crea.rep$CKDZStage<-ifelse(crea.rep$CKDZStage>0&crea.rep$MinCKDE>=15&crea.rep$MinCKDE<30,4,crea.rep$CKDZStage)
68
- crea.rep$CKDZStage<-ifelse(crea.rep$CKDZStage>0&crea.rep$MinCKDE<15,5,crea.rep$CKDZStage)
69
- crea.rep$CKDZStage<-ifelse(is.na(crea.rep$CKDZStage),0,crea.rep$CKDZStage)
70
-
71
62
72
63
#########################################################################################################
73
64
@@ -88,7 +79,6 @@ crea.rep$CKDAStage<-ifelse(crea.rep$UACratio>=3&crea.rep$UACratio<30&!crea.rep$C
88
79
crea.rep$CKDAStage<-ifelse(crea.rep$UACratio>30&!crea.rep$CKDGStage=="0",3,crea.rep$CKDAStage)
89
80
90
81
#Stage CKD based on both UAC and creatinine data:
91
- crea.rep$CKDGStage<-crea.rep$CKDGEStage
92
82
crea.rep$CKDPrognosis<-crea.rep$CKDGStage
93
83
crea.rep$CKDPrognosis<-ifelse(crea.rep$CKDGStage<=2 & crea.rep$CKDAStage==2,1,crea.rep$CKDPrognosis)
94
84
crea.rep$CKDPrognosis<-ifelse(crea.rep$CKDGStage<=2 & crea.rep$CKDAStage==3,2,crea.rep$CKDPrognosis)
@@ -97,17 +87,17 @@ crea.rep$CKDPrognosis<-ifelse(crea.rep$CKDGStage==3.5 & crea.rep$CKDAStage==1,2,
97
87
crea.rep$CKDPrognosis<-ifelse(crea.rep$CKDGStage==3 & crea.rep$CKDAStage==1,1,crea.rep$CKDPrognosis)
98
88
crea.rep$CKDPrognosis<-ifelse(crea.rep$CKDGStage==3 & crea.rep$CKDAStage==2,2,crea.rep$CKDPrognosis)
99
89
100
- #Where CKD diagnosed based on creatinine, add metrics for summarised eGFR range for further phenotyping
101
- crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=60&crea.rep$MaxCKDE<90,1,NA)
102
- crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=45&crea.rep$MaxCKDE<60,2,crea.rep$CustomeGFR)
103
- crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=30&crea.rep$MaxCKDE<45,3,crea.rep$CustomeGFR)
104
- crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=15&crea.rep$MaxCKDE<30,4,crea.rep$CustomeGFR)
90
+ #Where CKD diagnosed based on creatinine, add metric for summarised eGFR range for further phenotyping
91
+ crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=60 & crea.rep$MaxCKDE<90,1,NA)
92
+ crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 & crea.rep$MaxCKDE>=60 & crea.rep$MaxCKDE<90,1,NA)
93
+ crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=45 & crea.rep$MaxCKDE<60,2,crea.rep$CustomeGFR)
94
+ crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=30 & crea.rep$MaxCKDE<45,3,crea.rep$CustomeGFR)
95
+ crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE>=15 & crea.rep$MaxCKDE<30,4,crea.rep$CustomeGFR)
105
96
crea.rep$CustomeGFR<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MaxCKDE<15,5,crea.rep$CustomeGFR)
106
97
107
- crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 & crea.rep$MinCKDE>=60 & crea.rep$MinCKDE<90,1,NA)
108
- crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=45&crea.rep$MinCKDE<60,2,crea.rep$CustomeGFR2)
109
- crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=30 & crea.rep$MinCKDE<45,3,crea.rep$CustomeGFR2)
110
- crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=15 & crea.rep$MinCKDE<30,4,crea.rep$CustomeGFR2)
111
- crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE<15,5,crea.rep$CustomeGFR2)
112
-
113
- ###################################################################################
98
+ crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=60 & crea.rep$MinCKDE<90,1,NA)
99
+ crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 & crea.rep$MinCKDE>=60 & crea.rep$MDRDeGFR<90,1,NA)
100
+ crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=45 & crea.rep$MDRDeGFR<60,2,crea.rep$CustomeGFR)
101
+ crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=30 & crea.rep$MDRDeGFR<45,3,crea.rep$CustomeGFR)
102
+ crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE>=15 & crea.rep$MDRDeGFR<30,4,crea.rep$CustomeGFR)
103
+ crea.rep$CustomeGFR2<-ifelse(crea.rep$CKDPrognosis>0 &crea.rep$MinCKDE<15,5,crea.rep$CustomeGFR)
0 commit comments