Lindo Systems

MODEL:
 ! Multiple linear weighted asymmetric regression;
 ! User can specify: a) weight appled to error
   of each observation, b) a different weight for
   the up error as opposed to the down error, and
   c) the Norm to be used, e.g., absolute error or
    squared error;
! Keywords: regression, weighted regression,
   assymetric regression, L1 norm;
SETS:
 ! Attributes associated with each observation;
  OBS: Y, ERRU, ERRD, WGTU, WGTD; 
 ! Each independent variable has a coefficient;
  INDEP: COEF;
 ! The explanatory data;
  OXI( OBS, INDEP): X;
     
 ENDSETS
 DATA:
  NORM = 2; ! Do least squares;
  INDEP = 1..6; ! Six explanatory variables;
! This is the Longley data set;
! The dependent variable and weights for 
   up and down errors;
   Y, WGTU, WGTD =
60323  1     1
61122	 1     1
60171	 1     1	
61187	 1     1	
63221	 1     1	
63639	 1     1	
64989	 1     1	
63761	 1     1	
66019	 1     1	
67857	 1     1	
68169	 1     1	
66513	 1     1	
68655	 1     1	
69564	 1     1	
69331	 1     1	
70551	 1     1;
X = 
83	234289	2356	1590	107608	1947	
88.5	259426	2325	1456	108632	1948	
88.2	258054	3682	1616	109773	1949	
89.5	284599	3351	1650	110929	1950	
96.2	328975	2099	3099	112075	1951	
98.1	346999	1932	3594	113270	1952	
99	365385	1870	3547	115094	1953	
100	363112	3578	3350	116219	1954	
101.2	397469	2904	3048	117388	1955	
104.6	419180	2822	2857	118734	1956	
108.4	442769	2936	2798	120445	1957	
110.8	444546	4681	2637	121950	1958	
112.6	482704	3813	2552	123366	1959	
114.2	502601	3931	2514	125368	1960	
115.7	518173	4806	2572	127852	1961	
116.9	554894	4007	2827	130081	1962;	

 ENDDATA

! Number of observations; 
 NK = @SIZE( OBS);

! The coefficients may be negative;
 @FREE(COEF0);
 @FOR( INDEP(K):
    @FREE( COEF(K));
     );

! Error = predicted minus actual;
 @FOR( OBS(I):
   ERRU(I) - ERRD(I) = COEF0 + @SUM( INDEP(K): COEF(K)*X(I,K)) - Y(I);
     );

! Minimize weighted norm error;
 MIN = @SUM( OBS(I): WGTU(I)*ERRU(I)^NORM + WGTD(I)*ERRD(I)^NORM);
END