# EDITED: Variance when only one observation is not NaN

1 view (last 30 days)
Mia Dier on 12 Jan 2021
Edited: Matt J on 12 Jan 2021
EDITED: I think my problem was not clear from the previous example. So, I added a new one below here:
I am trying to calculate a moving variance of the max last 5 years of observations. If remove 'omitnan' then I get NaN for pastvarofA for all the next 5 observations that follows NaN and I don't want that.
I get 0 if there is an observation that is non NaN in the sample that the variance is calculated. But I want to get NaN when that is the case.
A=[4;NaN;5;5;6;8;9];
pastvarofA=NaN(7,1);
for i=2:5
for k=i+1:7
varofA(k,1)=var(A(k-i:k-1), 'omitnan');
end
end
What I want to get is something like this:
pastvarofA
NaN
NaN
Var of 4 and NaN=NaN
Var of 4, NaN and 5= Var of 4 and 5
Var of 4, NaN, 5 and 5= Var of 4, 5 and 5
Var of 4, NaN, 5, 5 and 6 = Var of 4, 5, 5 and 6
Var of NaN, 5, 5, 6 and 8 = Var of 5, 5, 6 and 8
But what I get is this:
parvarA:
NaN
NaN
Var of 4 and NaN= 0
Var of 4, NaN and 5= Var of 4 and 5
Var of 4, NaN, 5 and 5= Var of 4, 5 and 5
Var of 4, NaN, 5, 5 and 6 = Var of 4, 5, 5 and 6
Var of NaN, 5, 5, 6 and 8 = Var of 5, 5, 6 and 8
##### 2 CommentsShowHide 1 older comment
Mia Dier on 12 Jan 2021
It was probably not clear from previous example why removing 'omitnan' didn't solve the problem. I added a new example above and I hope that the problem is clear now!

Matt J on 12 Jan 2021
Edited: Matt J on 12 Jan 2021
A=[1;2;3;NaN;5;5;6];
varofA = 6×1
0.5000 0.5000 NaN NaN 0 0.5000
##### 1 CommentShowHide None
Matt J on 12 Jan 2021
For your new example,
A=[4;NaN;5;5;6;8;9];
pastvarofA=movvar(A,[4,0],'omitnan');
pastvarofA=[nan;pastvarofA(1:end-1)]
pastvarofA = 7×1
NaN 0 0 0.5000 0.3333 0.6667 2.0000

### More Answers (1)

Catalytic on 12 Jan 2021
Omit 'omitnan'
##### 1 CommentShowHide None
Mia Dier on 12 Jan 2021
It was probably not clear from previous example why removing 'omitnan' didn't solve the problem. I added a new example above and I hope that the problem is clear now!