Created
September 17, 2019 19:26
-
-
Save Craigson/2709a2317b30f607008df02e1a0506f1 to your computer and use it in GitHub Desktop.
Calculating CVD risk for patients
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Formula = function (appmodel){ | |
var self= this; | |
var debug = false; | |
self.s010 = function() { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale()) i = 0.95334; | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale()) i = 0.96652; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) i = 0.89536; | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) i = 0.91436; | |
return i; | |
}; | |
self.mnxb = function() { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale()) i = 86.61; | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale()) i = -29.18; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) i = 19.54; | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) i = 61.18; | |
return i; | |
}; | |
//Optimal Values using baseline | |
self.lnage = function() { | |
if(appmodel.isFollowUp()) | |
return Math.log(appmodel.Form().BaselineAge()); | |
else | |
return Math.log(appmodel.Form().Age()); | |
}; | |
self.lnBaseLineUpage = function() { | |
return Math.log(appmodel.Form().BaselineAge()); | |
}; | |
self.lnFollowUpage = function() { | |
return Math.log(appmodel.Form().Age()); | |
}; | |
self.opt_lnhdl = function() { | |
return Math.log(50); | |
}; | |
self.opt_lntot = function() { | |
return Math.log(170); | |
}; | |
self.opt_trlnsbp = function() { | |
return Math.log(110) * Number(false) | |
}; | |
self.opt_ntlnsbp = function() { | |
return Math.log(110) * Number(!false) | |
}; | |
self.opt_age2 = function(isFollowUp) { | |
if(isFollowUp) | |
return self.lnFollowUpage() * self.lnFollowUpage(); | |
else | |
return self.lnage() * self.lnage(); | |
}; | |
self.opt_agetc = function(isFollowUp) { | |
if(isFollowUp) | |
return self.opt_lntot() * self.lnFollowUpage(); | |
else | |
return self.opt_lntot() * self.lnage(); | |
}; | |
self.opt_agehdl = function(isFollowUp) { | |
if(isFollowUp) | |
return self.opt_lnhdl() * self.lnFollowUpage(); | |
else | |
return self.opt_lnhdl() * self.lnage(); | |
}; | |
self.opt_agetsbp = function(isFollowUp) { | |
if(isFollowUp) | |
return self.lnFollowUpage() * self.opt_trlnsbp(); | |
else | |
return self.lnage() * self.opt_trlnsbp(); | |
}; | |
self.opt_agentsbp = function(isFollowUp) { | |
if(isFollowUp) | |
return self.lnFollowUpage() * self.opt_ntlnsbp(); | |
else | |
return self.lnage() * self.opt_ntlnsbp(); | |
}; | |
self.otp_agesmoke = function() { | |
return self.lnage() * Number(false); | |
}; | |
self.opt_agedm = function() { | |
return self.lnage() * Number(false); | |
}; | |
self.optimalPredictCalculate = function(isFollowUp) { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = 17.1141 * (isFollowUp ? self.lnFollowUpage(): self.lnage()) + 0.9396 * self.opt_lntot() + (-18.9196 * self.opt_lnhdl()) + 4.4748 * self.opt_agehdl(isFollowUp) + 29.2907 * self.opt_trlnsbp() + (-6.4321 * self.opt_agetsbp(isFollowUp)) + 27.8197 * self.opt_ntlnsbp() + (-6.0873 * self.opt_agentsbp(isFollowUp)) + 0.6908 * Number(false) + 0.8738 * Number(false); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = (-29.799 * (isFollowUp ? self.lnFollowUpage(): self.lnage())) + 4.884 * self.opt_age2() + 13.54 * self.opt_lntot() + (-3.114 * self.opt_agetc(isFollowUp)) + (-13.578 * self.opt_lnhdl()) + 3.149 * self.opt_agehdl(isFollowUp) + 2.019 * self.opt_trlnsbp() + 1.957 * self.opt_ntlnsbp() + 7.574 * Number(false) + (-1.665 * self.otp_agesmoke(isFollowUp)) + 0.661 * Number(false); | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 2.469 * (isFollowUp ? self.lnFollowUpage(): self.lnage()) + 0.302 * self.opt_lntot() + (-0.307 * self.opt_lnhdl()) + 1.916 * self.opt_trlnsbp() + 1.809 * self.opt_ntlnsbp() + 0.549 * Number(false) + 0.645 * Number(false); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 12.344 * (isFollowUp ? self.lnFollowUpage(): self.lnage()) + 11.853 * self.opt_lntot() + (-2.664 * self.opt_agetc(isFollowUp)) + (-7.99 * self.opt_lnhdl()) + 1.769 * self.opt_agehdl(isFollowUp) + 1.797 * self.opt_trlnsbp() + 1.764 * self.opt_ntlnsbp() + 7.837 * Number(false) + (-1.795 * self.otp_agesmoke(isFollowUp)) + 0.658 * Number(false); | |
if(debug) | |
console.log(i); | |
return i; | |
}; | |
self.optimalCvdPredict = function(isFollowUp) { | |
var i; | |
i= (1 - Math.pow(self.s010(), Math.exp( self.optimalPredictCalculate(isFollowUp) - self.mnxb()))); | |
if (debug) | |
console.log(i); | |
return i; | |
}; | |
//Sheet(10-Year ASCVD Follow up) OPTIMAL Floor Value derived using the OPTIMAL level - G28 | |
self.optimalBaselineRisk = function(){ | |
var i = '~%'; | |
var predValue = self.optimalCvdPredict(false); | |
if (predValue != 1 && !isNaN(predValue)) { | |
var number = predValue * 100 | |
if (debug) | |
console.log(number); | |
i = number.toFixed(1) + '%'; | |
} | |
return i; | |
}; | |
//Sheet(10-Year ASCVD Follow up) OPTIMAL Floor Value derived UPDATED AGE - G59 | |
self.optimalFollowUpRisk = function(){ | |
var i = '~%'; | |
var predValue = self.optimalCvdPredict(true); | |
if (predValue != 1 && !isNaN(predValue)) { | |
var number = predValue * 100 | |
i = number.toFixed(1) + '%'; | |
} | |
return i; | |
}; | |
//ASCVD Risk calculation factors | |
self.lnhdl = function(isCurrent) { | |
if(isCurrent) | |
return Math.log(appmodel.Form().HDLCholesterol()); | |
else | |
return Math.log(appmodel.Form().BaselineHDLCholesterol()); | |
}; | |
self.lntot = function(isCurrent) { | |
if(isCurrent) | |
return Math.log(appmodel.Form().TotalCholesterol()); | |
else | |
return Math.log(appmodel.Form().BaselineTotalCholesterol()); | |
}; | |
self.trlnsbp = function(isCurrent) { | |
if(isCurrent) | |
return Math.log(appmodel.Form().BloodPressure()) * Number(appmodel.Form().isHypertension()); | |
else | |
return Math.log(appmodel.Form().BaselineBloodPressure()) * Number(appmodel.Form().isBaseLineHypertension()); | |
}; | |
self.ntlnsbp = function(isCurrent) { | |
if(isCurrent) | |
return Math.log(appmodel.Form().BloodPressure()) * Number(!appmodel.Form().isHypertension()); | |
else | |
return Math.log(appmodel.Form().BaselineBloodPressure()) * Number(!appmodel.Form().isBaseLineHypertension()); | |
}; | |
self.age2 = function(isCurrent) { | |
if(isCurrent) | |
return self.lnFollowUpage() * self.lnFollowUpage(); | |
else | |
return self.lnage() * self.lnage(); | |
}; | |
self.agetc = function(isCurrent) { | |
if(isCurrent) | |
return self.lntot(isCurrent) * self.lnFollowUpage(); | |
else | |
return self.lntot() * self.lnage(); | |
}; | |
self.agehdl = function(isCurrent) { | |
if(isCurrent) | |
return self.lnhdl(isCurrent) * self.lnFollowUpage(); | |
else | |
return self.lnhdl() * self.lnage(); | |
}; | |
self.agetsbp = function(isCurrent) { | |
if(isCurrent) | |
return self.lnFollowUpage() * self.trlnsbp(isCurrent); | |
else | |
return self.lnage() * self.trlnsbp(); | |
}; | |
self.agentsbp = function(isCurrent) { | |
if(isCurrent) | |
return self.lnFollowUpage() * self.ntlnsbp(isCurrent); | |
else | |
return self.lnage() * self.ntlnsbp(); | |
}; | |
//Need to check smoker case in case of baseline | |
self.agesmoke = function(isCurrent) { | |
if(isCurrent) | |
return self.lnFollowUpage() * Number(appmodel.Form().isSmoker()); | |
else | |
return self.lnage() * Number(appmodel.Form().isBaseLineSmoker()); | |
}; | |
self.agedm = function(isCurrent) { | |
if(isCurrent) | |
return self.lnFollowUpage() * Number(appmodel.Form().isDiabetic()); | |
else | |
return self.lnage() * Number(appmodel.Form().isBaseLineDiabetic()); | |
}; | |
//Need to check baseline diabetic and smoker values | |
self.predictCalculate = function(isCurrent) { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = 17.1141 * (isCurrent ? self.lnFollowUpage(): self.lnage()) + 0.9396 * self.lntot(isCurrent) + (-18.9196 * self.lnhdl(isCurrent)) + 4.4748 * self.agehdl(isCurrent) + 29.2907 * self.trlnsbp(isCurrent) + (-6.4321 * self.agetsbp(isCurrent)) + 27.8197 * self.ntlnsbp(isCurrent) + (-6.0873 * self.agentsbp(isCurrent)) + 0.6908 * (isCurrent ? Number(appmodel.Form().isSmoker()):Number(appmodel.Form().isBaseLineSmoker())) + 0.8738 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())) | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = (-29.799 * (isCurrent ? self.lnFollowUpage(): self.lnage())) + 4.884 * self.age2(isCurrent) + 13.54 * self.lntot(isCurrent) + (-3.114 * self.agetc(isCurrent)) + (-13.578 * self.lnhdl(isCurrent)) + 3.149 * self.agehdl(isCurrent) + 2.019 * self.trlnsbp(isCurrent) + 1.957 * self.ntlnsbp(isCurrent) + 7.574 * (isCurrent ? Number(appmodel.Form().isSmoker()):Number(appmodel.Form().isBaseLineSmoker())) + (-1.665 * self.agesmoke(isCurrent)) + 0.661 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())); | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 2.469 * (isCurrent ? self.lnFollowUpage(): self.lnage()) + 0.302 * self.lntot(isCurrent) + (-0.307 * self.lnhdl(isCurrent)) + 1.916 * self.trlnsbp(isCurrent) + 1.809 * self.ntlnsbp(isCurrent) + 0.549 * (isCurrent ? Number(appmodel.Form().isSmoker()):Number(appmodel.Form().isBaseLineSmoker())) + 0.645 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 12.344 * (isCurrent ? self.lnFollowUpage(): self.lnage()) + 11.853 * self.lntot(isCurrent) + (-2.664 * self.agetc(isCurrent)) + (-7.99 * self.lnhdl(isCurrent)) + 1.769 * self.agehdl(isCurrent) + 1.797 * self.trlnsbp(isCurrent) + 1.764 * self.ntlnsbp(isCurrent) + 7.837 * (isCurrent ? Number(appmodel.Form().isSmoker()):Number(appmodel.Form().isBaseLineSmoker())) + (-1.795 * self.agesmoke(isCurrent)) + 0.658 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())); | |
if(debug) | |
console.log(i); | |
return i; | |
}; | |
//updated estimates trlnsbp and ntlnsbp | |
self.up_trlnsbp = function() { | |
return Math.log(appmodel.Form().BaselineBloodPressure()) * Number(appmodel.Form().isHypertension()); | |
}; | |
self.up_ntlnsbp = function() { | |
return Math.log(appmodel.Form().BaselineBloodPressure()) * Number(!appmodel.Form().isHypertension()); | |
}; | |
self.up_agetsbp = function() { | |
return self.lnFollowUpage() * self.up_trlnsbp(); | |
}; | |
//This takes only updated age and use baseline values and Need to check isDiabetic | |
self.updatedPredictCalculate = function() { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) { | |
i = 17.1141 * self.lnFollowUpage() + 0.9396 * self.lntot(false) + (-18.9196 * self.lnhdl(false)) + 4.4748 * (Math.log(appmodel.Form().BaselineHDLCholesterol()) * self.lnFollowUpage()) + 29.2907 * self.up_trlnsbp() + (-6.4321 * self.up_agetsbp()) + 27.8197 * self.up_ntlnsbp() + (-6.0873 * (self.up_ntlnsbp() * self.lnFollowUpage())) + 0.6908 * Number(appmodel.Form().isSmoker()) + 0.8738 * Number(appmodel.Form().isDiabetic()); | |
} | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = (-29.799 * self.lnFollowUpage()) + 4.884 * self.age2(true) + 13.54 * self.lntot(false) + (-3.114 * (self.lntot(false) * self.lnFollowUpage())) + (-13.578 * self.lnhdl(false)) + 3.149 * (self.lnhdl(false) * self.lnFollowUpage()) + 2.019 * self.up_trlnsbp() + 1.957 * self.up_ntlnsbp() + 7.574 * Number(appmodel.Form().isSmoker()) + (-1.665 * (self.lnFollowUpage() * Number(appmodel.Form().isSmoker()))) + 0.661 * Number(appmodel.Form().isDiabetic()); | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 2.469 * self.lnFollowUpage() + 0.302 * self.lntot(false) + (-0.307 * self.lnhdl(false)) + 1.916 * self.up_trlnsbp() + 1.809 * self.up_ntlnsbp() + 0.549 * Number(appmodel.Form().isSmoker()) + 0.645 * Number(appmodel.Form().isDiabetic()); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 12.344 * self.lnFollowUpage() + 11.853 * self.lntot(false) + (-2.664 * (self.lntot(false) * self.lnFollowUpage())) + (-7.99 * self.lnhdl(false)) + 1.769 * (self.lnhdl(false) * self.lnFollowUpage()) + 1.797 * self.up_trlnsbp() + 1.764 * self.up_ntlnsbp() + 7.837 * Number(appmodel.Form().isSmoker()) + (-1.795 * (self.lnFollowUpage() * Number(appmodel.Form().isSmoker()))) + 0.658 * Number(appmodel.Form().isDiabetic()); | |
if(debug) | |
console.log(i); | |
return i; | |
}; | |
//Calculates CVD predict for baseline and current values | |
self.cvdPredict = function(isCurrent) { | |
var i; | |
i= (1 - Math.pow(self.s010(), Math.exp( self.predictCalculate(isCurrent) - self.mnxb()))); | |
if(debug) | |
console.log(i); | |
return i; | |
}; | |
//Sheet(10-Year Expected ASCVD) 10-Year ASCVD Risk at Baseline - G29 | |
self.TenYearBaselineRisk = function(){ | |
var i = '~%'; | |
var predValue = self.cvdPredict(false); | |
if (predValue != 1 && !isNaN(predValue)) { | |
var number = predValue * 100 | |
if(debug) | |
console.log(number); | |
i = number.toFixed(1) + '%'; | |
} | |
return i; | |
}; | |
//Sheet(10-Year ASCVD Follow up) 10-Year ASCVD floor for follow up - G92 | |
self.TenYearRiskUsingFollowUpValue = function(){ | |
var i = '~%'; | |
var predValue = self.cvdPredict(true); | |
if (predValue != 1 && !isNaN(predValue)) { | |
var number = predValue * 100 | |
i = number.toFixed(1) + '%'; | |
} | |
return i; | |
}; | |
self.updatedCvdPredict = function() { | |
var i; | |
i= (1 - Math.pow(self.s010(), Math.exp( self.updatedPredictCalculate() - self.mnxb()))); | |
if(debug) | |
console.log("e125 => ",i, " s010 => ",self.s010(), " mnxb => ",self.mnxb(), " d125 => ", self.updatedPredictCalculate()); | |
return i; | |
}; | |
//Sheet(10-Year ASCVD Follow up) Updated Estimates - G125 | |
self.TenYearRiskUsingUpdatedEstimates = function(){ | |
var i = '~%'; | |
var predValue = self.updatedCvdPredict(); | |
if (predValue != 1 && !isNaN(predValue)) { | |
var number = predValue * 100 | |
i = number.toFixed(1) + '%'; | |
} | |
return i; | |
}; | |
// Relative Risk calculations | |
self.relativeRiskStatin = 0.75; | |
self.relativeRiskBP = Math.exp((Math.log(0.84) + Math.log(0.64))/2); | |
self.relativeRiskStopSmoking=0.73; | |
self.relativeRiskAspirin = 0.90; | |
self.relativeRiskAspirinStatin = (self.relativeRiskStatin * self.relativeRiskAspirin); | |
self.relativeRiskAspirinBP = (self.relativeRiskBP * self.relativeRiskAspirin); | |
self.relativeRiskStatinBP = (self.relativeRiskStatin * self.relativeRiskBP); | |
self.relativeRiskStatinStopSmoking = (self.relativeRiskStatin * self.relativeRiskStopSmoking); | |
self.relativeRiskAspirinStopSmoking = (self.relativeRiskAspirin * self.relativeRiskStopSmoking); | |
self.relativeRiskBPStopSmoking = (Math.exp((Math.log(0.84) + Math.log(0.64))/2) * 0.73); | |
self.relativeRiskStatinAspirinBP = (self.relativeRiskStatin * self.relativeRiskBP * self.relativeRiskAspirin); | |
self.relativeRiskAspirinBPStopSmoking = (self.relativeRiskBP * self.relativeRiskStopSmoking * self.relativeRiskAspirin); | |
self.relativeRiskStatinBPStopSmoking = (self.relativeRiskBP * self.relativeRiskStopSmoking * self.relativeRiskStatin); | |
self.relativeRiskAspirinStatinStopSmoking = (self.relativeRiskAspirin * self.relativeRiskStopSmoking * self.relativeRiskStatin); | |
self.relativeRiskAll4 = (self.relativeRiskStatin * self.relativeRiskAspirin * self.relativeRiskStopSmoking * self.relativeRiskBP); | |
self.relativeRiskFollowupBP = Math.exp((Math.log(0.79) + Math.log(0.54))/2).toFixed(2); | |
//Delta Calculations | |
self.statinDelta = function(){ | |
if(appmodel.Form().LDLCholesterol()){ | |
return Math.pow(self.relativeRiskStatin,((appmodel.Form().BaselineLDLCholesterol() - appmodel.Form().LDLCholesterol())/38.7)); | |
} | |
}; | |
self.bloodPresureDelta = function(){ | |
if(appmodel.Form().BloodPressure()){ | |
return Math.pow( Math.exp((Math.log(0.79) + Math.log(0.54))/2),((appmodel.Form().BaselineBloodPressure() - appmodel.Form().BloodPressure())/10)); | |
} | |
}; | |
self.smokerDelta = function(){ | |
if(!appmodel.Form().isBaseLineSmoker() || !appmodel.Form().QuiteSmokingMonths()){ | |
return 1; | |
}else if(appmodel.Form().QuiteSmokingMonths()){ | |
return appmodel.Form().QuiteSmokingMonths().value; | |
} | |
else { | |
return 1; | |
} | |
}; | |
self.aspirinDelta = function(){ | |
if(appmodel.Form().OnAspirin() == 'Yes'){ | |
return 0.9; | |
}else{ | |
return 1; | |
} | |
}; | |
//Sheet(10-Year ASCVD Follow up) all therapy delta - G119 | |
self.summationDelta = function(){ | |
return self.statinDelta() * self.bloodPresureDelta() * self.smokerDelta() * self.aspirinDelta(); | |
}; | |
//Sheet(10-Year ASCVD Follow up) 10-Year ASCVD with delta and updated estimates - H125 | |
self.TenYearRiskWithUpdatedEstimatesDelta = function(){ | |
var g125 = self.updatedCvdPredict(); | |
var g119 = self.summationDelta(); | |
if(debug) | |
console.log("g125 => ", g125," g119 => ",g119); | |
return g125 * g119; | |
//return self.updatedCvdPredict() * self.summationDelta(); | |
}; | |
//Sheet(Updated RR) 10-Year ASCVD follow up - C19 | |
self.TenYearFollowUpRisk = function(){ | |
var h125 = self.TenYearRiskWithUpdatedEstimatesDelta(); | |
var g59 = self.optimalCvdPredict(true); | |
var g92 = self.cvdPredict(true); | |
var number = Math.min(Math.max(h125,g59), g92) * 100; | |
return number.toFixed(1) + '%'; | |
}; | |
//start: Forecasted Risk at Initial Visit(Expected RR sheet) | |
self.ForecastRiskStatin = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) :self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
if(baselineRisk < 0.05){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskStatin, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskBP = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) :self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(bp < 120 || (diabetic == 'Yes' && bp < 130)){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskBP, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
if(smoke == 'No' || smoke == 'Never'){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirin = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
if(baselineRisk < 0.1){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAspirin, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirinStatin = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
if(baselineRisk < 0.1){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAspirinStatin, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirinBP = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(baselineRisk < 0.1 || (bp < 120 || (diabetic == 'Yes' && bp < 130))){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAspirinBP, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskStatinBP = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(baselineRisk < 0.05 || (bp < 120 || (diabetic == 'Yes' && bp < 130))){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskStatinBP, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskStatinSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
if(baselineRisk < 0.05 || smoke == 'No' || smoke == 'Never'){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskStatinStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirinSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
if(baselineRisk < 0.1 || smoke == 'No' || smoke == 'Never'){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAspirinStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskBPSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if((bp < 120 || smoke == 'No' || smoke == 'Never') || (diabetic == 'Yes' && bp < 130)) { | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskBPStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirinStatinBP = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(baselineRisk < 0.1 || (bp < 120 || (diabetic == 'Yes' && bp < 130))){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskStatinAspirinBP, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirinBPSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(baselineRisk < 0.1 || (bp < 120 || smoke == 'No' || smoke == 'Never') || (diabetic == 'Yes' && bp < 130)) { | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAspirinBPStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskStatinBPSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(baselineRisk < 0.05 || (bp < 120 || smoke == 'No' || smoke == 'Never') || (diabetic == 'Yes' && bp < 130)) { | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskStatinBPStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskAspirinStatinSmoking = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
if(baselineRisk < 0.1 || smoke == 'No' || smoke == 'Never'){ | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAspirinStatinStopSmoking, optimalBaseline); | |
} | |
}; | |
self.ForecastRiskSartAll4 = function(){ | |
var baselineRisk = appmodel.isFollowUp() ? self.cvdPredict(false) : self.cvdPredict(true); | |
var optimalBaseline = self.optimalCvdPredict(false); | |
var smoke = appmodel.isFollowUp() ? appmodel.Form().BaselineSmoker() : appmodel.Form().Smoker(); | |
var bp = appmodel.isFollowUp() ? appmodel.Form().BaselineBloodPressure() : appmodel.Form().BloodPressure(); | |
var diabetic = appmodel.isFollowUp() ? appmodel.Form().BaselineDiabetic() : appmodel.Form().Diabetic(); | |
if(baselineRisk < 0.1 || (bp < 120 || smoke == 'No' || smoke == 'Never') || (diabetic == 'Yes' && bp < 130)) { | |
return 'NA'; | |
}else{ | |
return Math.max(baselineRisk * self.relativeRiskAll4, optimalBaseline); | |
} | |
}; | |
//end: Forecasted Risk at Initial Visit | |
//start: Forecasted Risk at Follow Up Visit | |
self.forecasttrlnsbp = function(value) { | |
return Math.log(appmodel.Form().BloodPressure()) * Number(value); | |
}; | |
self.forecastntlnsbp = function(value) { | |
return Math.log(appmodel.Form().BloodPressure()) * Number(!value); | |
}; | |
self.forecastagetsbp = function(value) { | |
return self.lnFollowUpage() * self.forecasttrlnsbp(value); | |
}; | |
self.forecastagentsbp = function(value) { | |
return self.lnFollowUpage() * self.forecastntlnsbp(value); | |
}; | |
self.forecastagesmoke = function(value) { | |
return self.lnFollowUpage() * Number(value); | |
}; | |
self.forecastAspirinDelta = function(value){ | |
if(value){ | |
return 0.9; | |
}else{ | |
return 1; | |
} | |
}; | |
//Need to check baseline diabetic and smoker values | |
self.forecastPredictCalculate = function(isCurrent, bpValue, smokerValue) { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = 17.1141 * (isCurrent ? self.lnFollowUpage(): self.lnage()) + 0.9396 * self.lntot(isCurrent) + (-18.9196 * self.lnhdl(isCurrent)) + 4.4748 * self.agehdl(isCurrent) + 29.2907 * self.forecasttrlnsbp(bpValue) + (-6.4321 * self.forecastagetsbp(bpValue)) + 27.8197 * self.forecastntlnsbp(bpValue) + (-6.0873 * self.forecastagentsbp(bpValue)) + 0.6908 * ( Number(smokerValue)) + 0.8738 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = (-29.799 * (isCurrent ? self.lnFollowUpage(): self.lnage())) + 4.884 * self.age2(isCurrent) + 13.54 * self.lntot(isCurrent) + (-3.114 * self.agetc(isCurrent)) + (-13.578 * self.lnhdl(isCurrent)) + 3.149 * self.agehdl(isCurrent) + 2.019 * self.forecasttrlnsbp(bpValue) + 1.957 * self.forecastntlnsbp(bpValue) + 7.574 * (Number(smokerValue)) + (-1.665 * self.forecastagesmoke(smokerValue)) + 0.661 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())); | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 2.469 * (isCurrent ? self.lnFollowUpage(): self.lnage()) + 0.302 * self.lntot(isCurrent) + (-0.307 * self.lnhdl(isCurrent)) + 1.916 * self.forecasttrlnsbp(bpValue) + 1.809 * self.forecastntlnsbp(bpValue) + 0.549 * (Number(smokerValue)) + 0.645 * (isCurrent ? Number(appmodel.Form().isDiabetic()):Number(appmodel.Form().isBaseLineDiabetic())); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 12.344 * (isCurrent ? self.lnFollowUpage() : self.lnage()) + 11.853 * self.lntot(isCurrent) + (-2.664 * self.agetc(isCurrent)) + (-7.99 * self.lnhdl(isCurrent)) + 1.769 * self.agehdl(isCurrent) + 1.797 * self.forecasttrlnsbp(bpValue) + 1.764 * self.forecastntlnsbp(bpValue) + 7.837 * (Number(smokerValue)) + (-1.795 * self.forecastagesmoke(smokerValue)) + 0.658 * (isCurrent ? Number(appmodel.Form().isDiabetic()) : Number(appmodel.Form().isBaseLineDiabetic())); | |
return i; | |
}; | |
self.forecastCvdPredict = function(isCurrent,bpValue,smokerValue){ | |
var i; | |
i= (1 - Math.pow(self.s010(), Math.exp(self.forecastPredictCalculate(isCurrent,bpValue,smokerValue) - self.mnxb()))); | |
return i; | |
}; | |
//Forecasted updated Estimates | |
self.forecastup_trlnsbp = function(value) { | |
return Math.log(appmodel.Form().BaselineBloodPressure()) * Number(value); | |
}; | |
self.forecastup_ntlnsbp = function(value) { | |
return Math.log(appmodel.Form().BaselineBloodPressure()) * Number(!value); | |
}; | |
self.forecastup_agetsbp = function(value) { | |
return self.lnFollowUpage() * self.forecastup_trlnsbp(value); | |
}; | |
//This takes only updated age,bp and smoker and use baseline values | |
self.forecastUpdatedPredictCalculate = function(bpValue,smokerValue) { | |
var i; | |
if (appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = 17.1141 * self.lnFollowUpage() + 0.9396 * self.lntot(false) + (-18.9196 * self.lnhdl(false)) + 4.4748 * self.agehdl(false) + 29.2907 * self.forecastup_trlnsbp(bpValue) + (-6.4321 * self.forecastup_agetsbp(bpValue)) + 27.8197 * self.forecastup_ntlnsbp(bpValue) + (-6.0873 * (self.forecastup_ntlnsbp(bpValue) * self.lnFollowUpage())) + 0.6908 * Number(smokerValue) + 0.8738 * Number(appmodel.Form().isDiabetic()); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isFemale() ) | |
i = (-29.799 * self.lnFollowUpage()) + 4.884 * self.age2(true) + 13.54 * self.lntot(false) + (-3.114 * (self.lntot(false) * self.lnFollowUpage())) + (-13.578 * self.lnhdl(false)) + 3.149 * (self.lnhdl(false) * self.lnFollowUpage()) + 2.019 * self.forecastup_trlnsbp(bpValue) + 1.957 * self.forecastup_ntlnsbp(bpValue) + 7.574 * Number(smokerValue) + (-1.665 * (self.lnFollowUpage() * Number(smokerValue))) + 0.661 * Number(appmodel.Form().isDiabetic()); | |
if (appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 2.469 * self.lnFollowUpage() + 0.302 * self.lntot(false) + (-0.307 * self.lnhdl(false)) + 1.916 * self.forecastup_trlnsbp(bpValue) + 1.809 * self.forecastup_ntlnsbp(bpValue) + 0.549 * Number(smokerValue) + 0.645 * Number(appmodel.Form().isDiabetic()); | |
if (!appmodel.Form().isAfrican() && appmodel.Form().isMale()) | |
i = 12.344 * self.lnFollowUpage() + 11.853 * self.lntot(false) + (-2.664 * (self.lntot(false) * self.lnFollowUpage())) + (-7.99 * self.lnhdl(false)) + 1.769 * (self.lnhdl(false) * self.lnFollowUpage()) + 1.797 * self.forecastup_trlnsbp(bpValue) + 1.764 * self.forecastup_ntlnsbp(bpValue) + 7.837 * Number(smokerValue) + (-1.795 * (self.lnFollowUpage() * Number(smokerValue))) + 0.658 * Number(appmodel.Form().isDiabetic()); | |
if(debug) | |
console.log(i); | |
return i; | |
}; | |
self.forecastupdatedCvdPredict = function(bpValue,smokerValue) { | |
var i; | |
i= (1 - Math.pow(self.s010(), Math.exp( self.forecastUpdatedPredictCalculate(bpValue,smokerValue) - self.mnxb()))); | |
if(debug) | |
console.log(i); | |
return i; | |
}; | |
self.TenYearForecastedFollowUpRisk = function(isSmoker,isBP,isAspirin){ | |
var h125 = self.forecastupdatedCvdPredict(isBP,isSmoker) * (self.statinDelta() * self.bloodPresureDelta() * self.smokerDelta() * self.forecastAspirinDelta(isAspirin)); | |
var g59 = self.optimalCvdPredict(true); | |
var g92 = self.forecastCvdPredict(true,isBP,isSmoker); | |
var number = Math.min(Math.max(h125,g59), g92) * 100 | |
return number.toFixed(1) + '%'; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment