Error of Index exceeds matrix dimensions. Please help

1 次查看(过去 30 天)
% 2016 2017 2018 2019
y = [3 2 6 6 % Jan
6 1 10 9 % Feb
2 5 4 0 % Mar
1 7 5 3 % Apr
0 1 0 8 % May
0 3 4 1 % Jun
0 5 7 1 % Jul
2 0 4 0 % Aug
3 2 1 6 % Sep
2 5 3 4 % Oct
1 1 1 4 % Nov
3 2 5 2 ]; % Dec
% Source:personal library
yr = repmat((2016:2019),12,1);
mo = repmat((1:12)',1,12);
time = datestr(datenum(yr(2016:2019),mo(1:12),1));
ts = timeseries(y(:),time,'name','Diabetes Diagnosis in Male Individuals');
ts.TimeInfo.Format = 'dd-mmm-yyyy';
tscol = tscollection(ts);
plot(ts)
%Examine Trend and Seasonality
%This series seems to have a strong seasonal component, with a trend that may be linear
%or quadratic. Furthermore, the magnitude of the seasonal variation increases as
%the general level increases. Perhaps a log transformation would make the seasonal
%variation be more constant. First we'll change the axis scale.
h_gca = gca;
h_gca.YScale = 'log';
%It appears that it would be easier to model the seasonal component on the log scale.
%We'll create a new time series with a log transformation.
tscol = addts(tscol,log(ts.data),'logdiabetes complications');
logts = tscol.logAirlinePassengers;
%Now let's plot the yearly averages, with monthly deviations superimposed.
%We want to see if the month-to-month variation within years appears constant.
%For these manipulations treating the data as a matrix in a month-by-year format,
%it's more convenient to operate on the original data matrix.
t = reshape(datenum(time),12,12);
logy = log(y);
ymean = repmat(mean(logy),12,1);
ydiff = logy - ymean;
x = yr + (mo-1)/12;
plot(x,ymean,'b-',x,ymean+ydiff,'r-')
title('Monthly variation within year')
xlabel('Year')
%Now let's reverse the years and months, and try to see if the year-to-year trend
%is constant for each month.
subplot(1,1,1);
X = [dummyvar(mo(:)) logts.time];
[b,bint,resid] = regress(logts.data,X);
tscol = addts(tscol,X*b,'Fit1')
%Time Series Collection Object: unnamed
%Time vector characteristics
% Start date 01-Jan-2016
% End date 01-Dec-2019
%Member Time Series Objects:
% Diabetes diagnosis
% logDiabetes diagnosis
% Fit1
plot(logts)
hold on
plot(tscol.Fit1,'Color','r')
hold off
legend('Data','Fit','location','NW')
%Based on this graph, the fit appears to be good. The differences between the actual
%data and the fitted values may well be small enough for our purposes.
%But let's try to investigate this some more. We would like the residuals to look
%independent. If there is autocorrelation (correlation between adjacent residuals),
%then there may be an opportunity to model that and make our fit better. Let's create
%a time series from the residuals and plot it
tscol = addts(tscol,resid,'Resid1');
plot(tscol.Resid1)

采纳的回答

David Welling
David Welling 2020-4-21
in line 17 ( time = datestr(datenum(yr(2016:2019),mo(1:12),1)); ), You call array yr(2016:2019). the size of the array is however, 12x4. the index of yr in this line is incorrect. it also has only one dimension, not two.
  5 个评论
Walter Roberson
Walter Roberson 2020-4-22
You appear to be adding a timeseries named 'logdiabetes complications' but then trying to access a timeseries named 'logdiabetes'
oluwatayo ogunmiloro
@Walter Roberson. Great one from you! I have actually corrected that and it works. However i encountered another error in line 37. I have altered the datenum(time) from 12, 12 to 12, 4, 4, 12 and so on but it still not working. Thanks for your effiort. I eagerly await your kind answers.
Error in Untitled4 (line 37)
t = reshape(datenum(time),12,12);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Preprocessing 的更多信息

产品


版本

R2014a

Community Treasure Hunt

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

Start Hunting!

Translated by