Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

カテゴリカル時系列における周期性の検出

この例では、カテゴリカルに評価された時系列データのスペクトル解析を実行する方法を示します。カテゴリカルに評価された時系列データのスペクトル解析は、本質的に数値ではないデータの周期的動作に着目する場合に便利です。この例では、次の文献で報告されている解析の一部を再現しています。Stoffer et al. (1988).データは Stoffer、Tyler および Wendt (2000) の研究データから採用しています。

データは新生児の睡眠状態の研究のものです。ある小児神経科医が幼児の脳波 (EEG) を約 2 時間 1 分ごとに記録し、そのデータをスコア別に分類しました。睡眠状態は次のいずれかに分類されました。

  • 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;

周期性パターンのあるカテゴリカルに評価された時系列データの解析では、各カテゴリに数値を割り当てる方法が最も簡単です。幼児の睡眠状態に値を割り当てる方法として有意義なものは少なくとも 2 つあります。1 つ目は 6 つの状態に 1 ~ 6 の順序を付けられるということです。この割り当ては、最も活発でない状態から最も活発な状態という基準に添って行われるので理にかなっています。

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 object. The axes object with xlabel Minutes, ylabel Sleep State contains an object of type line.

最も静かな状態 (1 および 2) と最も活発な状態 (4 および 5) の間の遷移に注目すると、データは周期的動作を示します。その動作の循環を測定するにはスペクトル解析を使用します。睡眠状態が 1 分間隔で割り当てられていることを思い出してください。1 分間隔でデータをサンプリングすることは 1 時間ごとに 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 object. The axes object with title Periodogram of Sleep States, xlabel Cycles/Hour contains an object of type line.

スペクトル解析は主要な振動、つまりデータのサイクルを示す明確なピークを示します。ピークの周波数を決定します。

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

幼児の睡眠状態は約 1.25 サイクル/時の周波数で周期的動作を示します。

睡眠状態に 1 ~ 6 の値を割り当てるのではなく、静睡眠と動睡眠の違いにのみ焦点を合わせて解析を繰り返します。静かな状態の qtqh に値 1 を割り当てます。移行状態 tr に値 2 を割り当てます。最後に動睡眠状態の 2 つ、alah に値 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 object. The axes object with xlabel Minutes, ylabel Sleep State 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 object. The axes object with title Periodogram of Sleep States, xlabel Cycles/Hour contains an object of type line.

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

新しい割り当てをしても結果は変わりませんでした。データは約 1.25 サイクル/時で主要な振動を示します。これらの状態を表す睡眠状態と整数の間のマッピングには一貫性があるため、解析と結果は影響を受けませんでした。このカテゴリカル データのスペクトル解析により、幼児の睡眠状態は、ほぼ 1 時間サイクルで静睡眠と動睡眠が繰り返されるという結論に達します。

参考文献

Stoffer, David S., Mark S. Scher, Gale A. Richardson, Nancy L. Day, and Patricia A. Coble."A Walsh-Fourier Analysis of the Effects of Moderate Maternal Alcohol Consumption on Neonatal Sleep-State Cycling."Journal of the American Statistical Association.Vol. 83, 1988, pp. 954-963.

Stoffer, David S., D. E. Tyler, and D. A. Wendt. "The Spectral Envelope and Its Applications."Statistical Science.Vol. 15, 2000, pp. 224-253.

参考

|