Этот пример показывает, как выполнить спектральный анализ категориального данного 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')
Данные показывают циклическое поведение, когда вы фокусируетесь на переходах между самыми тихими состояниями (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')
Спектральный анализ показывает четкий пик, указывающий на доминирующее колебание или цикл в данных. Определите частоту пика.
[~,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')
При таком правиле назначения между состояниями ожидания и значениями 1-3 циклическое поведение данных становится более ясным. Повторите спектральный анализ с новым назначением.
[Pxx,F] = periodogram(detrend(datafou,0),[],240,Fs); plot(F,Pxx) grid xlabel('Cycles/Hour') title('Periodogram of Sleep States')
[maxval,maxidx] = max(Pxx); F(maxidx)
ans = 1.2500
Новое задание не изменило заключение. Данные показывают доминирующее колебание с частотой 1,25 оборотов/час. Поскольку отображение между состояниями сна и целыми числами, представляющими эти состояния, было последовательным, анализ и выводы не были затронуты. Основываясь на спектральном анализе этих категориальных данных, вы заключаете, что состояние сна младенца циклически переходит между тихим и активным сном примерно раз в час.
Ссылки
Стоффер, Дэвид С., Марк С. Шер, Гейл А. Ричардсон, Нэнси Л. Дэй и Патриция А. Кобл. «Анализ Уолша-Фурье эффектов умеренного потребления материнского алкоголя на неонатальное состояние сна на велосипеде». Журнал Американской статистической ассоциации. Том 83, 1988, стр. 954-963.
Стоффер, Дэвид С., Д. Э. Тайлер и Д. А. Вендт. «Спектральная огибающая и ее применения». Статистическая наука. Том 15, 2000, стр. 224-253.