Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: YTSPROM2

YTSPROM2.m

Go to the documentation of this file.
  1. YTSPROM2 ;SLC/KCM - Score PROMIS29 v2.1 ; 10/14/18 2:02pm
  1. ;;5.01;MENTAL HEALTH;**173**;Dec 30, 1994;Build 10
  1. ;
  1. DLLSTR(YSDATA,YS,YSTRNG) ; compute scores or report text based on YSTRNG
  1. ; input
  1. ; YSDATA(2)=adminId^patientDFN^instrumentName^dateGiven^isComplete
  1. ; YSDATA(2+n)=questionId^sequence^choiceId
  1. ; YS("AD")=adminId
  1. ; YSTRNG=1 for score, 2 for report
  1. ; output if YSTRNG=1: ^TMP($J,"YSCOR",n)=scaleId=score
  1. ; output if YSTRNG=2: append special "answers" to YSDATA
  1. ;
  1. I YSTRNG=1 D SCORESV
  1. I YSTRNG=2 D
  1. . N SCORETXT,N
  1. . D LDSCORES^YTSCORE(.YSDATA,.YS)
  1. . D REPORT(.SCORETXT)
  1. . S N=$O(YSDATA(""),-1) ; get last node
  1. . S YSDATA(N+1)="7771^9999;1^"_SCORETXT
  1. Q
  1. ;
  1. SCORESV ; calculate the raw scores and map to T-Scores
  1. ; expects YSDATA from DLLSTR
  1. N YTRESP,X,QSTN,RAW
  1. D MAPQSTN(.YSDATA,.YTRESP)
  1. F X="physical","anxiety","depress","fatigue","sleep","social","pain","cog" S RAW(X)=0
  1. F QSTN=8583:1:8586 S RAW("physical")=RAW("physical")+YTRESP(QSTN)
  1. F QSTN=8587:1:8590 S RAW("anxiety")=RAW("anxiety")+YTRESP(QSTN)
  1. F QSTN=8591:1:8594 S RAW("depress")=RAW("depress")+YTRESP(QSTN)
  1. F QSTN=8595:1:8598 S RAW("fatigue")=RAW("fatigue")+YTRESP(QSTN)
  1. F QSTN=8599:1:8602 S RAW("sleep")=RAW("sleep")+YTRESP(QSTN)
  1. F QSTN=8603:1:8606 S RAW("social")=RAW("social")+YTRESP(QSTN)
  1. F QSTN=8607:1:8610 S RAW("pain")=RAW("pain")+YTRESP(QSTN)
  1. F QSTN=8611,8612 S RAW("cog")=RAW("cog")+$G(YTRESP(QSTN)) ; only in PROPr
  1. S RAW("intensity")=$G(YTRESP(8613)) ; pain intensity
  1. ;
  1. ; set scores into ^TMP($J,"YSCOR",n)=scaleId=rawScore^tScore
  1. K ^TMP($J,"YSCOR")
  1. I $D(^TMP($J,"YSG",1)),^TMP($J,"YSG",1)="[ERROR]" D Q ;-->out
  1. . S ^TMP($J,"YSCOR",1)="[ERROR]"
  1. . S ^TMP($J,"YSCOR",2)="No Scale found for ADMIN"
  1. S ^TMP($J,"YSCOR",1)="[DATA]"
  1. N I,J,X,YTS,YTN,YTX
  1. S (I,J)=1 F S I=$O(^TMP($J,"YSG",I)) Q:'I S X=^TMP($J,"YSG",I) D
  1. . QUIT:$E(X,1,5)'="Scale"
  1. . S X=$P(X,"=",2,99),YTS=$P(X,U),YTN=$P(X,U,4),YTX=""
  1. . I YTS=1375!(YTS=1383) S YTX=RAW("physical")_U_$$TBLVAL(RAW("physical"),2)
  1. . I YTS=1376!(YTS=1384) S YTX=RAW("anxiety")_U_$$TBLVAL(RAW("anxiety"),4)
  1. . I YTS=1377!(YTS=1385) S YTX=RAW("depress")_U_$$TBLVAL(RAW("depress"),6)
  1. . I YTS=1378!(YTS=1386) S YTX=RAW("fatigue")_U_$$TBLVAL(RAW("fatigue"),8)
  1. . I YTS=1379!(YTS=1387) S YTX=RAW("sleep")_U_$$TBLVAL(RAW("sleep"),10)
  1. . I YTS=1380!(YTS=1388) S YTX=RAW("social")_U_$$TBLVAL(RAW("social"),12)
  1. . I YTS=1381!(YTS=1389) S YTX=RAW("pain")_U_$$TBLVAL(RAW("pain"),14)
  1. . I YTS=1382!(YTS=1391) S YTX=RAW("intensity") ; (no T-Score)
  1. . I YTS=1390 S YTX=RAW("cog")_U_$$TBLVAL(RAW("cog"),16) ; only in PROPr
  1. . I $L(YTX) S J=J+1,^TMP($J,"YSCOR",J)=YTN_"="_YTX
  1. Q
  1. MAPQSTN(YSDATA,YTRESP) ; loop YSDATA and map questions to choice values
  1. N YTI,YTQSTN,YTCHC
  1. S YTI=2 F S YTI=$O(YSDATA(YTI)) Q:'YTI D ; set actual choice values
  1. . S YTQSTN=$P(YSDATA(YTI),U),YTCHC=$P(YSDATA(YTI),U,3)
  1. . I YTQSTN=8613 S YTRESP(YTQSTN)=$P(YSDATA(YTI),U,3) Q ; 8613=TrackBar
  1. . S YTRESP(YTQSTN)=+$P(^YTT(601.75,YTCHC,0),U,2)
  1. Q
  1. ;
  1. ;
  1. REPORT(TXT) ; build the scoring display for the report
  1. ; expects ^TMP($J,"YSCOR",...) and ^TMP($J,"YSG") from DLLSTR
  1. ; YSDATA from DLLSTR
  1. ; organize the scores into SCORES(scaleId)=raw^tscore
  1. N I,X,MAP,SCORES
  1. F I=1375:1:1390 S SCORES(I)="" ; initialize to avoid undefined
  1. S I=1 F S I=$O(^TMP($J,"YSG",I)) Q:'I S X=^TMP($J,"YSG",I) D
  1. . QUIT:$E(X,1,5)'="Scale"
  1. . S X=$P(X,"=",2,99)
  1. . S MAP($P(X,U,4))=+$P(X,U)
  1. S I=1 F S I=$O(^TMP($J,"YSCOR",I)) Q:'I S X=^TMP($J,"YSCOR",I) D
  1. . QUIT:'$D(MAP($P(X,"=")))
  1. . S SCORES(MAP($P(X,"=")))=$P(X,"=",2,99)
  1. I $P(YSDATA(2),U,3)="PROMIS29 V2.1" S TXT=$$PRO29(.SCORES)
  1. I $P(YSDATA(2),U,3)="PROMIS29+2 V2.1" S TXT=$$PROPR(.SCORES)
  1. Q
  1. PRO29(SCORES) ; return text for PROMIS29
  1. N X S X=""
  1. S X=X_"| TOTALS Raw Score T-Score Std.Error|"
  1. S X=X_"| Physical Function "_$$SCORSTR(1375,SCORES(1375))
  1. S X=X_"| Anxiety "_$$SCORSTR(1376,SCORES(1376))
  1. S X=X_"| Depression "_$$SCORSTR(1377,SCORES(1377))
  1. S X=X_"| Fatigue "_$$SCORSTR(1378,SCORES(1378))
  1. S X=X_"| Sleep Disturbance "_$$SCORSTR(1379,SCORES(1379))
  1. S X=X_"| Social Roles and Activities "_$$SCORSTR(1380,SCORES(1380))
  1. S X=X_"| Pain Interference "_$$SCORSTR(1381,SCORES(1381))
  1. S X=X_"| Pain Intensity "_$J($$PAIN,2)
  1. Q X
  1. ;
  1. PROPR(SCORES) ; return text for PROMIS29+2 (PROPr)
  1. N X S X=""
  1. S X=X_"| TOTALS Raw Score T-Score Std.Error|"
  1. S X=X_"| Physical Function "_$$SCORSTR(1383,SCORES(1383))
  1. S X=X_"| Anxiety "_$$SCORSTR(1384,SCORES(1384))
  1. S X=X_"| Depression "_$$SCORSTR(1385,SCORES(1385))
  1. S X=X_"| Fatigue "_$$SCORSTR(1386,SCORES(1386))
  1. S X=X_"| Sleep Disturbance "_$$SCORSTR(1387,SCORES(1387))
  1. S X=X_"| Social Roles and Activities "_$$SCORSTR(1388,SCORES(1388))
  1. S X=X_"| Pain Interference "_$$SCORSTR(1389,SCORES(1389))
  1. S X=X_"| Cognitive Function "_$$SCORSTR(1390,SCORES(1390))
  1. S X=X_"| Pain Intensity "_$J($$PAIN,2)_"|"
  1. ;
  1. ; calculate utility scores from t-scores
  1. N TSCORES,USCORES
  1. D MKTLST(.SCORES,.TSCORES),MAUT^YTSPROMU(.TSCORES,.USCORES)
  1. S X=X_"| PROPr MULTI-ATTRIBUTE SCORES|"
  1. S X=X_"| PROPr "_$G(USCORES("PROPr"))
  1. S X=X_"| Physical Utility "_$G(USCORES("physical"))
  1. S X=X_"| Depression Utility "_$G(USCORES("depression"))
  1. S X=X_"| Fatigue Utility "_$G(USCORES("fatigue"))
  1. S X=X_"| Sleep Utility "_$G(USCORES("sleep"))
  1. S X=X_"| Social Utility "_$G(USCORES("social"))
  1. S X=X_"| Pain Utility "_$G(USCORES("pain"))
  1. S X=X_"| Cognition Utility "_$G(USCORES("cognition"))
  1. Q X
  1. ;
  1. SCORSTR(SID,SCORE) ; return score string given scale identifier
  1. N X,RAW,T1,SE
  1. S RAW=$P(SCORE,U),T1=$P(SCORE,U,2),SE=""
  1. I SID=1375!(SID=1383) S SE=$$TBLVAL(RAW,3) ; physical
  1. I SID=1376!(SID=1384) S SE=$$TBLVAL(RAW,5) ; anxiety
  1. I SID=1377!(SID=1385) S SE=$$TBLVAL(RAW,7) ; depression
  1. I SID=1378!(SID=1386) S SE=$$TBLVAL(RAW,9) ; fatigue
  1. I SID=1379!(SID=1387) S SE=$$TBLVAL(RAW,11) ; sleep
  1. I SID=1380!(SID=1388) S SE=$$TBLVAL(RAW,13) ; social
  1. I SID=1381!(SID=1389) S SE=$$TBLVAL(RAW,15) ; pain
  1. I SID=1390 S SE=$$TBLVAL(RAW,17) ; cognition
  1. Q $J(RAW,2)_" "_$J(T1,5,1)_" "_$J(SE,3,1)
  1. ;
  1. PAIN() ; return pain intensity selection
  1. N I,X
  1. S I=2,X="" F S I=$O(YSDATA(I)) Q:'I D Q:$L(X)
  1. . I $P(YSDATA(I),U)=8613 S X=$P(YSDATA(I),U,3)
  1. Q X
  1. ;
  1. MKTLST(SCORES,TSCORES) ; build a named list of t-scores for PROPr
  1. S TSCORES("cognition")=+$P(SCORES(1390),U,2)
  1. S TSCORES("depression")=+$P(SCORES(1385),U,2)
  1. S TSCORES("fatigue")=+$P(SCORES(1386),U,2)
  1. S TSCORES("pain")=+$P(SCORES(1389),U,2)
  1. S TSCORES("physical")=+$P(SCORES(1383),U,2)
  1. S TSCORES("sleep")=+$P(SCORES(1387),U,2)
  1. S TSCORES("social")=+$P(SCORES(1388),U,2)
  1. Q
  1. ;
  1. TBLVAL(RAW,COLUMN) ; return table value given RAW score and COLUMN
  1. N X,N
  1. S X=$P($T(TMAP+RAW),";;",2)
  1. S N=$P(X,U,COLUMN) S:'N N=""
  1. Q N
  1. ;
  1. ;;Raw^PhysicalT^PhysicalSE^AnxietyT^AnxietySE^DepressT^DepressSE^FatigueT^FatigueSE^SleepT^SleepSE^SocialT^SocialSE^PainT^PainSE^CogT^CogSE
  1. ;; 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ^ 10 ^ 11 ^ 12 ^ 13 ^ 14 ^ 15 ^ 16 ^ 17
  1. TMAP ; Map of raw scores to t-scores
  1. ;;1 (no raw score is 1, this is placeholder to make offset map to raw score)
  1. ;;2^^^^^^^^^^^^^^^29.5^6.4
  1. ;;3^^^^^^^^^^^^^^^34.4^5.9
  1. ;;4^22.5^4.0^40.3^6.1^41.0^6.2^33.7^4.9^32.0^5.2^27.5^4.1^41.6^6.1^38.0^5.7
  1. ;;5^26.6^2.8^48.0^3.6^49.0^3.2^39.7^3.1^37.5^4.0^31.8^2.5^49.6^2.5^41.2^5.7
  1. ;;6^28.9^2.5^51.2^3.1^51.8^2.7^43.1^2.7^41.1^3.7^34.0^2.3^52.0^2.0^44.3^5.8
  1. ;;7^30.5^2.4^53.7^2.8^53.9^2.4^46.0^2.6^43.8^3.5^35.7^2.2^53.9^1.9^47.3^5.8
  1. ;;8^31.9^2.3^55.8^2.7^55.7^2.3^48.6^2.5^46.2^3.5^37.3^2.1^55.6^1.9^50.5^5.7
  1. ;;9^33.2^2.3^57.7^2.6^57.3^2.3^51.0^2.5^48.4^3.4^38.8^2.2^57.1^1.9^54.7^5.9
  1. ;;10^34.4^2.3^59.5^2.6^58.9^2.3^53.1^2.4^50.5^3.4^40.5^2.3^58.5^1.8^61.2^6.9
  1. ;;11^35.6^2.3^61.4^2.6^60.5^2.3^55.1^2.4^52.4^3.4^42.3^2.3^59.9^1.8^^
  1. ;;12^36.7^2.3^63.4^2.6^62.2^2.3^57.0^2.3^54.3^3.4^44.2^2.3^61.2^1.8^^
  1. ;;13^37.9^2.3^65.3^2.7^63.9^2.3^58.8^2.3^56.1^3.4^46.2^2.3^62.5^1.8^^
  1. ;;14^39.2^2.4^67.3^2.7^65.7^2.3^60.7^2.3^57.9^3.3^48.1^2.2^63.8^1.8^^
  1. ;;15^40.5^2.4^69.3^2.7^67.5^2.3^62.7^2.4^59.8^3.3^50.0^2.2^65.2^1.8^^
  1. ;;16^41.9^2.5^71.2^2.7^69.4^2.3^64.6^2.4^61.7^3.3^51.9^2.2^66.6^1.8^^
  1. ;;17^43.5^2.6^73.3^2.7^71.2^2.4^66.7^2.4^63.8^3.4^53.7^2.3^68.0^1.8^^
  1. ;;18^45.5^2.8^75.4^2.7^73.3^2.4^69.0^2.5^66.0^3.4^55.8^2.3^69.7^1.9^^
  1. ;;19^48.3^3.3^77.9^2.9^75.7^2.6^71.6^2.7^68.8^3.7^58.3^2.7^71.6^2.1^^
  1. ;;20^57.0^6.6^81.6^3.7^79.4^3.6^75.8^3.9^73.3^4.6^64.2^5.1^75.6^3.7^^
  1. ;;zzzzz