Поиск периодичности в категориальных временных рядах

Этот пример показывает, как выполнить спектральный анализ категориального данного timeseries. Спектральный анализ категориальных временных рядов полезен, когда вы заинтересованы в циклическом поведении данных, значения которых по своей сути не численны. Этот пример частично воспроизводит анализ, представленный в Stoffer et al. (1988). Данные взяты из Stoffer, Tyler и Wendt (2000).

Данные взяты из исследования состояний сна у новорожденных детей. Детский невролог оценивал электроэнцефалографическую (ЭЭГ) запись ребенка каждую минуту в течение примерно двух часов. Невролог разделил состояние сна младенца на одно из следующих:

  • qt - Тихий сон, трассировка альтернативы

  • qh - Тихий сон, высокое напряжение

  • tr - Переходный сон

  • al - Активный сон, низкое напряжение

  • ah - Активный сон, высокое напряжение

  • aw - Пробудитесь

Введите данные. Младенец никогда не бодрствовал во время записи ЭЭГ.

data = {'ah','ah','ah','ah','ah','ah','ah','ah','tr','ah','tr','ah', ...
   'ah','qh','qt','qt','qt','qt','qt','tr','qt','qt','qt','qt','qt', ...
   'qt','qt','qt','qt','qt','tr','al','al','al','al','al','tr','ah', ...
   'al','al','al','al','al','ah','ah','ah','ah','ah','ah','ah','tr', ...
   'tr','ah','ah','ah','ah','tr','tr','tr','qh','qh','qt','qt','qt', ...
   'qt','qt','qt','qt','qt','qt','qt','qt','qt','qt','qt','qt','qt', ...
   'qt','qt','tr','al','al','al','al','al','al','al','al','al','al', ...
   'al','al','al','al','al','al','al','ah','ah','ah','ah','ah','ah', ...
   'ah','ah','ah','tr'};

lend = length(data);
t = 1:lend;

Самый легкий способ анализа категориальных данных временных рядов для циклических шаблонов включает в себя присвоение числовых значений категориям. Существует по крайней мере два значимых способа присвоения значений состояниям сна младенца. Сначала обратите внимание, что вы можете заказать шесть состояний от 1 до 6. Это назначение имеет смысл в шкале от наименее активного до наиболее активного.

Замените шесть состояний сна на их числовые эквиваленты и постройте график данных.

states = ['qt';'qh';'tr';'al';'ah';'aw'];
levelssix = [1 2 3 4 5 6];

for nn = 1:6
    datasix(strcmp(data,states(nn,:))) = levelssix(nn);
end

plot(t,datasix)
axis([0 lend 0 6])
ax = gca;
ax.YTick = [1 2 4 5];
grid
xlabel('Minutes')
ylabel('Sleep State')

Figure contains an axes. The axes contains an object of type line.

Данные показывают циклическое поведение, когда вы фокусируетесь на переходах между самыми тихими состояниями (1 и 2) и наиболее активными таковыми (4 и 5). Чтобы определить цикл этого поведения, используйте спектральный анализ. Напомним, что состояния сна назначаются за одну минуту интервалов. Выборка данных за одну минуту интервалов эквивалентна выборке данных 60 раз в час.

Fs = 60;
[Pxx,F] = periodogram(detrend(datasix,0),[],240,Fs);

plot(F,Pxx)
grid
xlabel('Cycles/Hour')
title('Periodogram of Sleep States')

Figure contains an axes. The axes with title Periodogram of Sleep States contains an object of type line.

Спектральный анализ показывает четкий пик, указывающий на доминирующее колебание или цикл в данных. Определите частоту пика.

[~,maxidx] = max(Pxx);
Fsix = F(maxidx)
Fsix = 1.2500

Состояния сна младенца демонстрируют циклическое поведение с частотой приблизительно 1,25 цикла/час.

Вместо присвоения состояний сна значениям 1-6 повторите анализ, фокусируясь только на различии между тихим и активным сном. Присвойте тихие состояния, qt и qh, значение 1. Присвойте переходное состояние, tr, значение 2. Наконец, присвойте два активных состояния сна, al и ah, значение 3. Для полноты, присвойте бодрое состояние, aw, значение 4, даже если состояние не происходит в данных.

states = ['qt';'qh';'tr';'al';'ah';'aw'];
levelsfou = [1 1 2 3 3 4];

for nn = 1:6
    datafou(strcmp(data,states(nn,:))) = levelsfou(nn);
end

plot(t,datafou)
axis([0 lend 0 4])
ax = gca;
ax.YTick = [1 2 3];
grid
xlabel('Minutes')
ylabel('Sleep State')

Figure contains an axes. The axes contains an object of type line.

При таком правиле назначения между состояниями ожидания и значениями 1-3 циклическое поведение данных становится более ясным. Повторите спектральный анализ с новым назначением.

[Pxx,F] = periodogram(detrend(datafou,0),[],240,Fs);

plot(F,Pxx)
grid
xlabel('Cycles/Hour')
title('Periodogram of Sleep States')

Figure contains an axes. The axes with title Periodogram of Sleep States contains an object of type line.

[maxval,maxidx] = max(Pxx);
F(maxidx)
ans = 1.2500

Новое задание не изменило заключение. Данные показывают доминирующее колебание с частотой 1,25 оборотов/час. Поскольку отображение между состояниями сна и целыми числами, представляющими эти состояния, было последовательным, анализ и выводы не были затронуты. Основываясь на спектральном анализе этих категориальных данных, вы заключаете, что состояние сна младенца циклически переходит между тихим и активным сном примерно раз в час.

Ссылки

Стоффер, Дэвид С., Марк С. Шер, Гейл А. Ричардсон, Нэнси Л. Дэй и Патриция А. Кобл. «Анализ Уолша-Фурье эффектов умеренного потребления материнского алкоголя на неонатальное состояние сна на велосипеде». Журнал Американской статистической ассоциации. Том 83, 1988, стр. 954-963.

Стоффер, Дэвид С., Д. Э. Тайлер и Д. А. Вендт. «Спектральная огибающая и ее применения». Статистическая наука. Том 15, 2000, стр. 224-253.

См. также

|