Re: correlated random vector
- To: mathgroup at smc.vnet.net
- Subject: [mg63990] Re: correlated random vector
- From: "Ray Koopman" <koopman at sfu.ca>
- Date: Thu, 26 Jan 2006 03:43:33 -0500 (EST)
- References: <dqsp65$cbj$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Jan Schmedes wrote: > Dear group, > > given a vector of observed data x i would like to create a vector with > uniform distributed random numbers y that is correlated with the observed > vector, that is, corr(x,y)=r for a given r, say 0.6. Is that possible and > how could i do that in Mathematica? > > Regards > > Jan Here's a general version of my previous solution. This uses Valeri Astanoff's method of handling a variable number of parameters, which is much better than what I had in mind. In[1]:= <<Statistics` In[2]:= unicor2[x_List, r_ /; Abs@r < 1] := Block[ {n = Length@x, u = 1.-r^2, v,w,z}, v = Array[w,n-2]; z = Rest @ First @ QRDecomposition @ Transpose @ Join[ {Table[1.,{n}], x}, Table[Random[],{n-2},{n}]]; If[Negative[x.z[[1]]], z[[1]] *= -1]; Prepend[Last /@ Last @ NMinimize[{#.#&@ListConvolve[{1,-2,1},Sort[Prepend[v,r].z]], v.v == u}, v], r].z] In[3]:= x = Table[Random[],{20}] Out[3]= {0.388446, 0.587678, 0.275674, 0.631232, 0.352318, 0.356175, 0.30096, 0.42984, 0.516199, 0.446825, 0.0433444, 0.288117, 0.22664, 0.41129, 0.130119, 0.114932, 0.0718704, 0.461425, 0.199434, 0.679792} In[4]:= y2 = unicor2[x, .6] Out[4]= {0.240175, 0.0773088, 0.194736, 0.261759, 0.0907826, 0.314476, 0.152402, 0.0783928, 0.00382136, 0.138326, -0.414515, -0.25001, -0.442791, -0.0569127, -0.192389, -0.16771, 0.0428463, 0.177506, -0.360031, 0.111829} In[5]:= Correlation[x,y2] Out[5]= 0.6