As established at length yesterday dj.y is not legal syntax.
-
Login or Register
- Log in with
cscript /* generate some data */ set seed 123232651 set obs 5 gen int dj = _n local ex = 25 expand `ex' sort dj gen t = _n tsset t scalar alpha = .5 scalar gamma = 1.2 scalar beta_1 = 2 gen double x = rnormal() gen double e = rnormal() qui gen double y = . /* user's function nl(y=({alpha=inv_a}**dj))*dj.y + {gamma=inv_g}*(1-{alpha=inv_a}**dj)/(1-{alpha=inv_a})+ ({beta_1= inv_b1})*(1-{alpha=inv_a}**dj)/(1-{alpha=inv_a})*x */ local N = _N forvalues i=1/`N' { /* extract the current lag */ local l = dj in `i' qui replace y = gamma*(1-alpha^dj)/(1-alpha)+ /// beta_1*(1-alpha^dj)/(1-alpha)*x + e in `i' if `i' > `l' { qui replace y = y + (alpha^dj)*L`l'.y in `i' } } tsline y program define nlts syntax varlist(min=3 max=3) [if], at(name) /* ignore if; requires more complicated code */ gettoken yhat varlist : varlist gettoken x dj : varlist tempname b alpha beta gamma /* extract estimates */ foreach el in alpha beta gamma { mat `b' = `at'[1,"`el'"] scalar ``el'' = `b'[1,1] } local N = _N forvalues i=1/`N' { local l = `dj' in `i' qui replace `yhat' = `gamma'*(1-`alpha'^`dj')/(1-`alpha')+ /// `beta'*(1-`alpha'^`dj')/(1-`alpha')*`x' /// in `i' if `i' > `l' { qui replace `yhat' = `yhat' + /// (`alpha'^`dj')*L`l'.`yhat' in `i' } } end scalar a = .1 scalar g = .5 scalar b = .5 nl ts @ y x dj, parameters(alpha beta gamma) noconstant /// init(alpha `=a' beta `=b' gamma `=g') exit
. scalar a = .1 . scalar g = .5 . scalar b = .5 . . nl ts @ y x dj, parameters(alpha beta gamma) noconstant /// > init(alpha `=a' beta `=b' gamma `=g') (obs = 125) Iteration 0: residual SS = 486.6029 Iteration 1: residual SS = 192.2623 Iteration 2: residual SS = 157.9439 Iteration 3: residual SS = 156.5889 Iteration 4: residual SS = 156.5879 Iteration 5: residual SS = 156.5879 Iteration 6: residual SS = 156.5879 Source | SS df MS -------------+------------------------------ Number of obs = 125 Model | 1850.05189 3 616.683962 R-squared = 0.9220 Residual | 156.587923 122 1.28350757 Adj R-squared = 0.9200 -------------+------------------------------ Root MSE = 1.13292 Total | 2006.63981 125 16.0531185 Res. dev. = 382.8976 ------------------------------------------------------------------------------ y | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- /alpha | .4820751 .038691 12.46 0.000 .4054825 .5586678 /beta | 1.984883 .1127831 17.60 0.000 1.761617 2.208148 /gamma | 1.097183 .0969433 11.32 0.000 .9052741 1.289092 ------------------------------------------------------------------------------
/* user's function nl(y=({alpha=inv_a}**5))*l5.y + {gamma=inv_g}*(1-{alpha=inv_a}**l5.y)/(1-{alpha=inv_a})+ ({beta_1= inv_b1})*(1-{alpha=inv_a}**5)/(1-{alpha=inv_a})*x
nl( y=({alpha=inv_a}^5 )*l5.y + {gamma= inv_g}*(1-{alpha=inv_a}^5)/(1-{alpha=inv_a}) + {beta_1= inv_b1}*(1-{alpha=inv_a }^5)/(1-{alpha=inv_a})*x) if inrange(year, 1980, 1985) & m>1 I'm exploring a stacked dataset where m==1 when dj==.
Iteration 0: residual SS = 19.61372 Iteration 1: residual SS = 5.013322 Iteration 2: residual SS = 5.011349 Iteration 3: residual SS = 5.011349 Source | SS df MS -------------+------------------------------ Number of obs = 108 Model | 2.52775059 2 1.26387529 R-squared = 0.3353 Residual | 5.01134883 105 .047727132 Adj R-squared = 0.3226 -------------+------------------------------ Root MSE = .2184654 Total | 7.53909942 107 .070458873 Res. dev. = -25.1153 ------------------------------------------------------------------------------ y | Coef. Std. Err. t P>|t| [95% Conf. Interval] -------------+---------------------------------------------------------------- /alpha | .7426338 .0424689 17.49 0.000 .6584258 .8268418 /gamma | 2.801493 .4932631 5.68 0.000 1.823443 3.779543 /beta_1 | -.0119158 .0053325 -2.23 0.028 -.0224891 -.0013424 ------------------------------------------------------------------------------ Parameter gamma taken as constant term in model & ANOVA table
. nl(y=({alpha=.9948274 }^7)*l7.y + {gamma=2.260842}*(1-{alpha=.9948274}^7)/(1-{alpha=.9948274}) + {b > eta_1=.0062294}*(1-{alpha=.9948274}^7)/(1-{alpha=.9948274 })*x) if inrange(year, 1985, 1992) & m>1 (obs = 540) starting values invalid or some RHS variables have missing values r(480); end of do-file r(480);
Comment