Отсутствующие значения в VARMAX - PullRequest
1 голос
/ 18 апреля 2020

У меня есть набор данных с посетителями и переменными погоды. Я пытаюсь прогнозировать посетителей на основе погодных переменных. Поскольку набор данных состоит только из посетителей в сезон, отсутствуют значения и пропуски для каждого года. При запуске pro c reg в sas все нормально, но проблема возникает, когда я использую pro c VARMAX. Я не могу запустить регрессию из-за пропущенных значений. Как я могу решить это?

proc varmax data=tivoli4 printall plots=forecast(all);
id obs interval=day;
model lvisitors = rain sunshine averagetemp
dfebruary dmarch dmay djune djuly daugust doctober dnovember ddecember
dwednesday dthursday dfriday dsaturday dsunday
d_24Dec2016 d_05Dec2013 d_24Dec2017 d_24Dec2014 d_24Dec2015 d_24Dec2019 
d_24Dec2018 d_24Sep2012 d_06Jul2015
d_08feb2019 d_16oct2014 d_15oct2019 d_20oct2016 d_15oct2015 d_22sep2017 d_08jul2015
d_20Sep2019 d_08jul2016 d_16oct2013 d_01aug2012 d_18oct2012 d_23dec2012 d_30nov2013 d_20sep2014 d_17oct2012 d_17jun2014
dFrock2012 dFrock2013 dFrock2014 dFrock2015 dFrock2016 dFrock2017 dFrock2018 dFrock2019
dYear2015 dYear2016 dYear2017
/p=7 q=2 Method=ml dftest;
garch p=1 q=1 form=ccc OUTHT=CONDITIONAL;
restrict
ar(3,1,1)=0, ar(4,1,1)=0, ar(5,1,1)=0,
XL(0,1,13)=0, XL(0,1,14)=0, XL(0,1,13)=0, XL(0,1,27)=0, XL(0,1,38)=0, XL(0,1,42)=0;
output lead=10 out=forecast;

run;

1 Ответ

1 голос
/ 20 апреля 2020

Как и в случае любого прогноза, вам сначала необходимо подготовить свой временной ряд. Сначала вы должны просмотреть свои данные через PROC TIMESERIES, чтобы заполнить или отразить пропущенные значения. Наиболее подходящий выбор вменения зависит от ваших переменных. Приведенный ниже код будет:

  • Сумма lvisitors по дням и установить пропущенные значения в 0
  • Установить пропущенные значения averagetemp в среднее значение
  • Установить пропущенные значения rain, sunshine, и ваши переменные, начиная с d до 0 (при условии, что это индикаторы)

Код:

proc timeseries data=have out=want;

    id obs interval   = day
           setmissing = 0
           notsorted
    ;

    var lvisitors / accumulate=total;
    crossvar averagetemp / accumulate=none setmissing=average;
    crossvar rain sunshine d: / accumulate=none;
run;

Важное время Рассмотрение интервала

В зависимости от ваших данных это может повлиять на частоту ошибок и оценки, поскольку вы всегда знаете, что в межсезонье никого не будет. Если у вас много пропущенных значений для данных межсезонья, вы можете удалить эти строки.

Поскольку PRO C VARMAX не поддерживает пользовательские интервалы времени, вы можете вместо этого создать простой идентификатор времени. В качестве альтернативы вы можете преобразовать это в формат для proc format и конвертировать time_id в конце.

data want;
    set have;

    time_id+1;
run;

proc varmax data=want;
    id time_id interval=day;
    ...
    output lead=10 out=myforecast;
run;

data myforecast;
    merge myforecast
          want(keep=time_id date)
    ;

    by time_id;
run;

Или, если вы сделали формат:

data myforecast;
    set myforecast;

    date = put(time_id, timeid.);
    drop time_id;
run;
...