In this example three sets of data, X0, X1, and X2 are scaled using the methods described in the following table:
Variables and Scaling Methods
Variable | Method | Description |
X0 |
0 |
No Scaling |
X1 |
4 |
Bounded Z-score scaling using the mean and standard deviation of X1 |
X2 |
5 |
Bounded Z-score scaling using the median and MAD of X2 |
The bounds, measures of center and spread for X1 and X2 are:
Scaling Limits and Measures of Center and Spread
Variable |
Real Limits |
Target Limits |
Measure of Center |
Measure of Spread |
X1 |
(-6, +6) |
(-3, +3) |
3.4 |
1.7421 |
X2 |
(-3, +3) |
(-3, +3) |
2.4 |
1.3343 |
The real and target limits are used for bounded scaling. The measures of center and spread are used to calculate z-scores. Using these values for x1[0]=3.5 yields the following calculations:
For x1[0] , the scale factor is calculated using the real and target limits in the above table:
r = (3-(-3))/(6-(-6)) = 0.5
The z-score for x1[0] is calculated using the measures of center and spread:
z1[0] = (3.5 - 3.4)/1.7421 = 0.057402
Since method=4 is used for x1 , this z-score is bounded (scaled) using the real and target limits:
z1(bounded)
= r
(z1[0]
) - r(realMin) + (targetMin)
= 0.5(0.057402) - 0.5(-6) + (-3) = 0.029
The calculations for x2[0] are nearly identical, except that since method=5 for x2 , the median and MAD replace the mean and standard deviation used to calculate z1(bounded):
r = (3-(-3))/(3-(-3)) = 1,
z2[0] = (3.1 - 2.4)/1.3343 = 0.525, and
z2(bounded)
= r
(z2[0]
) - r(realMin) + (targetMin)
= 1(0.525) - 1(-3) + (-3) = 0.525
import com.imsl.stat.*; import com.imsl.math.*; import com.imsl.datamining.neural.*; public class ScaleFilterEx1 { public static void main(String args[]) throws Exception { ScaleFilter[] scaleFilter = new ScaleFilter[3]; scaleFilter[0] = new ScaleFilter(ScaleFilter.NO_SCALING); scaleFilter[1] = new ScaleFilter(ScaleFilter.BOUNDED_Z_SCORE_SCALING_MEAN_STDEV); scaleFilter[1].setBounds(-6.0, 6.0, -3.0, 3.0); scaleFilter[2] = new ScaleFilter(ScaleFilter.BOUNDED_Z_SCORE_SCALING_MEDIAN_MAD); scaleFilter[2].setBounds(-3.0, 3.0, -3.0, 3.0); int nObs = 5; double[] y0, y1, y2; double[] x0 = {1.2, 0.0, -1.4, 1.5, 3.2}; double[] x1 = {3.5, 2.4, 4.4, 5.6, 1.1}; double[] x2 = {3.1, 1.5, -1.5, 2.4, 4.2}; // Perform forward filtering y0 = scaleFilter[0].encode(x0); y1 = scaleFilter[1].encode(x1); y2 = scaleFilter[2].encode(x2); // Display x0 System.out.print("X0 = {"); for (int i=0; i<4; i++) System.out.print(x0[i]+", "); System.out.println(x0[4]+"}"); // Display summary statistics for X1 System.out.print("\nX1 = {"); for (int i=0; i<4; i++) System.out.print(x1[i]+", "); System.out.println(x1[4]+"}"); System.out.println("X1 Mean: "+scaleFilter[1].getCenter()); System.out.println("X1 Std. Dev.: "+scaleFilter[1].getSpread()); // Display summary statistics for X2 System.out.print("\nX2 = {"); for (int i=0; i<4; i++) System.out.print(x2[i]+", "); System.out.println(x2[4]+"}"); System.out.println("X2 Median: "+scaleFilter[2].getCenter()); System.out.println("X2 MAD/0.6745: "+scaleFilter[2].getSpread()); System.out.println(""); PrintMatrix pm = new PrintMatrix(); pm.setTitle("Filtered X0 Using Method=0 (no scaling)"); pm.print(y0); pm.setTitle("Filtered X1 Using Bounded Z-score Scaling\n"+ "with Center=Mean and Spread=Std. Dev."); pm.print(y1); pm.setTitle("Filtered X2 Using Bounded Z-score Scaling\n"+ "with Center=Median and Spread=MAD/0.6745"); pm.print(y2); // Perform inverse filtering double[] z0, z1, z2; z0 = scaleFilter[0].decode(y0); z1 = scaleFilter[1].decode(y1); z2 = scaleFilter[2].decode(y2); pm.setTitle("Decoded Z0"); pm.print(z0); pm.setTitle("Decoded Z1"); pm.print(z1); pm.setTitle("Decoded Z2"); pm.print(z2); } }
X0 = {1.2, 0.0, -1.4, 1.5, 3.2} X1 = {3.5, 2.4, 4.4, 5.6, 1.1} X1 Mean: 3.4 X1 Std. Dev.: 1.7421251390184345 X2 = {3.1, 1.5, -1.5, 2.4, 4.2} X2 Median: 2.4 X2 MAD/0.6745: 1.3343419966550414 Filtered X0 Using Method=0 (no scaling) 0 0 1.2 1 0 2 -1.4 3 1.5 4 3.2 Filtered X1 Using Bounded Z-score Scaling with Center=Mean and Spread=Std. Dev. 0 0 0.029 1 -0.287 2 0.287 3 0.631 4 -0.66 Filtered X2 Using Bounded Z-score Scaling with Center=Median and Spread=MAD/0.6745 0 0 0.525 1 -0.674 2 -2.923 3 0 4 1.349 Decoded Z0 0 0 1.2 1 0 2 -1.4 3 1.5 4 3.2 Decoded Z1 0 0 3.5 1 2.4 2 4.4 3 5.6 4 1.1 Decoded Z2 0 0 3.1 1 1.5 2 -1.5 3 2.4 4 4.2Link to Java source.