Eliminar tendencias lineales de datos en tablas horarias
Este ejemplo muestra cómo eliminar una tendencia lineal de las cotizaciones al cierre diarias de acciones bursátiles recogidas en una tabla horaria para remarcar las fluctuaciones de precios sobre el incremento global. Si los datos tienen una tendencia, eliminar la tendencia fuerza su media a cero y reduce la variación general. En el ejemplo se simulan las fluctuaciones del precio de las acciones utilizando una distribución tomada de la función gallery
.
Cree una tabla horaria simulada que contenga el precio diario de una acción.
t = 0:300;
D = days(t);
dailyFluct = randn(size(t));
price = cumsum(dailyFluct) + 20 + t/100;
tt = timetable(D',price',VariableNames="StockPrice");
Averigüe el precio medio diario de una acción.
mean(tt.StockPrice)
ans = 28.2260
Represente y etiquete los datos. Observe el aumento sistemático de los precios de la acción.
plot(tt,"Time","StockPrice"); legend("Original Data","Location","northwest"); xlabel("Time (days)"); ylabel("Stock Price (dollars)");
Aplique detrend
, que lleva a cabo un ajuste lineal en los precios de la acción, elimina la tendencia y adjunta los datos cuya tendencia se ha eliminado a la tabla horaria de entrada.
tt = detrend(tt,ReplaceValues=false);
Calcule la línea de tendencia restando los datos cuya tendencia se ha eliminado de los datos de entrada.
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
⋮
Encuentre el promedio de los datos cuya tendencia se ha eliminado.
mean(tt.Trend)
ans = 28.2260
Como era de esperar, los datos sin tendencia tienen una media muy cercana a 0.
Muestre los resultados añadiendo la línea de tendencia, los datos sin tendencia y su media en la gráfica.
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)");