filter

Класс: ssm

Прямая рекурсия моделей пространства состояний

Описание

пример

X = filter(Mdl,Y) возвращает отфильтрованные состояния (X) от выполнения прямой рекурсии полностью заданной модели пространства состояний Mdl. То есть filter применяет стандартный фильтр Калмана, используя Mdl и наблюдаемые ответы Y.

пример

X = filter(Mdl,Y,Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар. Например, задайте коэффициенты регрессии и данные предиктора, чтобы сдвинуть наблюдения или задайте, чтобы использовать квадратный корневой фильтр.

Если Mdl не полностью задан, тогда необходимо задать неизвестные параметры как известные скаляры с помощью 'Params' Name,Value аргумент в виде пары.

[X,logL,Output] = filter(___) использует любой из входных параметров в предыдущих синтаксисах, чтобы дополнительно вернуть значение логарифмической правдоподобности (logL) и массив структуры output (Output) с использованием любого из входных параметров в предыдущих синтаксисах. Output содержит:

Входные параметры

расширить все

Стандартная модель пространства состояний, заданная как ssm объект модели, возвращенный ssm или estimate.

Если Mdl не полностью задан (то есть Mdl содержит неизвестные параметры), затем задайте значения для неизвестных параметров используя 'Params' аргумент пары "имя-значение". В противном случае программа выдает ошибку. estimate возвращает полностью заданные модели пространства состояний.

Mdl не хранит наблюдаемые отклики или данные предиктора. Поставляйте данные по мере необходимости с помощью соответствующих входов или аргументов пары "имя-значение".

Наблюдаемые данные отклика на которые Mdl is fit, заданный как числовая матрица или вектор камеры из числовых векторов.

  • Если Mdl является инвариантным по времени относительно уравнения наблюдения, тогда Y является T -by - n матрицей, где каждая строка соответствует периоду, и каждый столбец соответствует конкретному наблюдению в модели. T - размер выборки, а m - количество наблюдений за период. Последняя строка Y содержит последние наблюдения.

  • Если Mdl время изменяется относительно уравнения наблюдения, затем Y - вектор камеры T -by-1. Каждый элемент вектора камеры соответствует периоду и содержит nt-мерный вектор наблюдений для этого периода. Соответствующие размерности матриц коэффициентов в Mdl.C{t} и Mdl.D{t} должна быть согласована с матрицей в Y{t} для всех периодов. Последняя камера Y содержит последние наблюдения.

NaN элементы указывают на отсутствующие наблюдения. Для получения дополнительной информации о том, как фильтр Калмана принимает отсутствующие наблюдения, см. Алгоритмы.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Beta',beta,'Predictors',Z задает отклонение наблюдений регрессионным компонентом, состоящим из данных предиктора Z и матрицу коэффициентов beta.

Коэффициенты регрессии, соответствующие переменным предиктора, заданные как разделенная разделенными запятой парами, состоящая из 'Beta' и a d -by n числовой матрицей. d - количество переменных предиктора (см Predictors) и n количество наблюдаемых серий отклика (см Y).

Если Mdl является оценочной моделью пространства состояний, затем задает оцененные коэффициенты регрессии, сохраненные в estParams.

Значения для неизвестных параметров в модели пространства состояний, заданные как разделенная разделенными запятой парами, состоящая из 'Params' и числовой вектор.

Элементы Params соответствуют неизвестным параметрам в матрицах модели пространства состояний A, B, C, и D, и, опционально, начальное состояние означает Mean0 и ковариационная матрица Cov0.

  • Если вы создали Mdl явным образом (то есть путем задания матриц без функции отображения параметра в матрицу), затем программное обеспечение отображает элементы Params на NaNs в матрицах модели пространства состояний и начальных значениях состояний. Программа ищет NaNs столбцово по порядку A, B, C, D, Mean0, и Cov0.

  • Если вы создали Mdl неявно (то есть путем задания матриц с функцией отображения параметра в матрицу), тогда необходимо задать начальные значения параметров для матриц модели пространства состояний, начальных значений состояний и типов состояний в функции отображения параметра в матрицу.

Если Mdl содержит неизвестные параметры, затем необходимо задать их значения. В противном случае программа игнорирует значение Params.

Типы данных: double

Переменные предиктора в уравнении наблюдения модели пространства состояний, заданные как разделенная разделенными запятой парами, состоящая из 'Predictors' и a T -by d числовой матрицей. T - количество периодов, а d - количество переменных. Строка t соответствует наблюдаемым предикторам в периоде t (Zt). Расширенное уравнение наблюдения

ytZtβ=Cxt+Dut.

То есть программа дефлирует наблюдения, используя регрессионый компонент. β является инвариантным по времени вектором коэффициентов регрессии, которые программное обеспечение оценивает со всеми другими параметрами.

Если наблюдений за период n, то программа регрессирует все ряды предикторов на каждое наблюдение.

Если вы задаете Predictors, затем Mdl должно быть инвариантным по времени. В противном случае программа возвращает ошибку.

По умолчанию программа исключает регрессионный компонент из модели пространства состояний.

Типы данных: double

Квадратный корень фильтра, заданный как разделенная разделенными запятой парами, состоящая из 'SquareRoot' и true или false. Если true, затем estimate применяет метод квадратного корня фильтра при реализации фильтра Калмана.

Если вы подозреваете, что собственные значения отфильтрованного состояния или предсказанных ковариационных матриц наблюдения близки к нулю, задайте 'SquareRoot',true. Квадратный корневой фильтр является устойчивым к численным проблемам, возникающим из-за конечной точности вычислений, но требует больших вычислительных ресурсов.

Пример: 'SquareRoot',true

Типы данных: logical

Прогнозируемый порог неопределенности, заданный как разделенная разделенными запятой парами, состоящая из 'Tolerance' и неотрицательный скаляр.

Если прогнозируемая неопределенность для конкретного наблюдения меньше Tolerance во время числовой оценки, затем программное обеспечение удаляет неопределенность, соответствующую наблюдению, из прогнозной ковариационной матрицы перед ее инверсией.

Лучшая практика задать Tolerance на малое число, для примера, le-15, для преодоления численных препятствий во время оценки.

Пример: 'Tolerance',le-15

Типы данных: double

Одномерная обработка многомерного последовательного флага, заданная как разделенная разделенными запятой парами, состоящая из 'Univariate' и true или false. Одномерное лечение многомерного ряда также известно как sequential filtering.

Одномерное лечение может ускорить и улучшить числовую стабильность фильтра Калмана. Однако все инновации в области наблюдений должны быть некоррелированными. То есть Dt Dt 'должны быть диагональными, где Dt, t = 1,..., T, является одним из следующих:

  • Матрица D{t} в изменяющейся во времени модели пространства состояний

  • Матрица D в инвариантной по времени модели пространства состояний

Пример: 'Univariate',true

Типы данных: logical

Выходные аргументы

расширить все

Отфильтрованные состояния, возвращенные как числовая матрица или вектор камеры из числовых векторов.

Если Mdl является инвариантным по времени, затем количество строк X - размер выборки, T и количество столбцов X количество состояний, m. Последняя строка X содержит последние отфильтрованные состояния.

Если Mdl изменяется ли время, тогда X - вектор камеры с длиной, равной размеру выборки. Камера t X содержит вектор отфильтрованных состояний с длиной, равной количеству состояний в периоде t. Последняя камера X содержит последние отфильтрованные состояния.

Значение функции логарифмической правдоподобности, возвращаемое как скаляр.

Отсутствующие наблюдения не способствуют логарифмической правдоподобности.

Фильтрация результатов по периодам, возвращенная как массив структур.

Output - структура T -by-1, где t элемента соответствует результату фильтрации во время t.

  • Если Univariate является false (это по умолчанию), затем в следующей таблице показаны поля Output.

    ОбластьОписаниеОценка
    LogLikelihoodСкалярное значение целевой функции логарифмической правдоподобностиН/Д
    FilteredStatesmt вектор -by-1 отфильтрованных состоянийE(xt|y1,...,yt)
    FilteredStatesCovmt -by mt дисперсионно-ковариационная матрица отфильтрованных состоянийVar(xt|y1,...,yt)
    ForecastedStatesmt вектор прогнозов состояний -by-1E(xt|y1,...,yt1)
    ForecastedStatesCovmt -by mt дисперсионно-ковариационная матрица прогнозов состоянийVar(xt|y1,...,yt1)
    ForecastedObsht -на-1 прогнозируемый вектор наблюденияE(yt|y1,...,yt1)
    ForecastedObsCovht -by ht дисперсионно-ковариационная матрица прогнозируемых наблюденийVar(yt|y1,...,tt1)
    KalmanGainmt -by  nt скорректированную матрицу усиления КалманаН/Д
    DataUsedht -by-1 логический вектор, указывающий, фильтрует ли программное обеспечение с использованием определенного наблюдения. Для примера, если наблюдение i в момент t является NaN, затем элемент i в DataUsed в то время t как 0.Н/Д

  • Если Univarite является true, затем поля Output являются такими же, как и в предыдущей таблице, за исключением следующих поправок.

    ОбластьИзменения
    ForecastedObsТе же размерности, что и у Univariate = 0, но равны только первые элементы
    ForecastedObsCov

    n вектор -by-1 прогнозируемых отклонений наблюдений.

    Первый элемент этого вектора эквивалентен ForecastedObsCov(1,1) когда Univariate является false. Остальные элементы не обязательно эквивалентны их соответствующим значениям в ForecastObsCov когда Univariate.

    KalmanGainТе же размерности, что и у Univariate является falseоднако KalmanGain может иметь различные значения.

Примеры

расширить все

Предположим, что латентный процесс является AR (1). Уравнение состояния

xt=0.5xt-1+ut,

где ut является Гауссовым со средним 0 и стандартным отклонением 1.

Сгенерируйте случайную серию из 100 наблюдений xt, принимая, что серия начинается с 1,5.

T = 100;
ARMdl = arima('AR',0.5,'Constant',0,'Variance',1);
x0 = 1.5;
rng(1); % For reproducibility
x = simulate(ARMdl,T,'Y0',x0);

Предположим далее, что скрытый процесс подвержен аддитивной ошибке измерения. Уравнение наблюдения

yt=xt+εt,

где εt является Гауссовым со средним 0 и стандартным отклонением 0,75. Вместе латентный процесс и уравнения наблюдений составляют модель пространства состояний.

Используйте процесс случайного скрытого состояния (x) и уравнение наблюдения для генерации наблюдений.

y = x + 0.75*randn(T,1);

Задайте четыре матрицы коэффициентов.

A = 0.5;
B = 1;
C = 1;
D = 0.75;

Задайте модель пространства состояний, используя матрицы коэффициентов.

Mdl = ssm(A,B,C,D)
Mdl = 
State-space model type: ssm

State vector length: 1
Observation vector length: 1
State disturbance vector length: 1
Observation innovation vector length: 1
Sample size supported by model: Unlimited

State variables: x1, x2,...
State disturbances: u1, u2,...
Observation series: y1, y2,...
Observation innovations: e1, e2,...

State equation:
x1(t) = (0.50)x1(t-1) + u1(t)

Observation equation:
y1(t) = x1(t) + (0.75)e1(t)

Initial state distribution:

Initial state means
 x1 
  0 

Initial state covariance matrix
     x1   
 x1  1.33 

State types
     x1     
 Stationary 

Mdl является ssm модель. Проверьте, что модель правильно задана, используя отображение в Командном окне. Программное обеспечение делает вывод, что процесс состояния является стационарным. Впоследствии программное обеспечение устанавливает среднее значение начального состояния и ковариацию в среднее значение и отклонение стационарного распределения модели AR (1).

Фильтрация состояний для периодов с 1 по 100. Постройте график значений истинного состояния и оценок отфильтрованного состояния.

filteredX = filter(Mdl,y);

figure
plot(1:T,x,'-k',1:T,filteredX,':r','LineWidth',2)
title({'State Values'})
xlabel('Period')
ylabel('State')
legend({'True state values','Filtered state values'})

Figure contains an axes. The axes with title State Values contains 2 objects of type line. These objects represent True state values, Filtered state values.

Истинные значения и оценки фильтра примерно одинаковы.

Предположим, что интерес представляет линейная связь между изменением уровня безработицы и номинальным темпом роста валового национального продукта (ННП). Предположим далее, что первым различием уровня безработицы является серия ARMA (1,1). Символически, и в форме пространство состояний, модель является

[x1,tx2,t]=[ϕθ00][x1,t-1x2,t-1]+[11]u1,tyt-βZt=x1,t+σεt,

где:

  • x1,t - изменение уровня безработицы в момент t.

  • x2,t является фиктивным состоянием для эффекта MA (1).

  • y1,t наблюдаемое изменение уровня безработицы отклоняется темпами роста nGNP (Zt).

  • u1,t - Гауссов ряд нарушений порядка состояния, имеющих среднее 0 и стандартное отклонение 1.

  • εt - гауссов ряд инноваций наблюдений, имеющих среднее 0 и стандартное отклонение σ.

Загрузите набор данных Нельсона-Плоссера, который содержит, среди прочего, уровень безработицы и серию nGNP.

load Data_NelsonPlosser

Предварительно обработайте данные, взяв естественный логарифм серии nGNP и первое различие каждой серии. Также удалите стартовую NaN значения из каждой серии.

isNaN = any(ismissing(DataTable),2);       % Flag periods containing NaNs
gnpn = DataTable.GNPN(~isNaN);
u = DataTable.UR(~isNaN);
T = size(gnpn,1);                          % Sample size
Z = [ones(T-1,1) diff(log(gnpn))];
y = diff(u);

Хотя этот пример удаляет отсутствующие значения, программное обеспечение может включать серии, содержащие отсутствующие значения в среде фильтра Калмана.

Задайте матрицы коэффициентов.

A = [NaN NaN; 0 0];
B = [1; 1];
C = [1 0];
D = NaN;

Задайте модель пространства состояний используя ssm.

Mdl = ssm(A,B,C,D);

Оцените параметры модели и используйте случайный набор начальных значений параметров для оптимизации. Задайте регрессионный компонент и его начальное значение для оптимизации с помощью 'Predictors' и 'Beta0' Аргументы пары "имя-значение", соответственно. Ограничьте оценку σ ко всем положительным, вещественным числам.

params0 = [0.3 0.2 0.2];
[EstMdl,estParams] = estimate(Mdl,y,params0,'Predictors',Z,...
    'Beta0',[0.1 0.2],'lb',[-Inf,-Inf,0,-Inf,-Inf]);
Method: Maximum likelihood (fmincon)
Sample size: 61
Logarithmic  likelihood:     -99.7245
Akaike   info criterion:      209.449
Bayesian info criterion:      220.003
           |      Coeff       Std Err    t Stat     Prob  
----------------------------------------------------------
 c(1)      |  -0.34098       0.29608    -1.15164  0.24948 
 c(2)      |   1.05003       0.41377     2.53771  0.01116 
 c(3)      |   0.48592       0.36790     1.32079  0.18657 
 y <- z(1) |   1.36121       0.22338     6.09358   0      
 y <- z(2) | -24.46711       1.60018   -15.29024   0      
           |                                              
           |    Final State   Std Dev     t Stat    Prob  
 x(1)      |   1.01264       0.44690     2.26592  0.02346 
 x(2)      |   0.77718       0.58917     1.31912  0.18713 

EstMdl является ssm модель, и вы можете получить доступ к ее свойствам с помощью записи через точку.

Фильтрация предполагаемой модели пространства состояний. EstMdl не хранит данные или коэффициенты регрессии, поэтому вы должны пройти в них с помощью аргументов пары "имя-значение" 'Predictors' и 'Beta', соответственно. Постройте график расчетных, отфильтрованных состояний. Напомним, что первое состояние - это изменение уровня безработицы, а второе государство помогает строить первое.

filteredX = filter(EstMdl,y,'Predictors',Z,'Beta',estParams(end-1:end));

figure
plot(dates(end-(T-1)+1:end),filteredX(:,1));
xlabel('Period')
ylabel('Change in the unemployment rate')
title('Filtered Change in the Unemployment Rate')

Figure contains an axes. The axes with title Filtered Change in the Unemployment Rate contains an object of type line.

Совет

  • Mdl не сохраняет данные отклика, данные предиктора и коэффициенты регрессии. Поставляйте данные по мере необходимости с помощью соответствующих входов или аргументов пары "имя-значение".

  • Чтобы ускорить оценку для маломерных, инвариантных по времени моделей, задайте 'Univariate',true. Используя эту спецификацию, программное обеспечение последовательно обновляется, а не обновляется все сразу в процессе фильтрации.

Алгоритмы

  • Фильтр Калмана принимает отсутствующие данные, не обновляя фильтрованные оценки состояния, соответствующие отсутствующим наблюдениям. Другими словами, предположим, что в период t отсутствует наблюдение. Затем прогноз состояния для t периода на основе предыдущих наблюдений t-1 и отфильтрованного состояния для t периода эквивалентны.

  • Для явно определенных моделей пространства состояний, filter применяет все предикторы к каждой серии откликов. Однако каждая серия откликов имеет свой собственный набор коэффициентов регрессии.

Ссылки

[1] Дурбин Дж., и С. Дж. Копман. Анализ временных рядов по методам пространства состояний. 2nd ed. Oxford: Oxford University Press, 2012.