Main Content

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

この例では、timetable 内の毎日の株価終値から線形トレンドを除去する方法を説明します。データにトレンドがある場合、トレンドを除去することで、トレンドが除去されたデータの平均値が強制的にゼロになり、全体的な変動が抑えられます。

株データの作成

毎日の株価終値を含むサンプルの timetable を作成します。正規分布からランダムにサンプリングされた数値を使用します。

x = 0:300;
Time = days(x)';
dailyFluct = gallery("normaldata",size(x),2); 
closing = cumsum(dailyFluct) + 20 + x/100;
StockPrice = closing';
TT = timetable(Time,StockPrice)
TT=301×1 timetable
     Time      StockPrice
    _______    __________

    0 days       21.749  
    1 day        21.892  
    2 days       22.227  
    3 days       21.443  
    4 days       21.768  
    5 days       21.251  
    6 days       22.193  
    7 days       23.368  
    8 days       21.332  
    9 days       20.698  
    10 days      22.449  
    11 days      22.946  
    12 days      24.004  
    13 days      25.503  
    14 days      26.783  
    15 days      24.937  
      ⋮

株価データをプロットしてラベルを付けます。

plot(TT,"Time","StockPrice");
xlabel("Time (days)");
ylabel("Stock Price (dollars)");

トレンドの除去

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       21.749             -3.7893          25.538
    1 day        21.892             -3.7397          25.631
    2 days       22.227             -3.4975          25.724
    3 days       21.443             -4.3742          25.817
    4 days       21.768             -4.1423           25.91
    5 days       21.251             -4.7525          26.003
    6 days       22.193             -3.9033          26.096
    7 days       23.368             -2.8216          26.189
    8 days       21.332             -4.9502          26.282
    9 days       20.698             -5.6776          26.375
    10 days      22.449             -4.0195          26.468
    11 days      22.946             -3.6157          26.561
    12 days      24.004             -2.6498          26.654
    13 days      25.503             -1.2442          26.747
    14 days      26.783           -0.056718           26.84
    15 days      24.937             -1.9958          26.933
      ⋮

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

average_detrended = mean(TT.StockPrice_detrended)
average_detrended = -1.2464e-14

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

トレンドが除去されたデータの可視化

元の毎日の株価終値、トレンド ライン、トレンドが除去されたデータ、およびその平均値をプロットして結果を表示します。

plot(TT,"StockPrice")
hold on
plot(TT,"Trend")
plot(TT,"StockPrice_detrended")
yline(average_detrended)
legend("Input Data","Trend","Detrended Data", ...
    "Mean of Detrended Data","Location","northwest")
xlabel("Time (days)"); 
ylabel("Stock Price (dollars)");

参考

ライブ エディター タスク

関数