Re: Construcing correlation matrix from time-ordered list
- To: mathgroup at smc.vnet.net
- Subject: [mg54748] Re: Construcing correlation matrix from time-ordered list
- From: Peter Pein <petsie at arcor.de>
- Date: Mon, 28 Feb 2005 03:28:38 -0500 (EST)
- References: <cvrqlq$p65$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Adam Getchell wrote:
> Hello all,
>
> I have time series data (a lot of it) in a format like:
>
> {{{1897,1,4},40.37`},{{1897,1,5},40.87`},{{1897,1,6},40.95`},{{1897,1,7},
> 40.87`},{{1897,1,8},40.97`},{{1897,1,11},40.75`},{{1897,1,12},
> 41.4`},{{1897,1,13},41.45`},{{1897,1,14},41.79`},{{1897,1,15},
> 42.27`},{{1897,1,18},42.76`},{{1897,1,19},43.25`},{{1897,1,20},
> 42.78`},{{1897,1,21},42.52`},{{1897,1,22},42.42`}}
>
> ie the year, then the value, for 100+ years.
>
> I'd like to construct a correlation matrix so that year values become
> columns, e.g.
>
> 1897 1898
> ==========
> Value1 Value 1
> Value 2 Value 2
> ...
>
> From my long list of {{{date1},value1},{{date2},value2}}
>
> But I'm not yet sure how to proceed. I'm looking at Cases or Select to
> apply a function for each year range that will pick out that column.
>
> Any pointers appreciated.
>
> --Adam Getchell
>
>
In[1]:=
data={{{1897,1,4},40.37`},{{1897,1,5},40.87`},{{1897,1,6},40.95`},{{1897,1,7},
40.87`},{{1897,1,8},40.97`},{{1897,1,11},40.75`},{{1897,1,12},
41.4`},{{1897,1,13},41.45`},{{1897,1,14},41.79`},{{1897,1,15},
42.27`},{{1897,1,18},42.76`},{{1897,1,19},43.25`},{{1897,1,20},
42.78`},{{1897,1,21},42.52`},{{1897,1,22},42.42`}};
In[2]:= (* just to get two different columns *)
data=Join[data,data/.{{1897,x__},v_}\[Rule]{{2005,x},v+1.3}];
In[3]:= (* 1st split into sublists with same year *)
spl=Split[data, #1[[1,1]] === #2[[1,1]]&];
(* 2nd Print values as requested *)
TableForm[Transpose[Map[Last, spl, {2}]],
TableHeadings -> {None, (#1[[1,1,1]] & ) /@ spl}]
[output left out because of too many formatting functions]
--
Peter Pein
Berlin