Как рассчитать темпы роста (горизонт 1 и 3 года) по панельным данным в R

У меня есть панельный набор данных нескольких банков, каждый с 1997 по 2015 год, с ежегодными наблюдениями:

CODE      COUNTRY      YEAR      LOANS_NET      ...other variables
671405      AT         1997       39028938
671405      AT         1998       41033237
671405      AT         1999       35735062
...
...
671405      AT         2015      130701872
...
30885R      DE         2004      200024673
...
...

Используя R, мне нужно вычислить еще два столбца:

1) Темп роста LOANS_NET на горизонте 1 год

2) Темп роста LOANS_NET на трехлетнем горизонте, который после расчета должен быть приведен в годовом исчислении.

E.g.:

Loan Growth 3-year = [Bank's(i) LOANS_NET Year(t) / Bank's(i) LOANS_NET Year(t-3)] -1

NB: данные содержат много пропущенных значений, код должен учитывать эту проблему! :)


person Dan    schedule 01.12.2016    source источник


Ответы (1)


@Dan Используете ли вы какие-либо пакеты? Я рекомендую вам использовать пакеты zoo и data.table и преобразовывать даты следующим образом:

DT[, YearNumeric := as.numeric(YEAR)]
DT[, PreviousYearLoanNet := .SD[match(YearNumeric - 1, .SD$YearNumeric), LOANS_NET], by=CODE]

Здесь вы создаете столбец с предыдущими (-1 год) значениями кредита. Затем вы создаете новый столбец с ростом:

DT[,Growth1Y:= (YEARLOANNET- PreviousYearLoanNet)/PreviousYearLoanNet]

А дальше делай что хочешь :) Ура!

person Milosz    schedule 01.12.2016
comment
большое спасибо дружище! Только один вопрос: есть ли у вас какие-либо мысли о том, чтобы сделать ту же цель с помощью пакета plyr? потому что я пытался использовать коды, указанные здесь, но результаты такие разные :С - person Dan; 01.12.2016
comment
Чем именно отличается? У меня нет большого опыта работы с dplyr, но я думаю, вы можете преобразовать его с помощью функции ddply, верно? - person Milosz; 01.12.2016
comment
Я использовал этот сценарий для получения столбца темпов роста за 3 года: data1‹-transform(df, Growth=ave(Value, Category, FUN=function(x) c(NA,exp(diff(log(x),lag = 3) )-1))) но рейты действительно другие, если сравнивать их с теми, которые вышли из вашей процедуры.Полагаю, я ошибся, так как я не уверен, что скрипт выше правильный.. - person Dan; 01.12.2016
comment
Функция, которую вы используете, использует геометрический рост, если я не ошибаюсь, верно? В моей процедуре используется арифметический рост, то есть (t+1/t)/t. Я также рассчитал его для 1 года, а вы рассчитали средний геометрический темп роста за 3 года. - person Milosz; 01.12.2016
comment
Вы чрезвычайно правы, моя вина. Таким образом, я думаю, было бы интересно проанализировать влияние на y (зависимую переменную, которую я собираюсь изучить) как с арифметическими, так и с геометрическими темпами роста, один в качестве контроля, другой. :) Еще раз спасибо - person Dan; 01.12.2016
comment
Пожалуйста! Вы можете пометить мой ответ как решенный :) - person Milosz; 01.12.2016