Re: Weights option to Regress command not behaving as expected
- To: mathgroup at smc.vnet.net
- Subject: [mg70934] Re: [mg70804] Weights option to Regress command not behaving as expected
- From: Darren Glosemeyer <darreng at wolfram.com>
- Date: Thu, 2 Nov 2006 06:47:13 -0500 (EST)
- References: <c2baae590610041434g12698b38uef586f9c10381b1d@mail.gmail.com> <200610280921.FAA16058@smc.vnet.net>
The equivalence of the two weighted results is due to the symmetry in the data. If we break that symmetry by, for instance, replacing the first response with a 1, the two weightings provide different results. In[1]:= << Statistics`LinearRegression` In[2]:= binaryjumpdata = Transpose[{Table[x, {x, 1, 100}], Flatten[Union[{Table[0, {50}], Table[1, {50}]}]]}]; In[3]:= forwardweights = Table[1/n, {n, 1, 100}]; In[4]:= backweights = Table[1/(100 - n + 1), {n, 1, 100}]; In[5]:= newdata = binaryjumpdata; In[6]:= newdata[[1, 2]] = 1; In[7]:= BestFit /. Regress[newdata, {1, x}, x, RegressionReport -> {BestFit}, Weights -> forwardweights] Out[7]= 0.211485 + 0.00591118 x In[8]:= BestFit /. Regress[newdata, {1, x}, x, RegressionReport -> {BestFit}, Weights -> backweights] Out[8]= -0.0710847 + 0.0115066 x Darren Glosemeyer Wolfram Research Stern wrote: > I am looking to run regressions to fit a curve to a time series, and I > want older data to weigh less in the fitting than newer data does. > However, I can't seem to make this work as expected. > > For the sake of example, imagine 100 periods with a binary time series > -- it's 0 until time 50, then 1 until time 100. > > binaryjumpdata = > Transpose[{Table[x,{x,1,100}],Flatten[Union[{Table[0,{50}],Table[1,{50}]}]]}]; > > simplefit = > BestFit/.Regress[binaryjumpdata,{1,x},x,RegressionReport\[Rule]{BestFit}]; > > Out = -0.257576+0.0150015 x > > Fine. Now, compare the following two weighting functions: > > forwardweights = Table[1/n, {n, 1, 100}]); > > backweights = Table[1/(100-n+1), {n, 1, 100}]); > > forwardweights drops from 1 to .01, while backweights runs the other > way, from .01 to 1. Applying these two weighting lists to the > binaryjumpdata curve and running the Regress function *should* produce > different best fit line. Forwardweights should produce a lower line, > and backweights should produce a higher one. However, > > weightedfit = > BestFit/.Regress[binaryjumpdata,{1,x},x,RegressionReport\[Rule]{BestFit}, > Weights->forwardweights] > > and > > reverseweightedfit = > BestFit/.Regress[binaryjumpdata,{1,x},x,RegressionReport\[Rule]{BestFit}, > Weights\[Rule]backweights] > > The answer is different from that of the unweighted series, as > expected, but both the forward and reverse application of the weights > produce the exact same output -- -0.0941409+0.0117652 x > > Clearly, the Weights command is not doing what I expect. What am I missing? > > Thanks in advance for any help. > > Michael Stern >