Re: Wald test on mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg82525] Re: Wald test on mathematica
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Tue, 23 Oct 2007 05:35:35 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <ffhr2h$4pb$1@smc.vnet.net>
Mauricio Esteban Cuak wrote:
> Hello there. I've been trying to make a Wald test, but I got into some
> problems. Lists are sort of vectors I guess, but they don't always function
> that way.Here is my ordinary least squares function:
>
> ols[x_, y_] := (Inverse[Transpose[x].x]).Transpose[x].y;
>
> And my wald test:
>
> wald[r_, q_, x_,
> y_] := (Transpose[(r.ols[x, y]) - q].Inverse[
> r.Inverse[Transpose[x].x].Transpose[r]].(r.ols[x, y] - q)*(Part[
> Dimensions[x], 1] -
> Part[Dimensions[xdmda], 2]))/((errors[x, y].errors[x, y])*
> Part[Dimensions[r], 1])
>
> Where r and q make up the linear restrictions as in rb = q
> The thing that bothers me is (and it's the same with ols) that I can't use
> this same function if x is a vector instead of a matrix or if r is a vector,
> because mathematica will not allow me to transpose a one-dimensional list.
> What should I do? Should I make a "If, then" thingy or is there some simpler
> way I'm not aware of for dealing with this kind of situatitions?
Mauricio,
Lists are pervasive in Mathematica. A one dimensional list might
represent a vector but not necessarily (the element of the list can be
numbers, symbols, strings of characters, names of functions, and so
forth). However, vectors are represented by one dimensional lists
without the explicit notion of column or row vector: the correct
interpretation will be determined by Mathematica according to the
specific context when such interpretation is required.
Say we have a column vector x = (1, 2, 3)^T. If we want the dot product
x.x (a scalar), we just use the *Dot* function. If we want the dot
product x'.x (a square matrix), we use the *Outer* function, as in the
following example.
In[1]:= x = {1, 2, 3};
Outer[Times, x, x]
Out[2]= {{1, 2, 3}, {2, 4, 6}, {3, 6, 9}}
If you want that one function behaves differently according to the
structure and/or value of its arguments, you can had some tests one the
argument patterns. For instance,
ols[x_, y_] := ... (* General case *)
ols[x_/;VectorQ[x], y_] := ... (* To be call only if the first argument
is a one dimensional list *)
Having said that, I am not sure to understand what you would like to do
with the first argument as a vector since the resulting matrix x'.x is
going to be singular (rank one) that is not invertible. I may have
overlook something in your request, though.
Hope this helps,
--
Jean-Marc