Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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)");

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.

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)");

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.

Consulte también

Tareas de Live Editor

Funciones