Forecasting / Input response series data must be non-empty and a column vector.

조회 수: 10 (최근 30일)
Meryem Ml
Meryem Ml 2021년 2월 8일
편집: Pavl M. 2024년 11월 21일 14:10
Hello i am trying to creat a simple forecasting algo for long terms (foraward 10 yrs based on the data from yrs back ) so my code is below, when i run it, i got this error
Input response series data must be non-empty and a column vector.
Error in Untitled2 (line 18)
EstMdl = estimate(Mdl,data);
Please some help guys.
.
.
.
load data
yrs = evolutiondelademand.VarName1;
demand = evolutiondelademand.VarName2;
A= [yrs,demand];
data = iddata(A,[]);
plot (yrs,demand)
%%figure
plot(yrs,demand)
xlabel('years')
ylabel('demand')
past_data = data.OutputData(1:50);
Mdl = arima(2,0,0);
opt = forecastOptions('InitialCondition','e');
K = 100;
EstMdl = estimate(Mdl,data);
[yF,yMSE] = forecast(EstMdl,60,'Y0',data);
legend('Measured','Forecasted')

답변 (1개)

Pavl M.
Pavl M. 2024년 11월 21일 12:49
편집: Pavl M. 2024년 11월 21일 14:10
%load data
%yrs = evolutiondelademand.VarName1;
%demand = evolutiondelademand.VarName2;
odata = xlsread('TitanX Historical Numbers.xlsx');
Dlength = 88;
ts = 1
ts = 1
time = (0:ts:Dlength-1)' %odata(1:Dlength,1) % Time column (1st column)
time = 88×1
0 1 2 3 4 5 6 7 8 9
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
demand = odata(1:Dlength,2)
demand = 88×1
45499 45500 45501 45502 45503 45504 45505 45506 45507 45508
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
%areTimestampsRegular = isregular(demand)
areTimestampsSorted = issorted(demand)
areTimestampsSorted = logical
1
%w = convert2weekly(odata,Aggregation="mean")
%areTimestampsWRegular = isregular(w,"years")
yrs = double(time)
yrs = 88×1
0 1 2 3 4 5 6 7 8 9
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
A= [yrs,demand];
data = iddata(A,[])
data = Time domain data set with 88 samples. Sample time: 1 seconds Outputs Unit (if specified) y1 y2
figure
plot(yrs,demand)
xlabel('years')
ylabel('demand')
title('InputData')
Npastsamples = 50;
past_data = data.OutputData(1:Npastsamples);
%nMdl0 = nlarx(data, [2 2 1;2 2 1])
Mdl0 = arima(3,2,1)
Mdl0 =
arima with properties: Description: "ARIMA(3,2,1) Model (Gaussian Distribution)" SeriesName: "Y" Distribution: Name = "Gaussian" P: 5 D: 2 Q: 1 Constant: NaN AR: {NaN NaN NaN} at lags [1 2 3] SAR: {} MA: {NaN} at lag [1] SMA: {} Seasonality: 0 Beta: [1×0] Variance: NaN
Mdl = gjr(9,21)
Mdl =
gjr with properties: Description: "GJR(9,21) Conditional Variance Model (Gaussian Distribution)" SeriesName: "Y" Distribution: Name = "Gaussian" P: 9 Q: 21 Constant: NaN GARCH: {NaN NaN NaN NaN NaN NaN NaN NaN NaN} at lags [1 2 3 4 5 6 7 8 9] ARCH: {NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN} at lags [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21] Leverage: {NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN} at lags [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21] Offset: 0
Mdl2 = garch(Constant=0.05,GARCH=0.91,ARCH=0.04) %Stationary Model
Mdl2 =
garch with properties: Description: "GARCH(1,1) Conditional Variance Model (Gaussian Distribution)" SeriesName: "Y" Distribution: Name = "Gaussian" P: 1 Q: 1 Constant: 0.05 GARCH: {0.91} at lag [1] ARCH: {0.04} at lag [1] Offset: 0
opt = forecastOptions('InitialCondition','e');
K = 100;
Nhor = 60; %actual forecasting horizon
rng("default") % For reproducibility
[vS,yS] = simulate(Mdl2,50)
vS = 50×1
0.9716 1.0648 1.2363 1.2118 1.1577 1.1827 1.1351 1.0883 1.5978 1.9941
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
yS = 50×1
1.8076 -2.3309 0.9586 0.3509 -1.4070 -0.4715 0.3650 3.7330 3.5006 -1.9062
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
figure
plot(vS)
figure
plot(yS)
y0 = yS(1);
v0 = vS(1);
y = yS(2:end);
v = vS(2:end);
res = infer(Mdl2,y) % Retrieve inferred residuals
res = 49×1
2.4242 2.4734 2.3375 2.1821 2.1149 1.9834 1.8602 2.3002 2.6334 2.5917
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
figure
plot(res)
foreValues2 = forecast(Mdl2,Npastsamples,'Y0',demand) % forecast
foreValues2 = 50×1
1.0e+08 * 9.2344 8.7727 8.3341 7.9174 7.5215 7.1454 6.7882 6.4488 6.1263 5.8200
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
figure
plot(foreValues2)
data(:,1)'
ans = Time domain data set with 88 samples. Sample time: 1 seconds Outputs Unit (if specified) y1
EstMdl = estimate(Mdl0,demand);
Warning: Lower bound constraints are active; standard errors may be inaccurate.
ARIMA(3,2,1) Model (Gaussian Distribution): Value StandardError TStatistic PValue _____ _____________ __________ _______ Constant 0 0 NaN NaN AR{1} 0 0 NaN NaN AR{2} 0 0 NaN NaN AR{3} 2e-12 0 Inf 0 MA{1} 2e-12 0 Inf 0 Variance 2e-07 2.6752e-07 0.74759 0.45471
[yF,MSEError] = forecast(EstMdl,Nhor,'Y0',demand)
yF = 60×1
45587 45588 45589 45590 45591 45592 45593 45594 45595 45596
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
MSEError = 60×1
1.0e+00 * 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 0.0001
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
tn = [yrs; (yrs(end):1:yrs(end)+Nhor-1)']
tn = 148×1
0 1 2 3 4 5 6 7 8 9
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
figure
plot(tn,[demand; zeros(1,Nhor)'],'b',tn,[zeros(1,Dlength)'; yF],'g')
xlabel('years')
ylabel('demand')
title('Historical in blue and Forecast in green')
figure
plot(tn,[demand; yF])
xlabel('years')
ylabel('demand')
title('Merged Historical and Forecast Data')
%Green curve after input max year Dlength=88 is predicted(forseen,anticipated),
% so the predictions/forecast are correct
% correct )))

카테고리

Help CenterFile Exchange에서 Conditional Mean Models에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by