Main Content

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

trenddecomp

データのトレンドを検出

R2021b 以降

    説明

    LT = trenddecomp(A) では、特異スペクトル解析 (SSA) を使用してデータのベクトルのトレンドを検出します。この解析では、A = LT+ST+R となるようにデータの加法分解が仮定されます。この分解では、LT はデータの長期トレンドであり、ST は単一または複数の季節的 (周期的) トレンドであり、R は余りです。LT は、A と同じ長さのベクトルです。

    SSA は、季節的トレンドの期間が不明である場合に役立つアルゴリズムです。SSA アルゴリズムは、入力データが等間隔であることを前提としています。

    また、LT = trenddecomp(A,"ssa",lag) では SSA アルゴリズムを使用して A のトレンドを検出し、追加でラグ値も指定します。[1] で説明されているように、ラグ値により、特異値分解が計算される行列のサイズが判別されます。通常、lag の値が大きいほど、トレンドの分離が増えます。

    lag の値は、区間 [3,N/2] 内のスカラーでなければなりません。ここで、N は A の長さです。季節的トレンドの期間がわかっている場合は、lag にその期間の倍数を指定します。

    LT = trenddecomp(___,NumSeasonal=n) では、前述の構文の任意の入力引数の組み合わせを使用して、返す季節的トレンドの数を指定します。

    LT = trenddecomp(A,"stl",period) では、Loess (STL) を使用した季節的トレンド分解を使用して A のトレンドを検出します。[2]で説明されているように、これは、局所加重回帰に基づいた加法分解です。STL では、季節的トレンドの期間が必要です。データに季節的トレンドが 1 つだけある場合は、period にスカラー値を指定します。季節的トレンドが複数ある場合は、各要素が各季節的トレンドの期間であるベクトルを period に指定します。

    STL アルゴリズムは、入力データが等間隔であることを前提としています。

    また、[LT,ST,R] = trenddecomp(___) では、季節的トレンドおよび分解の余りも返します。ST および R の長さは、入力ベクトル A の長さに一致します。A に複数の季節的トレンドが含まれている場合、ST は、各列に各季節的トレンドが含まれた行列です。

    D = trenddecomp(T) では SSA を使用してデータの table または timetable のトレンドを検出します。trenddecomp は、各 table 変数を個別に処理します。D は、変数ごとに長期的トレンド、季節的トレンド、および余りが含まれた変数をもつ table または timetable です。trenddecomp は、D で 1 つの変数として複数の季節的トレンドを返します。各列には各季節的トレンドが含まれています。

    D = trenddecomp(T,"ssa",lag) では、table または timetable 入力の SSA ラグ値を指定し、そのラグをすべての table 変数に適用します。

    D = trenddecomp(T,___,NumSeasonal=n) は、table または timetable データで SSA を使用する際の季節的トレンドの数を指定し、その数を各 table 変数に適用します。

    D = trenddecomp(T,"stl",period) では、指定した季節的トレンド期間で STL を使用してトレンドを検出します。trenddecomp は期間を各 table 変数に適用します。

    すべて折りたたむ

    特異スペクトル解析を使用してデータのベクトルの長期的トレンドを計算します。

    長期的トレンド、季節的トレンド、ノイズ コンポーネントが含まれたデータ A のベクトルを作成します。

    t = (0:20)';
    A = 3*sin(t) + t + 0.1*rand(21,1);

    長期的トレンドを計算します。データと長期的トレンドをプロットします。

    LT = trenddecomp(A);
    plot(t,A,t,LT)
    legend("Data","Long-term")

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

    特異スペクトル解析を使用してデータのベクトルを長期的トレンド、2 つの季節的トレンド、および余りに分解します。

    長期的トレンド、異なる期間の 2 つの季節的トレンド、ノイズ コンポーネントが含まれたデータ A のベクトルを作成します。

    t = (1:200)';
    trend = 0.001*(t-100).^2;
    period1 = 20;
    period2 = 30;
    seasonal1 = 2*sin(2*pi*t/period1);
    seasonal2 = 0.75*sin(2*pi*t/period2);
    noise = 2*(rand(200,1) - 0.5);
    A = trend + seasonal1 + seasonal2 + noise;

    SSA アルゴリズムを使用してデータを分解します。データ、トレンド、および余りをプロットします。

    [LT,ST,R] = trenddecomp(A);
    plot([A LT ST R]);
    legend("Data","Long-term","Seasonal1","Seasonal2","Remainder")

    Figure contains an axes object. The axes object contains 5 objects of type line. These objects represent Data, Long-term, Seasonal1, Seasonal2, Remainder.

    STL アルゴリズムを使用して表形式データを長期的トレンド、2 つの季節的トレンド、および余りに分解します。

    長期的トレンド、異なる期間の 2 つの季節的トレンド、およびノイズ コンポーネントが含まれた変数 data をもつ table T を作成します。

    t = (1:200)';
    trend = 0.001*(t-100).^2;
    period1 = 20;
    period2 = 30;
    seasonal1 = 2*sin(2*pi*t/period1);
    seasonal2 = 0.75*sin(2*pi*t/period2);
    noise = 2*(rand(200,1) - 0.5);
    data = trend + seasonal1 + seasonal2 + noise;
    T = table(data)
    T=200×1 table
         data 
        ______
    
        11.204
        11.896
        10.722
        12.502
        11.939
        10.646
         10.57
        10.479
        10.527
        9.6793
        7.1756
        7.9505
        7.1704
        5.6206
        5.8256
        4.2817
          ⋮
    
    

    STL アルゴリズムを使用してデータを分解します。データ、トレンド、および余りをプロットします。

    D = trenddecomp(T,"stl",[20 30]);
    D = addvars(D,data);
    stackedplot(D)
    xlabel("t")

    Figure contains an object of type stackedplot.

    入力引数

    すべて折りたたむ

    入力配列。数値ベクトルとして指定します。

    データ型: single | double

    SSA のラグ値。区間 [3,N/2] 内の数値スカラーとして指定します。ここで、N は入力データの長さです。通常、lag の値が大きいほど、トレンドの分離が増えます。期間がわかっている場合は、lag にその期間の倍数を指定します。

    SSA の季節的トレンドの数。0 より大きい整数スカラーとして指定します。

    STL の期間。数値スカラー、数値ベクトル、duration スカラー、または duration ベクトルとして指定します。データに季節的トレンドが 1 つある場合は、period にスカラーを指定します。データに季節的トレンドが複数ある場合は、各要素が各季節的トレンドの期間であるベクトルとして period を指定します。period に指定できるのは、timetable 入力データの duration 型のみです。

    表形式の入力データ。table または timetable として指定します。trenddecomp は各 table 変数を個別に処理します。timetable は等間隔でなければなりません。

    出力引数

    すべて折りたたむ

    長期的トレンド。入力ベクトルと同じ長さのベクトルとして返されます。

    季節的トレンド。ベクトルまたは行列として返されます。ST は、データに季節的トレンドが 1 つある場合はベクトルであり、データに複数の季節的トレンドがある場合は行列になります。各列は 1 つの季節的トレンドに対応します。ST の行数は、入力ベクトルの長さと一致していなければなりません。

    余り。入力ベクトルと同じ長さのベクトルとして返されます。

    トレンド。入力データが table または timetable の場合に table または timetable として返されます。D には、個別の table 変数として長期的トレンド、季節的トレンド、および分解の余りが格納されます。季節的トレンドが複数ある場合は、結果の変数 D の列数は季節的トレンドの数に一致します。

    ヒント

    • 加法分解モデルは、季節変動が時系列をとおして比較的一定であるデータに適しています。季節変動が時系列のレベルに比例している場合に加法分解モデルを使用するには、分解前にデータに対して対数変換を使用します。

    参照

    [1] Golyandina, Nina, and Anatoly Zhigljavsky. Singular Spectrum Analysis for Time Series. SpringerBriefs in Statistics. Berlin, Heidelberg: Springer Berlin Heidelberg, 2013. https://doi.org/10.1007/978-3-642-34913-3.

    [2] Cleveland, R.B., W.S. Cleveland, J.E. McRae, and I. Terpenning. “STL: A Seasonal-Trend Decomposition Procedure Based on Loess.” Journal of Official Statistics 6 (1990): 3–73.

    バージョン履歴

    R2021b で導入

    参考

    関数

    ライブ エディター タスク