filter

Класс: ssm

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

Описание

filter вычисляет моменты распределенности в течение каждого периода заданных данных об ответе путем рекурсивного применения Фильтра Калмана.

Эффективно вычислить обновленные моменты распределенности только в итоговый период заданных данных об ответе, путем применения одной рекурсии Фильтра Калмана, использования update вместо этого.

пример

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 независимо от времени относительно уравнения наблюдения, затем 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

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

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

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

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

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

ytZtβ=Cxt+Dut.

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

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

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

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

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

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

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

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

Типы данных: логический

Предскажите порог неопределенности в виде разделенной запятой пары, состоящей из '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

Типы данных: логический

Отметьте указание, применить ли фильтр в реальном времени в виде значения в таблице.

ЗначениеОписание
true

filter возвращает только распределение конечного состояния, которое является отфильтрованным состоянием во время T (одна прямая рекурсия Фильтра Калмана). А именно, filter выполняет следующие действия:

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

  2. Возвратите только распределение конечного состояния; выходные параметры не содержат распределения промежуточного состояния.

    • X 1 m вектором из отфильтрованных состояний финала.

    • logL скаляр суммы логарифмической правдоподобности.

    • Output массив структур 1 на 1, сопоставленный с рекурсией во время T. Поля включают:

      • LogLikelihood: сумма логарифмической правдоподобности

      • FilteredStates: m-by-1 вектор из отфильтрованных состояний.

      • FilteredStatesCov: m-by-m матрица неопределенности отфильтрованных состояний.

Mdl должен представлять стандартную модель в пространстве состояний (ssm объект.

false

filter возвращает отфильтрованные состояния и результаты в течение каждого периода во входных данных Y.

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

Типы данных: логический

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

развернуть все

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

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

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

Если вы устанавливаете RealTimeUpdate аргумент значения имени к true, filter возвращает только отфильтрованное состояние в течение времени T, 1 m вектором. Для получения дополнительной информации смотрите RealTimeUpdate.

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

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

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

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

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

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

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

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

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

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

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

Если вы устанавливаете RealTimeUpdate аргумент значения имени к true, filter возвращает только отфильтрованные состояния в течение времени T, его ковариационная матрица и логарифмическая правдоподобность (другими словами, сумма логарифмической правдоподобности, возвращенной update). Для получения дополнительной информации смотрите RealTimeUpdate.

Примеры

развернуть все

Предположим, что скрытый процесс является 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 object. The axes object with title State Values contains 2 objects of type line. These objects represent True state values, Filtered state values.

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

Предположим, что линейное соотношение между изменением в уровне безработицы и темпом роста номинального валового национального продукта (nGNP) представляет интерес. Предположим далее, что первым различием уровня безработицы является серия 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 серия Gaussian воздействий состояния, имеющих среднее значение 0 и стандартное отклонение 1.

  • εt серия Gaussian инноваций наблюдения, имеющих среднее значение 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 object. The axes object with title Filtered Change in the Unemployment Rate contains an object of type line.

Считайте nowcasting моделью в состояниях Фильтра Независимой от времени Модели в пространстве состояний.

Сгенерируйте случайную последовательность 100 наблюдений от xt.

T = 100;
A = 0.5;
B = 1;
C = 1;
D = 0.75;
Mdl = ssm(A,B,C,D);
rng(1); % For reproducibility
y = simulate(Mdl,T);

Предположим, что итоговые 10 наблюдений находятся в горизонте прогноза.

fh = 10;
yf = y((end-fh+1):end); % Holdout sample responses
y = y(1:end-fh);        % In-sample responses

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

[xhat,logL,output] = filter(Mdl,y);
xhatvar = output.FilteredStatesCov;

xhat и xhatvar 90 1 векторы из отфильтрованных состояний в выборке и соответствующих отклонений, соответственно. xhat(t) оценка E(xt|y1,...,yt), и xhatvar оценка Var(xt|y1,...,yt).

Вызовите filter снова, но задайте опцию обновления в реальном времени.

[xhatRT,logLRT,outputRT] = filter(Mdl,y,'RealTimeUpdate',true);
xhatRTvar = outputRT.FilteredStatesCov;

xhatRT и xhatRTvar скаляры, представляющие оценку E(x90|y1,...,y90) и его соответствующее отклонение, соответственно.

Сравните отфильтрованные состояния и отклонения периода 90.

tol = 1e-10;
areMeansEqual = (xhat(end) - xhatRT) < tol
areMeansEqual = logical
   1

areVarsEqual = (xhatvar(end) - xhatRTvar) < tol
areVarsEqual = logical
   0

areLogLsEqual = (logL - logLRT) < tol;

В последний период отфильтрованные состояния, их отклонения и логарифмическая правдоподобность равны.

Nowcast модель в горизонт прогноза путем выполнения этой процедуры в течение каждого последовательного периода:

  1. Установите начальное состояние и его отклонение к их текущим оценкам фильтра. Это действие изменяет модель в пространстве состояний.

  2. Когда наблюдение становится доступным, пропустите его через модель в режиме реального времени.

% Initialize state and variance
state0 = xhatRT;        
var0 = xhatRTvar;

% Preallocate
xhatRTF = zeros(fh,1);
xhatRTvarF = zeros(fh,1);

for j = 1:fh
    Mdl.Mean0 = state0;
    Mdl.Cov0 = var0;
    [xhatRTF(j),~,outputRT] = filter(Mdl,yf(j),'RealTimeUpdate',true); % Alternatively, use update
    xhatRTvarF(j) = outputRT.FilteredStatesCov;
    state0 = xhatRTF(j);
    var0 = xhatRTvarF(j);
end

Отобразите на графике данные и nowcasts.

figure
plot((T-fh-20):T,[y(end-20:end); yf],'b-',(T-fh+1):T,xhatRTF,'r*-')
legend(["Data" "Nowcasts"],'Location',"best")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Data, Nowcasts.

Советы

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

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

Алгоритмы

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

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

Альтернативная функциональность

Чтобы отфильтровать стандартную модель в пространстве состояний в режиме реального времени путем выполнения одной прямой рекурсии Фильтра Калмана, вызовите update функцию вместо этого. В отличие от этого, filter, update выполняет минимальный контроль ввода для вычислительного КПД.

Ссылки

[1] Дербин Дж. и С. Дж. Купмен. Анализ Временных рядов Методами Пространства состояний. 2-й редактор Оксфорд: Издательство Оксфордского университета, 2012.