在matlab中处理NaN,任务简单



我正在matlab中处理数据。

参见代码:

x = rand(10,1)
y = [1,2,3,4,5,6,7,8,9,10]'
z = [NaN, NaN, NaN, NaN, 1, 2, 3, 4]'
ww = mean(z)-mean(y)

由此,ww = Nan我如何处理这些NaN值,我希望ww是

ww = 8.5-2.5

8.5来自y的最后四个数字,2.5来自z的最后四位数字。

我在MATLAB中用时间序列数据进行回归,对于某些序列,在序列的开头缺少数据NaNs。我想知道如何处理它们,上面的例子是一个完全极小的例子。

编辑:

对于稍微复杂一点的例子,尝试使用archtest

clear;
%data
data = xlsread('RETURNS.xlsx',2);
for jj = 2:51
for ii = 1:12
residuals = data(:,jj) - mean(data(:,jj));
h(jj,ii) = archtest(residuals,'Lags',ii);
end
end

其中某些列中存在NaN。

原始问题的答案:

您可以通过提供标志omitnan:来告诉mean函数和其他几个函数忽略NaN

y = [1,2,3,4,5,6,7,8,9,10]'
z = [NaN, NaN, NaN, NaN, 1, 2, 3, 4]'
ww = mean(z,'omitnan')-mean(y,'omitnan')

其他几个函数,如maxminsumprod等也接受此标志。

顺便说一句,如果您正在处理时间序列数据,您可能需要检查是否可以使用timetable。它可能会简化您的一些工作流程。

更新问题的答案

我不确定archtest的作用,因为它不在我的专业领域,但如果您的工作流程简单地删除NaN是可以的,那么您可以使用rmmissing作为删除它们的预处理步骤。但是,我不确定这是否会影响Lags的含义,因为您正在删除索引。我认为在这种情况下,你必须决定对你的数据做什么是合适的。如果您只是想用其他值(如0(替换NaN,则可以使用fillmissing来执行此操作。

相关内容

  • 没有找到相关文章

最新更新