Создание фиктивных переменных для MATLAB на конец месяца

У меня есть ежедневные значения закрытия индекса, и я хочу создать фиктивные переменные для определенного количества дней до и после последнего дня каждого месяца.

Скажите 4 дня до и 4 дня после. Всего 9 дней. У меня есть данные за 23 года.

Дело в том, что месяцы не имеют одинаковой длины (очевидно), и данные исключают все выходные (что делает неравную длину еще более "неравной").

Как эффективно создать фиктивные переменные для данных без необходимости вручную проходить более 6000 наблюдений и указывать точные даты, которые за 4 дня до и 4 дня после последнего дня месяца?

% ------------------------

Мне удалось создать таблицу с датами и возвратами с 1991 по 2014 год, исключая выходные. Первый столбец года, второго месяца, третьего дня и четвертого результата:

Теперь я хочу создать фиктивные переменные для числа X дней до последнего рабочего дня месяца и числа X дней после последнего дня месяца. Скажи 9 дней. Итак, манекены D-9, D-8... T, D+1, D+2... D+9. T= последний день месяца. Всего 19 манекенов. Остальные дни будут иметь отдельный манекен, ROM. Затем я использую их в качестве регрессоров на доходах.

Моим ожидаемым результатом будут коэффициенты для всех манекенов, которые описывают доходность в каждый выбранный день месяца (19 дней до начала месяца) и остаток месяца (ROM). Это должно выглядеть примерно так:

@Daniel

Полные данные для моих индексов находятся здесь

1 ответ

Решение
%shorter period for demonstration purposes
startday = datenum(2015,1,1);
endday = datenum(2015,3,1);
%just make sure our calendar contains enough data so every interesting day is included
startday=startday-27;
endday=endday+27;
alldays=startday:endday;
alldaysvec=datevec(alldays);
%logical vector which is true for mon-friday. Might be updated to reflect holidays as well
workday=weekday(alldays)<=6&weekday(alldays)>=2;
%create a calendar with only the bussines days in it:
wdays=alldaysvec(workday,:);
%identify days where month is changed
closing_days=find(diff(wdays(:,2))~=0);
%closing days
wdays(closing_days,:)
%days three bussines days after the closing days
wdays(closing_days+3,:)
Другие вопросы по тегам