$ontext Nonlinear Least Squares Regression example Erwin Kalvelagen, nov 2007 Reference: http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml -------------------------------------------------------------------------- Procedure: Nonlinear Least Squares Regression Description: These data are the result of a NIST study involving ultrasonic calibration. The response variable is ultrasonic response, and the predictor variable is metal distance. Reference: Chwirut, D., NIST (197?). Ultrasonic Reference Block Study. Data: 1 Response Variable (y = ultrasonic response) 1 Predictor Variable (x = metal distance) 214 Observations Lower Level of Difficulty Observed Data Model: Exponential Class 3 Parameters (b1 to b3) y = exp[-b1*x]/(b2+b3*x) + e Starting values Certified Values Start 1 Start 2 Parameter Standard Deviation b1 = 0.1 0.15 1.9027818370E-01 2.1938557035E-02 b2 = 0.01 0.008 6.1314004477E-03 3.4500025051E-04 b3 = 0.02 0.010 1.0530908399E-02 7.9281847748E-04 Residual Sum of Squares: 2.3844771393E+03 Residual Standard Deviation: 3.3616721320E+00 Degrees of Freedom: 211 Number of Observations: 214 $offtext *----------------------------------------------------------------------------- * data *----------------------------------------------------------------------------- set i /i1*i214/; table data(i,*) y x i1 92.9000E0 0.5000E0 i2 78.7000E0 0.6250E0 i3 64.2000E0 0.7500E0 i4 64.9000E0 0.8750E0 i5 57.1000E0 1.0000E0 i6 43.3000E0 1.2500E0 i7 31.1000E0 1.7500E0 i8 23.6000E0 2.2500E0 i9 31.0500E0 1.7500E0 i10 23.7750E0 2.2500E0 i11 17.7375E0 2.7500E0 i12 13.8000E0 3.2500E0 i13 11.5875E0 3.7500E0 i14 9.4125E0 4.2500E0 i15 7.7250E0 4.7500E0 i16 7.3500E0 5.2500E0 i17 8.0250E0 5.7500E0 i18 90.6000E0 0.5000E0 i19 76.9000E0 0.6250E0 i20 71.6000E0 0.7500E0 i21 63.6000E0 0.8750E0 i22 54.0000E0 1.0000E0 i23 39.2000E0 1.2500E0 i24 29.3000E0 1.7500E0 i25 21.4000E0 2.2500E0 i26 29.1750E0 1.7500E0 i27 22.1250E0 2.2500E0 i28 17.5125E0 2.7500E0 i29 14.2500E0 3.2500E0 i30 9.4500E0 3.7500E0 i31 9.1500E0 4.2500E0 i32 7.9125E0 4.7500E0 i33 8.4750E0 5.2500E0 i34 6.1125E0 5.7500E0 i35 80.0000E0 0.5000E0 i36 79.0000E0 0.6250E0 i37 63.8000E0 0.7500E0 i38 57.2000E0 0.8750E0 i39 53.2000E0 1.0000E0 i40 42.5000E0 1.2500E0 i41 26.8000E0 1.7500E0 i42 20.4000E0 2.2500E0 i43 26.8500E0 1.7500E0 i44 21.0000E0 2.2500E0 i45 16.4625E0 2.7500E0 i46 12.5250E0 3.2500E0 i47 10.5375E0 3.7500E0 i48 8.5875E0 4.2500E0 i49 7.1250E0 4.7500E0 i50 6.1125E0 5.2500E0 i51 5.9625E0 5.7500E0 i52 74.1000E0 0.5000E0 i53 67.3000E0 0.6250E0 i54 60.8000E0 0.7500E0 i55 55.5000E0 0.8750E0 i56 50.3000E0 1.0000E0 i57 41.0000E0 1.2500E0 i58 29.4000E0 1.7500E0 i59 20.4000E0 2.2500E0 i60 29.3625E0 1.7500E0 i61 21.1500E0 2.2500E0 i62 16.7625E0 2.7500E0 i63 13.2000E0 3.2500E0 i64 10.8750E0 3.7500E0 i65 8.1750E0 4.2500E0 i66 7.3500E0 4.7500E0 i67 5.9625E0 5.2500E0 i68 5.6250E0 5.7500E0 i69 81.5000E0 .5000E0 i70 62.4000E0 .7500E0 i71 32.5000E0 1.5000E0 i72 12.4100E0 3.0000E0 i73 13.1200E0 3.0000E0 i74 15.5600E0 3.0000E0 i75 5.6300E0 6.0000E0 i76 78.0000E0 .5000E0 i77 59.9000E0 .7500E0 i78 33.2000E0 1.5000E0 i79 13.8400E0 3.0000E0 i80 12.7500E0 3.0000E0 i81 14.6200E0 3.0000E0 i82 3.9400E0 6.0000E0 i83 76.8000E0 .5000E0 i84 61.0000E0 .7500E0 i85 32.9000E0 1.5000E0 i86 13.8700E0 3.0000E0 i87 11.8100E0 3.0000E0 i88 13.3100E0 3.0000E0 i89 5.4400E0 6.0000E0 i90 78.0000E0 .5000E0 i91 63.5000E0 .7500E0 i92 33.8000E0 1.5000E0 i93 12.5600E0 3.0000E0 i94 5.6300E0 6.0000E0 i95 12.7500E0 3.0000E0 i96 13.1200E0 3.0000E0 i97 5.4400E0 6.0000E0 i98 76.8000E0 .5000E0 i99 60.0000E0 .7500E0 i100 47.8000E0 1.0000E0 i101 32.0000E0 1.5000E0 i102 22.2000E0 2.0000E0 i103 22.5700E0 2.0000E0 i104 18.8200E0 2.5000E0 i105 13.9500E0 3.0000E0 i106 11.2500E0 4.0000E0 i107 9.0000E0 5.0000E0 i108 6.6700E0 6.0000E0 i109 75.8000E0 .5000E0 i110 62.0000E0 .7500E0 i111 48.8000E0 1.0000E0 i112 35.2000E0 1.5000E0 i113 20.0000E0 2.0000E0 i114 20.3200E0 2.0000E0 i115 19.3100E0 2.5000E0 i116 12.7500E0 3.0000E0 i117 10.4200E0 4.0000E0 i118 7.3100E0 5.0000E0 i119 7.4200E0 6.0000E0 i120 70.5000E0 .5000E0 i121 59.5000E0 .7500E0 i122 48.5000E0 1.0000E0 i123 35.8000E0 1.5000E0 i124 21.0000E0 2.0000E0 i125 21.6700E0 2.0000E0 i126 21.0000E0 2.5000E0 i127 15.6400E0 3.0000E0 i128 8.1700E0 4.0000E0 i129 8.5500E0 5.0000E0 i130 10.1200E0 6.0000E0 i131 78.0000E0 .5000E0 i132 66.0000E0 .6250E0 i133 62.0000E0 .7500E0 i134 58.0000E0 .8750E0 i135 47.7000E0 1.0000E0 i136 37.8000E0 1.2500E0 i137 20.2000E0 2.2500E0 i138 21.0700E0 2.2500E0 i139 13.8700E0 2.7500E0 i140 9.6700E0 3.2500E0 i141 7.7600E0 3.7500E0 i142 5.4400E0 4.2500E0 i143 4.8700E0 4.7500E0 i144 4.0100E0 5.2500E0 i145 3.7500E0 5.7500E0 i146 24.1900E0 3.0000E0 i147 25.7600E0 3.0000E0 i148 18.0700E0 3.0000E0 i149 11.8100E0 3.0000E0 i150 12.0700E0 3.0000E0 i151 16.1200E0 3.0000E0 i152 70.8000E0 .5000E0 i153 54.7000E0 .7500E0 i154 48.0000E0 1.0000E0 i155 39.8000E0 1.5000E0 i156 29.8000E0 2.0000E0 i157 23.7000E0 2.5000E0 i158 29.6200E0 2.0000E0 i159 23.8100E0 2.5000E0 i160 17.7000E0 3.0000E0 i161 11.5500E0 4.0000E0 i162 12.0700E0 5.0000E0 i163 8.7400E0 6.0000E0 i164 80.7000E0 .5000E0 i165 61.3000E0 .7500E0 i166 47.5000E0 1.0000E0 i167 29.0000E0 1.5000E0 i168 24.0000E0 2.0000E0 i169 17.7000E0 2.5000E0 i170 24.5600E0 2.0000E0 i171 18.6700E0 2.5000E0 i172 16.2400E0 3.0000E0 i173 8.7400E0 4.0000E0 i174 7.8700E0 5.0000E0 i175 8.5100E0 6.0000E0 i176 66.7000E0 .5000E0 i177 59.2000E0 .7500E0 i178 40.8000E0 1.0000E0 i179 30.7000E0 1.5000E0 i180 25.7000E0 2.0000E0 i181 16.3000E0 2.5000E0 i182 25.9900E0 2.0000E0 i183 16.9500E0 2.5000E0 i184 13.3500E0 3.0000E0 i185 8.6200E0 4.0000E0 i186 7.2000E0 5.0000E0 i187 6.6400E0 6.0000E0 i188 13.6900E0 3.0000E0 i189 81.0000E0 .5000E0 i190 64.5000E0 .7500E0 i191 35.5000E0 1.5000E0 i192 13.3100E0 3.0000E0 i193 4.8700E0 6.0000E0 i194 12.9400E0 3.0000E0 i195 5.0600E0 6.0000E0 i196 15.1900E0 3.0000E0 i197 14.6200E0 3.0000E0 i198 15.6400E0 3.0000E0 i199 25.5000E0 1.7500E0 i200 25.9500E0 1.7500E0 i201 81.7000E0 .5000E0 i202 61.6000E0 .7500E0 i203 29.8000E0 1.7500E0 i204 29.8100E0 1.7500E0 i205 17.1700E0 2.7500E0 i206 10.3900E0 3.7500E0 i207 28.4000E0 1.7500E0 i208 28.6900E0 1.7500E0 i209 81.3000E0 .5000E0 i210 60.9000E0 .7500E0 i211 16.6500E0 2.7500E0 i212 10.0500E0 3.7500E0 i213 28.9000E0 1.7500E0 i214 28.9500E0 1.7500E0 ; * * extract data * parameter x(i),y(i); x(i) = data(i,'x'); y(i) = data(i,'y'); * * certified values * scalars cb1 'certified value for b1' / 1.9027818370E-01 / cb2 'certified value for b2' / 6.1314004477E-03 / cb3 'certified value for b3' / 1.0530908399E-02 / ce1 'certified std err for b1 ' / 2.1938557035E-02 / ce2 'certified std err for b2 ' / 3.4500025051E-04 / ce3 'certified std err for b3 ' / 7.9281847748E-04 / ; *----------------------------------------------------------------------------- * statistical model *----------------------------------------------------------------------------- variables sse 'sum of squared errors' b1 'coefficient to estimate' b2 'coefficient to estimate' b3 'coefficient to estimate' ; equations fit(i) 'the non-linear model' obj 'objective' ; obj.. sse =n= 0; fit(i).. y(i) =e= exp(-b1*x(i))/(b2+b3*x(i)); *----------------------------------------------------------------------------- * first set of initial values *----------------------------------------------------------------------------- b1.l = 0.1; b2.l = 0.01; b3.l = 0.02; option nlp=nls; model nlfit /obj,fit/; solve nlfit minimizing sse using nlp; display sse.l,b1.l,b2.l; abort$((abs(b1.l-cb1)+abs(b2.l-cb2)+abs(b3.l-cb3))>0.0001) "Accuracy problem"; abort$((abs(b1.m-ce1)+abs(b2.m-ce2)+abs(b3.m-ce3))>0.0001) "Accuracy problem"; *----------------------------------------------------------------------------- * second set of initial values *----------------------------------------------------------------------------- b1.l = 0.15; b2.l = 0.008; b3.l = 0.010; solve nlfit minimizing sse using nlp; display sse.l,b1.l,b2.l; abort$((abs(b1.l-cb1)+abs(b2.l-cb2)+abs(b3.l-cb3))>0.0001) "Accuracy problem"; abort$((abs(b1.m-ce1)+abs(b2.m-ce2)+abs(b3.m-ce3))>0.0001) "Accuracy problem";