Matlab 自回归(AR)模型的模型阶估计

Matlab 自回归(AR)模型的模型阶估计,matlab,signal-processing,autoregressive-models,spectral-density,Matlab,Signal Processing,Autoregressive Models,Spectral Density,我试图使用MATLAB的pmcov()函数来计算采样频率为1000 Hz、长度为700 ms的离散时间信号的功率谱密度估计(PSD)。此函数需要用于生成PSD估计的自回归模型的模型顺序 我如何估计该模型以预测拟合的正确性?。我知道很少有像AIC,BIC,GIC这样的标准可以用来估计模型阶数,但在matlab中找不到如何使用它们。有人能帮忙吗?我的输入时间信号是一个[700 129]矩阵 非常感谢 如果您的信号非常平滑,您可能只需查看每次试验的自相关函数,然后选择设置顺序作为ACF开始衰减时的延迟

我试图使用MATLAB的
pmcov()
函数来计算采样频率为1000 Hz、长度为700 ms的离散时间信号的功率谱密度估计(PSD)。此函数需要用于生成PSD估计的自回归模型的模型顺序

我如何估计该模型以预测拟合的正确性?。我知道很少有像
AIC
BIC
GIC
这样的标准可以用来估计模型阶数,但在matlab中找不到如何使用它们。有人能帮忙吗?我的输入时间信号是一个
[700 129]
矩阵


非常感谢

如果您的信号非常平滑,您可能只需查看每次试验的自相关函数,然后选择设置顺序作为ACF开始衰减时的延迟

autocorr(Y);
如果你想得到更定量的拟合(这可能比目测和概括129个信号容易)。你可以适应AR模型

首先,您要做的是选择要评估的订单范围(我会查看ACF中的几个信号,然后选择ACF中相对没有信号的订单)

现在,您将迭代每个订单可能性,并计算AIC,BIC。较低的值==更适合

for p = bounds
   myModel = arima(p,0,0);      % no moving average (I'm not sure about no MA...)
   for sig_ind = 1:size(sig_mat,2)
        % Get the log likelihoods
        [~,~,LL(p,sig_ind)]= estimate(myModel,sig_mat(:,sig_ind));
    end
end
for sig_ind = 1:size(sig_mat,2)
    [aic(sig_ind,:),bic(sig_ind,:)] = aicbic(LL(:,sig_ind),bounds,size(sig_mat,1));
end
所以现在你有了你的BIC分数,你想选择最低的。 在这种情况下,我使用信号的平均值,如果你愿意的话 非常小心,我会查看分布并选择一个较低的
分布紧密的中位数。您还可以使用AIC进行评估

[~,order_ind] = min(mean(bic,1));
order = bound(order_ind);

如果您的信号是可靠的平滑,您可能只需查看每个试验的自相关函数,然后选择设置顺序作为ACF开始衰减时的延迟

autocorr(Y);
如果你想得到更定量的拟合(这可能比目测和概括129个信号容易)。你可以适应AR模型

首先,您要做的是选择要评估的订单范围(我会查看ACF中的几个信号,然后选择ACF中相对没有信号的订单)

现在,您将迭代每个订单可能性,并计算AIC,BIC。较低的值==更适合

for p = bounds
   myModel = arima(p,0,0);      % no moving average (I'm not sure about no MA...)
   for sig_ind = 1:size(sig_mat,2)
        % Get the log likelihoods
        [~,~,LL(p,sig_ind)]= estimate(myModel,sig_mat(:,sig_ind));
    end
end
for sig_ind = 1:size(sig_mat,2)
    [aic(sig_ind,:),bic(sig_ind,:)] = aicbic(LL(:,sig_ind),bounds,size(sig_mat,1));
end
所以现在你有了你的BIC分数,你想选择最低的。 在这种情况下,我使用信号的平均值,如果你愿意的话 非常小心,我会查看分布并选择一个较低的
分布紧密的中位数。您还可以使用AIC进行评估

[~,order_ind] = min(mean(bic,1));
order = bound(order_ind);