Создание фиктивных переменных для 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,:)