The number of columns (variables) in $INPUT block

4 messages 3 people Latest: May 02, 2001
From: Alan Xiao <Alan.Xiao@cognigencorp.com> Subject: The number of columns (variables) in $INPUT block Date: Tue, 01 May 2001 21:45:34 +0000 Hello, NONMEM users, I met a problem. I have more than 15 significant covariates to be included in my model. Now 13 of them are already included by forward selection. However, this process can not go forward any more since the total number of variables that could be input in the $INPUT block is limited by 20. Does anyone have any idea how to handle this problem? Thanks, Alan.
From: "Fotteler, Baerbel {PDBS~Basel}" <BAERBEL.FOTTELER@Roche.COM> Subject: RE: The number of columns (variables) in $INPUT block Date: Wed, 02 May 2001 16:33:56 +0200 Dear Alan, we had a similar problem when developing the dose-auc model for saquinavir using a $PRED that we developed. Here is the solution we found with the help of the NONMEM project group: We used a single data item to store more than one type of information in it. An "indicator data item" called XTYP was introduced showing the meaning of the data item at a specific record. Therefore we created in our case 5 records (instead of one) for one observation. The NONMEM control file was adapted as follows: INPUT X1 X2 X3 ... X14 DV MDV XTYP; XTYPE took the values of 0 to 4 and therefore in the $PRED we included the following: IF (XTYP.EQ.0) THEN PTNO=X1 SDAY=X2 ... ENDIF IF (XTYP.EQ.1) THEN RDOS=X1 RDAY=X2 ... ENDIF etc. Note that X1 contains the value of PTNO, then RDOS, then... Through this mechanism we could make in our case 14*5=70 data items available to NONMEM for our user defined model. Hope this helps. Best wishes, Bärbel (Baerbel Fotteler F. Hoffmann - La Roche PDBS, 74/3.OG-W 4070 Basel, Switzerland Tel. +41 - 61 -688 6032 Fax. +41 - 61-688 1452)
From: Alan Xiao <Alan.Xiao@cognigencorp.com> Subject: Re: The number of columns (variables) in $INPUT block Date: Wed, 02 May 2001 14:29:13 -0400 Thanks a lot. The problem was solved. We used the similar method. The method is like this: Concatenate all dichotomous variables into one. For example, with v1, v2, v3, v4, v5, v6, all in values of 0/1, we encode them into one new variable called Vall=v1*100000+v2*10000+v3*1000+v4*100+v5*10+v6. Then in $PK block, we decoded this variable by integer operation. The method is a little bit simpler and faster than "if ... then " switches since it would be 2**6 = 64 possible switches. Another even simpler/faster decoding method is through binary operations. This method could be easily expanded for up to 8 or 10 variables for one concatenation (if applicable). It could be also easily modified to handle categorical variables. Actually, at the very first place, we were seeking for the possibility of expanding the limit on the number of allowable input variables in $INPUT block (20), avoiding to touch the data set. Modifying the data set is just the second choice. Any way, Thank everyone and hope everyone happy to share this experience. Alan.
From: "Sale, Mark" <ms93267@GlaxoWellcome.com> Subject: RE: The number of columns (variables) in $INPUT block Date: Wed, 2 May 2001 15:12:59 -0400 Alan We have this problem commonly, when doing a "two stage analysis" and we want to read in many pk parameters or etas for a second stage pd model. A more technical, but perhaps more efficient method that can be used if the values that you want only change by person (e.g., with etas) is to call an external function (called myeta.for here) that reads the next line that contains the values for that person. In this case, you can have an unlimited number of columns. The parameters are in an ASCII text file, which is opened by infn (myinfn.for here) , then read by the verbatim call below. We also include the ID in the ETA file (called WHO here), and confirm that we are reading the correct ETA for each subject. (that part isn't in this control file). Mark The control file is below $PROB 20005 $DATA data2.prn IGNORE = # $INPUT ID TIME AMT DV CMT AGE BMI SEX RACE DOSE SU PREV DDUR FSGR WTR STD $SUBS ADVAN6 TOL=6 INFN=MYINFN.FOR OTHER = MYETAS.FOR $MODEL COMP = (GLU) COMP = (FIRST) COMP = (SECND) $PK " FIRST " DOUBLE PRECISION ET1,ET2,ET3,ET4,ET5,ET6 " IF(NEWIND.LE.1) THEN " CALL MYETAS(WHO,ET1,ET2,ET3,ET4,ET5,ET6) " END IF TVKN = THETA(1)+THETA(2)*PREV KIN = TVKN*EXP(ET1) TVKT = THETA(3)+THETA(4)*PREV KOUT = TVKT*EXP(ET2) EMAX = THETA(5) IF(SU.EQ.0) THEN ED50 = (BMI*THETA(6)+THETA(7))*EXP(ET3) ELSE ED50 = THETA(8)*EXP(ET4) END IF F1 = KIN/KOUT PLMX = THETA(9)*EXP(ET5) PLTD = THETA(10) PLPW = THETA(11) IF(PREV.GT.0) THEN PRID = 1 ELSE PRID = 0 END IF PLAC = PRID*(1-SU)*PLMX*TIME**PLPW/(PLTD**PLPW+TIME*PLPW) RLSL = THETA(12)+ET6 RLPL = RLSL*TIME KMAX = THETA(13)*EXP(ETA(1)) C50 = (SU*THETA(14)+(1-SU)*THETA(15)) *EXP(ETA(2)) HKOT = THETA(16)*EXP(ETA(3)) F2 = (KMAX*F1/(C50+F1))/HKOT F3 = (HKOT*F2 + KMAX*F1/(C50+F1))/HKOT ETS1 = ETA(1) ETS2= ETA(2) ETS3 = ETA(3) $DES DADT(1) = KIN*(1-DOSE*EMAX/(ED50+DOSE)) - KOUT*A(1) GLU = A(1) + PLAC + RLPL DADT(2) = KMAX*GLU/(C50+A(1)) - HKOT*A(2) DADT(3) = HKOT*A(2) + KMAX*GLU/(C50+A(1)) - HKOT*A(3) $ERROR IPRED = (A(2)+A(3))/2 Y = IPRED*EXP(EPS(1)) $THETA (2.92,FIXED) (2.36,FIXED) (0.314,FIXED) (0.107,FIXED) (0.584,FIXED) (-0.218,FIXED) (10.5,FIXED) (3.80,FIXED) (1.64,FIXED) (5.27,FIXED) (0.752,FIXED) (0.00504,FIXED) (0,.0211) (0,10.4) (0,12.5) (0,.183) $OMEGA BLOCK(3) 1.97 -.121 0.429 2 -0.344 2.15 $SIGMA 0.00132 ;$MSFI = MSF1 $EST MAX = 9999 PRINT=10 METH= 1 MSFO = MSF2 POSTHOC $COV $TABLE ID TIME MDV BMI DOSE IPRED AGE SEX DDUR SU PREV FSGR ETS1 ETS2 ETS3 NOPRINT FILE = OUT.DAT