10  COM X[103,22],M[19,19],U[19,19],Q[20],V[20],P[78]
30  COM M$[60],N$[72]
40  COM N,K,N8,K8,N9,K9,Q9,Q7,Q5,Q4,Q3,Q2,Q1
45  COM I3,I4,U9,X$[20]
50  REM:7MAY74
52  REM:ARG1 AND ARMA IN >RAND
150  DIM D$[10],B$[10]
160  DIM Z[60],W[10],F$[6],G[10],T[10],F[10],C[10],B[10],L$[6]
200  GOTO Q[8] OF 5000,6000
5000  REM : AR(1)
5020  J=I4
5030  GOSUB 5050
5040  GOTO 5212
5050  GOTO Q9 OF 5060,5060,5190
5060  PRINT "MEAN, STANDARD DEVIATION, BETA1, BETA2 =";
5070  INPUT M,S,B1,B2
5150  IF S>0 THEN 5210
5160  PRINT "STANDARD DEVIATION MUST BE POSITIVE. STANDARD DEVIATION = ";
5170  INPUT S
5180  GOTO 5150
5190  PRINT "M,S,BETA1,BETA2 = ";
5200  GOTO 5070
5210  RETURN 
5212  M1=B1/(1-B2)
5214  S1=S/SQR(1-B2*B2)
5215  PRINT "PROCESS MEAN=";M1;"PROCESS S.D.=";S1
5217  PRINT "GIVE FIRST OBSERVATION";
5218  INPUT M2
5219  X[1,J]=M2
5220  FOR I=2 TO N
5230  Z1=RND(0)
5240  Z2=RND(0)
5250  Z=SQR(-2*LOG(Z1))*COS(6.28318*Z2)
5260  X[I,J]=B1+B2*X[I-1,J]+M+Z*S
5270  NEXT I
5280  GOTO 9000
6000  REM:ARMA
6002  REM:2FEB74 BY WM.WECKER
6004  REM
6006  REM   VARIABLE LIST
6008  REM   A = CUMULATIVE SUM OF AUTOREGRESSIVE TERMS FOR AN OBSERVATION
6010  REM   B = FACTORIALS (VECTOR)
6012  REM   C = DIFFERENCING COEFFICIENTS
6014  REM   D = NUMBER OF DIFFERENCES
6016  REM   D0 = DELTA
6018  REM   F = PHI VECTOR OF UNDIFFERENCED SERIES
6020  REM   F0 = COLUMN OF DATA MATRIX WHICH CONTAINS THE SERIES
6022  REM   F$ = DATA FILE
6024  REM   G = PHI VECTOR OF DIFFERENCED SERIES
6026  REM   M0 = CUMULATIVE SUM OF MOVING AVERAGE TERMS FOR AN OBSERVATION
6028  REM   N0 = NUMBER OF OBSERVATIONS
6030  REM   P0 = NUMBER OF AUTOREGRESSIVE TERMS IN DIFFERENCED SERIES
6032  REM   Q0 = NUMBER OF MOVING AVERAGE TERMS IN DIFFERENCED SERIES
6034  REM   S = VARIANCE OF WHITE NOISE
6036  REM   T = THETA VECTOR OF DIFFERENCED SERIES
6038  REM   W = WHITE NOISE (LAST Q0 VALUES)
6040  REM   W9 = CURRENT WHITE NOISE DISTURBANCE
6042  REM   Z = INITIAL P0+D+50 DATA VALUES
6044  REM
6046  REM
6052  REM
6054  REM   INPUT PARAMETERS
6056  REM
6080  F0=I4
6090  N0=N
6092  PRINT "P,D,Q=";
6094  INPUT P0,D,Q0
6096  IF P0+D <= 10 AND Q0 <= 10 THEN 6101
6098  PRINT "PROBLEM TOO BIG--P+D AND Q CAN BE AT MOST 10"
6100  GOTO 6092
6101  G0=0
6102  IF P0=0 THEN 6114
6104  FOR I=1 TO P0
6106  PRINT "PHI(";I;")=";
6108  INPUT G[I]
6109  G0=G0+G[I]
6110  NEXT I
6111  IF G0#1 THEN 6114
6112  PRINT "THE SUM OF THE PHI'S CANNOT EQUAL 1.  TRY AGAIN."
6113  GOTO 6092
6114  IF Q0=0 THEN 6122
6115  FOR I=1 TO Q0
6116  PRINT "THETA(";I;")=";
6118  INPUT T[I]
6120  NEXT I
6122  PRINT "DELTA=";
6124  INPUT D0
6126  PRINT "SIGMA-SQUARED=";
6128  INPUT S
6130  REM
6132  REM   COMPUTE BINOMIAL COEFFICIENTS
6134  REM   OF DIFFERENCE FORMULA
6136  REM
6138  B[1]=C[1]=C[D+1]=1
6140  IF D=0 THEN 6154
6142  FOR I=2 TO D
6144  B[I]=B[I-1]*I
6146  NEXT I
6148  FOR I=2 TO D
6150  C[I]=B[D]/(B[I-1]*B[D-I+1])
6152  NEXT I
6154  FOR I=1 TO D+1
6156  C[D-I+2]=(-1)^(I+1)*C[D-I+2]
6158  NEXT I
6160  REM
6162  REM   IF P0<D, DEFINE PHI(P+1) = PHI(P+2) = ... = PHI(D) = 0
6164  REM
6166  IF P0 >= D THEN 6180
6168  FOR I=P0+1 TO D
6170  G[I]=0
6172  NEXT I
6174  REM
6176  REM   COMPUTE FIRST D AUTOREGRESSIVE PARAMETERS
6178  REM
6180  IF D=0 THEN 6200
6182  FOR I=1 TO D
6184  F[I]=-C[D-I+1]
6186  FOR J=1 TO I
6188  F[I]=F[I]+C[D-I+J+1]*G[J]
6190  NEXT J
6192  NEXT I
6194  REM
6196  REM   COMPUTE AUTOREGRESSIVE PARAMETERS D+1 THROUGH P0
6198  REM
6200  IF P0 <= D THEN 6226
6202  FOR I=D+1 TO P0
6204  K0=I-D-1
6206  F[I]=0
6208  FOR J=1 TO D+1
6210  F[I]=F[I]+C[J]*G[K0+J]
6212  NEXT J
6214  NEXT I
6216  REM
6218  REM   COMPUTE FINAL AUTOREGRESSIVE PARAMETERS [START WITH LARGER
6220  REM   OF P0+1 AND D+1 TO AVOID REPEATING PARAMETERS CALCULATED 
6222  REM   PREVIOUSLY]
6224  REM
6226  L=(P0 MAX D)+1
6228  IF L>P0+D THEN 6244
6230  FOR I=L TO P0+D
6232  K0=I-P0-1
6234  F[I]=0
6236  FOR J=1 TO D-K0
6238  F[I]=F[I]+C[J]*G[I-D+J-1]
6240  NEXT J
6242  NEXT I
6244  PRINT '10'10"DATA GENERATION NOW IN PROGRESS...";
6246  REM
6248  REM INITIALIZE FIRST OBSERVATIONS
6250  REM
6252  W0=(P0+D) MAX Q0
6254  IF P0+D=0 THEN 6270
6255  R=D0/(1-G0)
6256  FOR I=1 TO W0
6258  X[I,F0]=R
6260  Z[I]=R
6262  NEXT I
6264  REM
6266  REM   GENERATE FIRST Q0 VALUES OF WHITE NOISE
6268  REM
6270  IF Q0=0 THEN 6290
6272  FOR T0=1 TO Q0
6274  Z1=RND(27)
6276  Z2=RND(27)
6278  Z0=SQR(-2*LOG(Z1))*COS(6.28318*Z2)
6280  W[T0]=Z0*SQR(S)
6282  NEXT T0
6284  REM
6286  REM   ACTUAL DATA GENERATION
6288  REM
6290  FOR T0=W0+1 TO N0+50
6292  A=M0=0
6294  REM
6296  REM   GENERATE CURRENT DISTURBANCE
6298  REM
6300  Z1=RND(27)
6302  Z2=RND(27)
6304  Z0=SQR(-2*LOG(Z1))*COS(6.28318*Z2)
6306  W9=Z0*SQR(S)
6308  REM
6310  REM   DOES PROCESS HAVE AUTOREGRESSIVE TERMS?
6312  REM
6314  IF P0+D=0 THEN 6340
6316  REM
6318  REM   ADD AUTOREGRESSIVE TERMS
6320  REM
6322  FOR I=1 TO P0+D
6324  IF T0>50+P0+D THEN 6330
6326  A=A+F[I]*Z[T0-I]
6328  GOTO 6332
6330  A=A+F[I]*X[T0-50-I,F0]
6332  NEXT I
6334  REM
6336  REM   DOES PROCESS HAVE MOVING AVERAGE TERMS?
6338  REM
6340  IF Q0=0 THEN 6364
6342  REM
6344  REM   ADD MOVING AVERAGE TERMS
6346  REM
6348  FOR I=1 TO Q0
6350  M0=M0-T[I]*W[I]
6352  NEXT I
6354  REM
6356  REM   DATA OBSERVATION IS SUM OF AR TERMS, MA TERMS, 
6358  REM   DELTA, AND CURRENT DISTURBANCE
6360  REM
6362  REM
6364  L0=A+M0+D0+W9
6366  REM
6368  REM   UPDATE WHITE NOISE VECTOR
6370  REM
6372  IF Q0=1 THEN 6382
6374  IF Q0=0 THEN 6392
6376  FOR I=Q0 TO 2 STEP -1
6378  W[Q0]=W[Q0-1]
6380  NEXT I
6382  W[1]=W9
6384  REM 
6386  REM   FIRST 50 OBSERVATIONS THROWN OUT TO REDUCE INITIALIZATION
6388  REM   EFFECTS
6390  REM
6392  IF T0 <= 50 THEN 6402
6394  X[T0-50,F0]=L0
6396  IF Q[1]=1 THEN 6400
6398  X[T0-50,K9+2]=1
6400  IF T0>50+P0+D THEN 6404
6402  Z[T0]=L0
6404  NEXT T0
6410  J=F0
6420  GOTO 9000
8999  REM:CHAIN TO IDA912 FOR UPDATING
9000  I4=J
9002  X[N9+3,J]=0
9004  Q[8]=Q[6]=45
9912  CHAIN "$IDA912"
9998  CHAIN "$IDA",150
9999  END 
