Re: Fit vs Regress

*To*: mathgroup at smc.vnet.net*Subject*: [mg4356] Re: Fit vs Regress*From*: rubin at msu.edu (Paul A. Rubin)*Date*: Thu, 11 Jul 1996 01:02:01 -0400*Organization*: Michigan State University*Sender*: owner-wri-mathgroup at wolfram.com

In article <4qqnlu$49m at dragonfly.wolfram.com>, "Prof. L. Seiford, IEOR, UMass, 413/545-1658" <SEIFORD at ecs.umass.edu> wrote: ->I received the following from a colleague. ->I'm not that familiar with the package. ->Does anyone have an explanation? ->thanks ->--larry -> ->>Wayne and I are trying to do a little linear regression, and having trouble. ->>What we want is to fit a linear form to 49 independent variables. We succeed in ->>using the Fit[ ] function as follows: ->> A = ReadList["test3624.mat", Number, RecordLists ->True] ->> y = Array[x,49] ->> z = Fit[A, y, y] ->>which results in ->> z = 0.178173 x[1] + 0.178173 x[2] - 0.0380162 x[3] + ->> 0.0713675 x[4] + 0.178173 x[5] ET CETERA ... x[49] ->> ->>However, the Function Browser window shows us that we can load in the package ->> <<"Statistics`LinearRegression`" ->>and use the Regress[ ] function. We tried this on a super-small data set first, ->>without using any subscripting of the independent variables, and it worked ->>nicely and gave us lots more data about the fit than Fit[ ] gives. ->> ->>However, if we try the full data set with the subscripted variables as above, ->>to wit: ->> A = ReadList["test3624.mat", Number, RecordLists ->True] ->> y = Array[x,49] ->> z = Regress[A, y, y] ->>we get nothing but error messages, in spite of the fact that the function ->>browser suggests that Fit[ ] and Regress[ ] have identical input formats! ->> ->>Any ideas? Regress[ ..., ..., {x, y, z, ...} ] uses Function[ {x, y, z, ...}, ... ], in which the variables names from the regression equation are used as formal parameters to Function. When the variable list has the form y = {x[1], x[2], ..., x[49]}, those formal parameters are actually function calls; e.g., x[1] is the (undefined) function x evaluated at argument 1. This is ok mathematically (after all, subscripting is just treating a symbol as a function of an integer argument), but syntactically it causes Function[] indigestion, hence the error messages. One workaround is to type in the variable names they want: y = {x1, x2, ..}. Another is to change y = Array[ x, 49 ] to y0 = Table[ Unique["x"], 49 ] both places it occurs in the call to Regress, which will give them 49 symbols of the form x$nnn (but not necessarily x$1, x$2, ...). If that's a big deal, they can convert to the other notation after Regress gets done with Regress[ A, y0, y0 ] /. Thread[ Rule[ y0, y ] ] Paul ************************************************************************** * Paul A. Rubin Phone: (517) 432-3509 * * Department of Management Fax: (517) 432-1111 * * Eli Broad Graduate School of Management Net: RUBIN at MSU.EDU * * Michigan State University * * East Lansing, MI 48824-1122 (USA) * ************************************************************************** Mathematicians are like Frenchmen: whenever you say something to them, they translate it into their own language, and at once it is something entirely different. J. W. v. GOETHE ==== [MESSAGE SEPARATOR] ====