MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Problem with lists as matrices for OLS and statistical inference

  • To: mathgroup at smc.vnet.net
  • Subject: [mg81676] Re: Problem with lists as matrices for OLS and statistical inference
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Mon, 1 Oct 2007 04:48:54 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <fdnl6l$kg8$1@smc.vnet.net>

Mauricio Esteban Cuak wrote:

> I tried making some functions for OLS, R square, etc. (yes, I'm aware
> these functions already exist). As a newcomer to Mathematica, I'm a
> bit confused with using lists instead of matrices.
> 
> Here was my first attempt:
> 
> Clear["`*"]; Needs["HypothesisTesting`"];
> firstOLS[x_, y_] := (Inverse[Transpose[x].x]).Transpose[x].y
> 
> And I did also one for estimated variance for the parameters and one
> for R square:
> 
> estimatedvariance[x_,
>  y_] :=(Inverse[Transpose[x].x])*((y - x.firstOLS[x, y]).(y -
> x.firstOLS[x, y]))/(Length[y] -
>     Length[firstOLS[x, y]])
> 
> rsquare_one[x_, y_] := (x.firstOLS[x, y]).(x.firstOLS[x, y])/(y.y)
--------^^
*NEVER* use an underscore, or any other special characters, in symbol 
names (functions, variables, constants, parameters, etc.). In 
Mathematica, names /start/ with a letter and may be followed by one or 
more letters or digits but no white spaces, dashes, underscores, ...

> I tried both with this matrices and it worked fine:
> 
> x = Table[RandomReal[10,
> 10], {30}];y = RandomReal[21, 30];
> 
> So far so good. When I tried using data imported from excel, all hell
> broke loose. Here are the matrices I used for x and y :
> 
> xtwo = {{1.`, 4.351993`, 1.888761`}, {1.`, 4.321984`,
>   1.907567`}, {1.`, 4.290852`, 1.88777`}, {1.`, 4.296212`,
>   1.99383`}, {1.`, 4.258126`, 1.870771`}, {1.`, 4.343519`,
>   1.967788`}, {1.`, 4.337479`, 1.882922`}, {1.`, 4.332442`,
>   1.94114`}, {1.`, 4.36106`, 1.942251`}}
> 
> ytwo = {{3.211156`}, {3.223586`}, {3.226253`}, {3.183556`},
> {3.15343`}, {3.18843`}, {3.17617`}, {3.190737`}, {3.300504`}}
> 
> Now my functions don't work even though they look the same to me!
<snip>

And they are not. Indeed, ytow is not a vector (i.e. one dimensional 
list of atomic expressions) but list of lists (see the parentheses 
around each individual components). You can check this with the built-in 
function *Dimension* (see below for an example). You can make it a 
vector with *Flatten* and your function will work as expected.

Here is a corrected version of your code that also checks its arguments.

In[1]:= Clear["`*"];
Needs["HypothesisTesting`"];

firstOLS[x_, y_] := (Inverse[Transpose[x].x]).Transpose[x].y

estimatedVariance[x_?MatrixQ, y_?VectorQ] /;
   Length[x] ==
    Length[y] := (Inverse[
     Transpose[
       x].x])*((y - x.firstOLS[x, y]).(y - x.firstOLS[x, y]))/(Length[
       y] - Length[firstOLS[x, y]])

rsquareOne[x_?MatrixQ, y_?VectorQ] /;
   Length[x] ==
    Length[y] := (x.firstOLS[x, y]).(x.firstOLS[x, y])/(y.y)

In[6]:= x = Table[RandomReal[10, 10], {30}]; y = RandomReal[21, 30];

In[7]:= Dimensions /@ {x, y}

Out[7]= {{30, 10}, {30}}

In[8]:= estimatedVariance[x, y]

Out[8]= {{0.10593, -0.0259118, 0.030062,
   0.0136462, -0.0118098, -0.0405242, -0.00778524, -0.0395141, \
-0.0153612, -0.00756684}, {-0.0259118,
   0.147215, -0.0509466, -0.0486197, -0.0283033,
   0.00906289, -0.0618385, 0.0660118,
   0.00813397, -0.0120709}, {0.030062, -0.0509466, 0.155962,
   0.00406087, -0.0218077, -0.0190581, -0.00382065, -0.0549665, \
-0.0318577, 0.00124514}, {0.0136462, -0.0486197, 0.00406087,
   0.11328, -0.0383275, -0.00175796, 0.0063815, -0.0404709, -0.0127213,
    0.00564989}, {-0.0118098, -0.0283033, -0.0218077, -0.0383275,
   0.220974, -0.00691283, 0.00181065, -0.0835891, -0.041079,
   0.0420895}, {-0.0405242,
   0.00906289, -0.0190581, -0.00175796, -0.00691283,
   0.107841, -0.0314461, -0.0042561, -0.00256467, -0.00196386}, \
{-0.00778524, -0.0618385, -0.00382065, 0.0063815,
   0.00181065, -0.0314461, 0.15251, -0.0163103,
   0.00566813, -0.0492389}, {-0.0395141,
   0.0660118, -0.0549665, -0.0404709, -0.0835891, -0.0042561, \
-0.0163103, 0.179636, 0.0368754, -0.0608885}, {-0.0153612,
   0.00813397, -0.0318577, -0.0127213, -0.041079, -0.00256467,
   0.00566813, 0.0368754,
   0.123511, -0.0704201}, {-0.00756684, -0.0120709, 0.00124514,
   0.00564989,
   0.0420895, -0.00196386, -0.0492389, -0.0608885, -0.0704201,
   0.157391}}

In[9]:= rsquareOne[x, y]

Out[9]= 0.872819

In[10]:= xtwo = {{1.`, 4.351993`, 1.888761`}, {1.`, 4.321984`,
     1.907567`}, {1.`, 4.290852`, 1.88777`}, {1.`, 4.296212`,
     1.99383`}, {1.`, 4.258126`, 1.870771`}, {1.`, 4.343519`,
     1.967788`}, {1.`, 4.337479`, 1.882922`}, {1.`, 4.332442`,
     1.94114`}, {1.`, 4.36106`, 1.942251`}};

ytwo = {{3.211156`}, {3.223586`}, {3.226253`}, {3.183556`}, \
{3.15343`}, {3.18843`}, {3.17617`}, {3.190737`}, {3.300504`}};

In[12]:= Dimensions /@ {xtwo, ytwo}

Out[12]= {{9, 3}, {9, 1}}

In[13]:= estimatedVariance[xtwo, ytwo]

Out[13]= estimatedVariance[{{1., 4.35199, 1.88876}, {1., 4.32198,
    1.90757}, {1., 4.29085, 1.88777}, {1., 4.29621, 1.99383}, {1.,
    4.25813, 1.87077}, {1., 4.34352, 1.96779}, {1., 4.33748,
    1.88292}, {1., 4.33244, 1.94114}, {1., 4.36106,
    1.94225}}, {{3.21116}, {3.22359}, {3.22625}, {3.18356}, {3.15343}, \
{3.18843}, {3.17617}, {3.19074}, {3.3005}}]

In[14]:= rsquareOne[xtwo, ytwo]

Out[14]= rsquareOne[{{1., 4.35199, 1.88876}, {1., 4.32198,
    1.90757}, {1., 4.29085, 1.88777}, {1., 4.29621, 1.99383}, {1.,
    4.25813, 1.87077}, {1., 4.34352, 1.96779}, {1., 4.33748,
    1.88292}, {1., 4.33244, 1.94114}, {1., 4.36106,
    1.94225}}, {{3.21116}, {3.22359}, {3.22625}, {3.18356}, {3.15343}, \
{3.18843}, {3.17617}, {3.19074}, {3.3005}}]

In[15]:= ytwo = Flatten@ytwo

Out[15]= {3.21116, 3.22359, 3.22625, 3.18356, 3.15343, 3.18843, \
3.17617, 3.19074, 3.3005}

In[16]:= Dimensions@ytwo

Out[16]= {9}

In[17]:= estimatedVariance[xtwo, ytwo]

Out[17]= {{3.56526, -0.79527, -0.0668136}, {-0.79527,
   0.20147, -0.0392576}, {-0.0668136, -0.0392576, 0.123139}}

In[18]:= rsquareOne[xtwo, ytwo]

Out[18]= 0.99989

HTH,
-- 
Jean-Marc


  • Prev by Date: Re: Install problem, 6.0, Mac OS 10.4.10: No kernel connect?
  • Next by Date: Re: Re: Re: Any Mathematica 6 book yet?
  • Previous by thread: Re: Problem with lists as matrices for OLS and statistical inference
  • Next by thread: Re: Re: Any Mathematica 6 book yet?