?=================================================================== ? Mainframe version of LOGIT marginal effects program. = ? = ? User must define the data matrix with the following line: = ? = ? NAMELIST ; X = ... $ = ? = ? User's dependent variable is Y. Change the following line = ? = ? CREATE ; Y = the dependent variable $ = ?=================================================================== OPEN ; Output=mrginals.mf$ LOGIT ; Lhs = y ; Rhs = X $ CALC ; Nolist ; K = col(X) ; jplus1 = max(y) + 1 ; i = 2 ; i1=1 ; i2=K $ MATRIX ; Nolist ; ones = init(jplus1,1,1) ; IK = Iden(K) ; beta=init (k,jplus1,0) ; xbar = mean(X) $ PROCEDURE MATRIX ; Nolist ; bj=part(b,i1,i2) ;beta(*,i)=bj $ CALC ; Nolist ; i1=i1+k;i2=i2+k$ ENDPROC EXECUTE ; i = 2,jplus1 $ FAST MATRIX ; Nolist ; Prob = beta' | xbar ; Prob = expn(prob) ; Prob = {Nolist;1/dot(prob,ones)}*prob ; bbar = beta | prob ; Delta = beta ~ bbar |ones' ; Delta = Delta | diag(Prob) $ PROCEDURE LABEL ; 1000 $ MATRIX ; Nolist ; deltai=part(delta,1,k,i,i) ; vardelta=init(k,k,0) $ CALC ; Nolist ; l=1 ; k1l=1 ; k2l=k$ LABEL ; 500 $ CALC ; Nolist ; m=1 ; k1m=1 ; k2m=k$ LABEL ; 550 $ MATRIX ; Nolist ; clm = part(varb,k1l,k2l,k1m,k2m) $ CALC ; Nolist ; sl= -prob(i)*prob(l) ; tl=-2*prob(l) ; if[i = l] ; sl=sl+prob(i) ; tl=tl+prob(i) $ CALC ; Nolist ; sm= -prob(i)*prob(m) ; tm=-2*prob(m) ; if[i = m] ; sm=sm+prob(i) ; tm=tm+prob(i) $ MATRIX ; Nolist ; vl = sl * Ik & tl * deltai | xbar' ; vm = sm * Ik & tm * deltai | xbar' ; vardelta = vardelta & vl | clm | vm' $ CALC ; Nolist ; m=m+1 ; k1m = k1m+k ; k2m = k2m+k $ GO TO ; 550 ; m < jplus1 $ CALC ; Nolist ; l=l+1 ; k1l = k1l+k ; k2l = k2l+k $ GO TO ; 500 ; l < jplus1 $ TYPE ; Marginal effects for prob. J with respect to change in X$ CALC ; Nolist ; j=i-1 $ MATRIX ; stat(deltai,vardelta) $ ENDPROC EXECUTE ; i=1,jplus1$