Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

timetable データからの線形トレンドの除去

この例では、全体的な上昇周辺の価格変動を強調するために、timetable 内の毎日の株価終値から線形トレンドを除去する方法を説明します。データがトレンドをもたない場合、トレンドを除去することで平均値が強制的にゼロになり、全体的な変動が抑えられます。例では、関数 gallery から得た分布を使用して、株価の変動をシミュレートします。

シミュレーションにより、毎日の株価を含む timetable を作成します。

t = 0:300;
D = days(t);
dailyFluct = randn(size(t));
price = cumsum(dailyFluct) + 20 + t/100;
tt = timetable(D',price',VariableNames="StockPrice");

毎日の株価の平均を求めます。

mean(tt.StockPrice)
ans = 28.2260

データをプロットしてラベルを付けます。株価が全体的に上昇していることがわかります。

plot(tt,"Time","StockPrice");
legend("Original Data","Location","northwest");
xlabel("Time (days)");
ylabel("Stock Price (dollars)");

Figure contains an axes object. The axes object with xlabel Time (days), ylabel Stock Price (dollars) contains an object of type line. This object represents Original Data.

detrend を適用すると、株価に対する線形近似が実行され、トレンドが除去されて、トレンド除去後のデータが入力 timetable に追加されます。

tt = detrend(tt,ReplaceValues=false);

入力データからトレンド除去後のデータを差し引くことで、トレンド ラインを計算します。

trend = tt.StockPrice - tt.StockPrice_detrended;
tt = addvars(tt,trend,NewVariableNames="Trend")
tt=301×3 timetable
     Time      StockPrice    StockPrice_detrended    Trend 
    _______    __________    ____________________    ______

    0 days       20.538            -14.588           35.126
    1 day        22.382            -12.698            35.08
    2 days       20.133            -14.901           35.034
    3 days       21.005            -13.983           34.988
    4 days       21.334            -13.608           34.942
    5 days       20.036             -14.86           34.896
    6 days       19.612            -15.238            34.85
    7 days       19.965            -14.839           34.804
    8 days       23.553            -11.204           34.758
    9 days       26.333            -8.3791           34.712
    10 days      24.993            -9.6729           34.666
    11 days      28.038             -6.582            34.62
    12 days      28.773            -5.8006           34.574
    13 days       28.72            -5.8077           34.528
    14 days      29.445            -5.0369           34.482
    15 days       29.25            -5.1859           34.436
      ⋮

トレンド除去済みのデータの平均を求めます。

mean(tt.Trend)
ans = 28.2260

予想どおり、トレンドが除去されたデータの平均は、きわめて 0 に近くなります。

トレンド ライン、トレンド除去済みのデータ、そして平均値をグラフに追加することで結果を表示します。

plot(tt,"StockPrice")
hold on
plot(tt,"Trend")
plot(tt,"StockPrice_detrended")
plot(tt.Time,zeros(size(t)))
legend("Original Data","Trend","Detrended Data",...
       "Mean of Detrended Data","Location","northwest")
xlabel("Time (days)"); 
ylabel("Stock Price (dollars)");

Figure contains an axes object. The axes object with xlabel Time (days), ylabel Stock Price (dollars) contains 4 objects of type line. These objects represent Original Data, Trend, Detrended Data, Mean of Detrended Data.

参考

ライブ エディター タスク

関数