Re: Ignore missing data
- To: mathgroup at smc.vnet.net
- Subject: [mg119005] Re: Ignore missing data
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Thu, 19 May 2011 07:43:52 -0400 (EDT)
On 5/18/11 at 7:15 AM, dimemples at gmail.com (dim) wrote:
>I would like to know how to ignore missing data and to be more
>specific I'll give an example.
>his = {1,2,3,4,5,6,7,,9};
>simcs1 = RandomReal[10, 9];
>simcs2 = RandomReal[10, 9];
>simcsi = a1*simcs1 + a2*simcs2;
>(his - simcsi)^2;
>er = Plus @@ %
>Minimize[{er, 0 <= a1 <= 1 && 0 <= a2 <= 1 && a1 + a2== 1}, {a1, a2}]
>It doesn't work, since the 8th value of "his" is missing. Do you
>know how i could make Mathematica ignore also the corresponding
>values of simcs1 and simcs2? Namely, in my example how to ignore the
>8th value of simcs1 and simcs2.
>Please note that i don't want to delete the missing data, neither to
>make them equal to 0.
Uses Cases[his,_?NumericQ] to select only the numeric values in
his. And use
Pick[his, simcs1, _?NumericQ] to select the corresponding values
of simcs1. To demonstrate:
In[4]:= x = Cases[his, _?NumericQ];
y = Pick[simcs1, his, _?NumericQ];
z = Pick[simcs2, his, _?NumericQ];
In[7]:= Complement[simcs1, y][[1]] == simcs1[[8]]
Out[7]= True
demonstrating the 8th entry for simcs1 was omitted from y. Then
setting up your example equations with the new data items
In[8]:= simcsi = a1*y + a2*z;
(x - simcsi)^2;
er = Plus @@ %;
Minimize[{er, 0 <= a1 <= 1 && 0 <= a2 <= 1 && a1 + a2 == 1},
{a1, a2}]
Out[11]= {49.5278,{a1->0.400533,a2->0.599467}}