%%HP: T(3)A(D)F(.);
\<< \-> MNAME CNUMS
  \<< CL\GS MNAME RCL
SIZE 1 GET \-> N
    \<< CNUMS 1 GET \->
DV
      \<< 1 N
	FOR I MNAME
RCL { I DV } GET
	NEXT { N 1
} \->ARRY 'Y' STO 1 N
	START 1
	NEXT N
\->ARRY \GS+
      \>> CNUMS SIZE
2 SWAP
      FOR J CNUMS J
GET \-> CN
	\<< 1 N
	  FOR I
MNAME RCL { I CN }
GET
	  NEXT N
\->ARRY \GS+
	\>>
      NEXT RCL\GS TRN
'X' STO CL\GS X TRN X
* INV X TRN Y * *
'B' STO X B *
'PRED' STO Y PRED -
'RESID' STO RESID
TRN RESID * N CNUMS
SIZE - / ARRY\-> DROP
'\Gs2' STO \Gs2 X TRN X
* INV * 'VC.B' STO
1 CNUMS SIZE
      FOR J 'VC.B'
RCL { J J } GET \v/
      NEXT CNUMS
SIZE \->ARRY '\Gs.B'
STO 1 CNUMS SIZE
      FOR J 'B' RCL
J GET '\Gs.B' RCL J
GET /
      NEXT CNUMS
SIZE \->ARRY 'T.B'
STO 1 CNUMS SIZE
      FOR J 'T.B'
RCL J GET ABS N
CNUMS SIZE - SWAP
UTPT
      NEXT CNUMS
SIZE \->ARRY 'P.B'
STO Y \GS+ MEAN \-> \GmY
      \<< B TRN X TRN
* X * B * ARRY\->
DROP N \GmY SQ * - Y
TRN Y * ARRY\-> DROP
N \GmY SQ * - / 'R2'
STO 1 1 R2 - N 1 -
* N CNUMS SIZE - /
- 'R2J' STO CL\GS
RESID ARRY\-> 1 GET 1
- 1 2 \->LIST \->ARRY
SWAP DROP RESID
ARRY\-> SWAP DROP 1
GET 1 - 1 2 \->LIST
\->ARRY -1 * - STO\GS
TOT RESID TRN RESID
* ARRY\-> DROP DUP
'RSS' STO / 'DW'
STO CL\GS Y DUP STO\GS
TRN Y * ARRY\-> DROP
N MEAN SQ * - 'TSS'
STO TSS RSS - 'ESS'
STO N CNUMS SIZE -
'DF' STO ESS CNUMS
SIZE 1 - / RSS DF /
/ 'F' STO CNUMS
SIZE 1 - DF F UTPF
'P.F' STO { B \Gs.B
T.B P.B R2 R2J \Gs2
DF F P.F TSS ESS
RSS DW VC.B RESID
PRED } ORDER { X Y
} PURGE CL\GS
      \>>
    \>>
  \>>
\>>
