Этот пример показывает, как выполнить спектральный анализ данных timeseries с категориальным знаком. Спектральный анализ временных рядов с категориальным знаком полезен, когда вы интересуетесь циклическим поведением данных, значения которых не являются по сути числовыми. Этот пример воспроизводит частично анализ, о котором сообщают в Стоффере и др. (1988). Данные взяты от Стоффера, Тайлера и Вендта (2000).
Данные от исследования состояний сна в новорожденных дочерних элементах. Детский невропатолог выиграл младенца, электроэнцефалографического (EEG), записывающий каждую минуту в течение приблизительно двух часов. Невропатолог категоризировал состояние сна младенца в одно из следующего:
qt
- Подавите шумы сна, альтернанта трассировки
qh
- Подавите шумы сна, высокого напряжения
tr
- Переходный сон
al
- Активный сон, низкое напряжение
ah
- Активный сон, высокое напряжение
aw
- Не спящий
Введите данные. Младенец никогда не бодрствовал во время записи EEG.
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.