0
$\begingroup$

I have the dividends data of a company from 1987 to 2021. Using this data, I want to predict the future dividend dates for the next 5 years. Also, I want to predict the future dividend amounts this company is expected to distribute on these dates.

dividends_dt <- structure(list(ex_date = c("2021-08-06", "2021-05-07", "2021-02-05", 
"2020-11-06", "2020-08-07", "2020-05-08", "2020-02-07", "2019-11-07", 
"2019-08-09", "2019-05-10", "2019-02-08", "2018-11-08", "2018-08-10", 
"2018-05-11", "2018-02-09", "2017-11-10", "2017-08-10", "2017-05-11", 
"2017-02-09", "2016-11-03", "2016-08-04", "2016-05-05", "2016-02-04", 
"2015-11-05", "2015-08-06", "2015-05-07", "2015-02-05", "2014-11-06", 
"2014-08-07", "2014-05-08", "2014-02-06", "2013-11-06", "2013-08-08", 
"2013-05-09", "2013-02-07", "2012-11-07", "2012-08-09", "1995-11-21", 
"1995-08-16", "1995-05-26", "1995-02-13", "1994-11-18", "1994-08-15", 
"1994-05-27", "1994-02-07", "1993-11-19", "1993-08-16", "1993-05-28", 
"1993-02-12", "1992-11-30", "1992-08-17", "1992-06-01", "1992-02-14", 
"1991-11-18", "1991-08-19", "1991-05-20", "1991-02-15", "1990-11-16", 
"1990-08-20", "1990-05-21", "1990-02-16", "1989-11-17", "1989-08-21", 
"1989-05-22", "1989-02-17", "1988-11-21", "1988-08-15", "1988-05-16", 
"1988-02-12", "1987-11-17", "1987-08-10", "1987-05-11"), frequency = c(4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4), cash_amount = c(0.22, 0.22, 0.205, 0.205, 
0.205, 0.205, 0.1925, 0.1925, 0.1925, 0.1925, 0.1825, 0.1825, 
0.1825, 0.1825, 0.1575, 0.1575, 0.1575, 0.1575, 0.1425, 0.1425, 
0.1425, 0.1425, 0.13, 0.13, 0.13, 0.13, 0.1175, 0.1175, 0.1175, 
0.1175, 0.1089285714, 0.1089285714, 0.1089285714, 0.1089285714, 
0.0946428571, 0.0946428571, 0.0946428571, 0.0010714286, 0.0010714286, 
0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 
0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 
0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 
0.0010714286, 0.0010714286, 0.0010714286, 0.0010714286, 0.0009821429, 
0.0009821429, 0.0009821429, 0.0009821429, 0.0008928572, 0.0008928572, 
0.0008928572, 0.0008928572, 0.0007142857, 0.0007142857, 0.0007142857, 
0.0007142857, 0.0005357143, 0.0005357143)), row.names = c(NA, 
-72L), class = c("data.table", "data.frame"))

       ex_date frequency  cash_amount
 1: 2021-08-06         4 0.2200000000
 2: 2021-05-07         4 0.2200000000
 3: 2021-02-05         4 0.2050000000
 4: 2020-11-06         4 0.2050000000
 5: 2020-08-07         4 0.2050000000
 6: 2020-05-08         4 0.2050000000
 7: 2020-02-07         4 0.1925000000
 8: 2019-11-07         4 0.1925000000
...
...

I have used the regression below to predict the dividend dates/ amounts based on the trend line, but am getting the wrong results.

Here is what I have tried

library(data.table)
dividends_dt[, year := year(ex_date)]
dividend_summary = dividends_dt[, .(div_per_year = sum(cash_amount, na.rm = T)), by = .(year)]
setorder(dividend_summary, div_per_year)
dividend_summary[, div_growth_rate := 100 * (div_per_year - shift(div_per_year, type = "lag"))/ shift(div_per_year, type = "lag")]
> dividend_summary

    year div_per_year div_growth_rate
 1: 1987  0.001785714              NA
 2: 1988  0.003035714       69.999999
 3: 1989  0.003660714       20.588242
 4: 1990  0.004017857        9.756095
 5: 1995  0.004285714        6.666665
 6: 1994  0.004285714        0.000000
 7: 1993  0.004285714        0.000000
 8: 1992  0.004285714        0.000000
 9: 1991  0.004285714        0.000000
10: 2012  0.189285714     4316.666547
11: 2013  0.421428571      122.641509
12: 2014  0.461428571        9.491525
13: 2015  0.507500000        9.984520
14: 2016  0.557500000        9.852217
15: 2017  0.615000000       10.313901
16: 2021  0.645000000        4.878049
17: 2018  0.705000000        9.302326
18: 2019  0.760000000        7.801418
19: 2020  0.807500000        6.250000

lm.fit = glm(data = dividend_summary, formula = div_growth_rate ~ year)

# Creating a new data table with future years to predict their dividends
new.dt <- data.table(year=c(2022, 2023, 2024, 2025, 2026))
> predict(lm.fit, new.dt)

       1        2        3        4        5 
419.4077 429.2242 439.0408 448.8573 458.6739 

As you can see, the result is not consistent with the past trend.

Also, I could not figure out any way to predict the future dates when the dividend will be distributed.

I will appreciate it if someone can provide pointers to solve this problem.

Thanks!

$\endgroup$
0

Browse other questions tagged or ask your own question.