$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 study involving the analysis of performance degradation data from accelerated tests, published in IEEE Transactions on Reliability. The response variable is dialectric breakdown strength in kilo-volts, and the predictor variables are time in weeks and temperature in degrees Celcius. Reference: Nelson, W. (1981). Analysis of Performance-Degradation Data. IEEE Transactions on Reliability. Vol. 2, R-30, No. 2, pp. 149-155. Data: 1 Response ( y = dialectric breakdown strength) 2 Predictors (x1 = time; x2 = temperature) 128 Observations Average Level of Difficulty Observed Data Model: Exponential Class 3 Parameters (b1 to b3) log[y] = b1 - b2*x1 * exp[-b3*x2] + e Starting values Certified Values Start 1 Start 2 Parameter Standard Deviation b1 = 2 2.5 2.5906836021E+00 1.9149996413E-02 b2 = 0.0001 0.000000005 5.6177717026E-09 6.1124096540E-09 b3 = -0.01 -0.05 -5.7701013174E-02 3.9572366543E-03 Residual Sum of Squares: 3.7976833176E+00 Residual Standard Deviation: 1.7430280130E-01 Degrees of Freedom: 125 Number of Observations: 128 $offtext *----------------------------------------------------------------------------- * data *----------------------------------------------------------------------------- set i /i1*i128/; table data(i,*) y x1 x2 i1 15.00E0 1E0 180E0 i2 17.00E0 1E0 180E0 i3 15.50E0 1E0 180E0 i4 16.50E0 1E0 180E0 i5 15.50E0 1E0 225E0 i6 15.00E0 1E0 225E0 i7 16.00E0 1E0 225E0 i8 14.50E0 1E0 225E0 i9 15.00E0 1E0 250E0 i10 14.50E0 1E0 250E0 i11 12.50E0 1E0 250E0 i12 11.00E0 1E0 250E0 i13 14.00E0 1E0 275E0 i14 13.00E0 1E0 275E0 i15 14.00E0 1E0 275E0 i16 11.50E0 1E0 275E0 i17 14.00E0 2E0 180E0 i18 16.00E0 2E0 180E0 i19 13.00E0 2E0 180E0 i20 13.50E0 2E0 180E0 i21 13.00E0 2E0 225E0 i22 13.50E0 2E0 225E0 i23 12.50E0 2E0 225E0 i24 12.50E0 2E0 225E0 i25 12.50E0 2E0 250E0 i26 12.00E0 2E0 250E0 i27 11.50E0 2E0 250E0 i28 12.00E0 2E0 250E0 i29 13.00E0 2E0 275E0 i30 11.50E0 2E0 275E0 i31 13.00E0 2E0 275E0 i32 12.50E0 2E0 275E0 i33 13.50E0 4E0 180E0 i34 17.50E0 4E0 180E0 i35 17.50E0 4E0 180E0 i36 13.50E0 4E0 180E0 i37 12.50E0 4E0 225E0 i38 12.50E0 4E0 225E0 i39 15.00E0 4E0 225E0 i40 13.00E0 4E0 225E0 i41 12.00E0 4E0 250E0 i42 13.00E0 4E0 250E0 i43 12.00E0 4E0 250E0 i44 13.50E0 4E0 250E0 i45 10.00E0 4E0 275E0 i46 11.50E0 4E0 275E0 i47 11.00E0 4E0 275E0 i48 9.50E0 4E0 275E0 i49 15.00E0 8E0 180E0 i50 15.00E0 8E0 180E0 i51 15.50E0 8E0 180E0 i52 16.00E0 8E0 180E0 i53 13.00E0 8E0 225E0 i54 10.50E0 8E0 225E0 i55 13.50E0 8E0 225E0 i56 14.00E0 8E0 225E0 i57 12.50E0 8E0 250E0 i58 12.00E0 8E0 250E0 i59 11.50E0 8E0 250E0 i60 11.50E0 8E0 250E0 i61 6.50E0 8E0 275E0 i62 5.50E0 8E0 275E0 i63 6.00E0 8E0 275E0 i64 6.00E0 8E0 275E0 i65 18.50E0 16E0 180E0 i66 17.00E0 16E0 180E0 i67 15.30E0 16E0 180E0 i68 16.00E0 16E0 180E0 i69 13.00E0 16E0 225E0 i70 14.00E0 16E0 225E0 i71 12.50E0 16E0 225E0 i72 11.00E0 16E0 225E0 i73 12.00E0 16E0 250E0 i74 12.00E0 16E0 250E0 i75 11.50E0 16E0 250E0 i76 12.00E0 16E0 250E0 i77 6.00E0 16E0 275E0 i78 6.00E0 16E0 275E0 i79 5.00E0 16E0 275E0 i80 5.50E0 16E0 275E0 i81 12.50E0 32E0 180E0 i82 13.00E0 32E0 180E0 i83 16.00E0 32E0 180E0 i84 12.00E0 32E0 180E0 i85 11.00E0 32E0 225E0 i86 9.50E0 32E0 225E0 i87 11.00E0 32E0 225E0 i88 11.00E0 32E0 225E0 i89 11.00E0 32E0 250E0 i90 10.00E0 32E0 250E0 i91 10.50E0 32E0 250E0 i92 10.50E0 32E0 250E0 i93 2.70E0 32E0 275E0 i94 2.70E0 32E0 275E0 i95 2.50E0 32E0 275E0 i96 2.40E0 32E0 275E0 i97 13.00E0 48E0 180E0 i98 13.50E0 48E0 180E0 i99 16.50E0 48E0 180E0 i100 13.60E0 48E0 180E0 i101 11.50E0 48E0 225E0 i102 10.50E0 48E0 225E0 i103 13.50E0 48E0 225E0 i104 12.00E0 48E0 225E0 i105 7.00E0 48E0 250E0 i106 6.90E0 48E0 250E0 i107 8.80E0 48E0 250E0 i108 7.90E0 48E0 250E0 i109 1.20E0 48E0 275E0 i110 1.50E0 48E0 275E0 i111 1.00E0 48E0 275E0 i112 1.50E0 48E0 275E0 i113 13.00E0 64E0 180E0 i114 12.50E0 64E0 180E0 i115 16.50E0 64E0 180E0 i116 16.00E0 64E0 180E0 i117 11.00E0 64E0 225E0 i118 11.50E0 64E0 225E0 i119 10.50E0 64E0 225E0 i120 10.00E0 64E0 225E0 i121 7.27E0 64E0 250E0 i122 7.50E0 64E0 250E0 i123 6.70E0 64E0 250E0 i124 7.60E0 64E0 250E0 i125 1.50E0 64E0 275E0 i126 1.00E0 64E0 275E0 i127 1.20E0 64E0 275E0 i128 1.20E0 64E0 275E0 ; * * extract data * parameter x1(i),x2(i),y(i); x1(i) = data(i,'x1'); x2(i) = data(i,'x2'); y(i) = data(i,'y'); * * certified values * scalars cb1 'certified value for b1' / 2.5906836021E+00 / cb2 'certified value for b2' / 5.6177717026E-09 / cb3 'certified value for b3' / -5.7701013174E-02 / ce1 'certified std err for b1 ' / 1.9149996413E-02 / ce2 'certified std err for b2 ' / 6.1124096540E-09 / ce3 'certified std err for b3 ' / 3.9572366543E-03 / ; *----------------------------------------------------------------------------- * 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).. log(y(i)) =e= b1 - b2*x1(i) * exp[-b3*x2(i)]; *----------------------------------------------------------------------------- * first set of initial values *----------------------------------------------------------------------------- b1.l = 2; b2.l = 0.0001; b3.l = -0.01; option nlp=nls; model nlfit /obj,fit/; solve nlfit minimizing sse using nlp; display sse.l,b1.l,b2.l,b3.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 = 2.5; b2.l = 0.000000005; b3.l = -0.05; solve nlfit minimizing sse using nlp; display sse.l,b1.l,b2.l,b3.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";