Создайте связанный экспоненциальный столбец в R

Как я могу создать столбец экспоненциального процента во фрейме данных между 2022 и 2040 годами, который ограничен диапазоном 1% и x%, где я могу установить «пик» экспоненциального уравнения?

В приведенной ниже таблице ожидаемых результатов процентный показатель начинает увеличиваться на 1%, затем на 2%... затем «достигает пика» при темпе роста 5% между 25%-35%, затем снова снижается до 2-3% темпа роста .

Вот пример того, что я хотел бы сделать:

Пример результата

end_growth_rate <- 48

2022    1%
2023    2%
2024    3%
2025    4%
2026    6%
2027    8%
2028    10%
2029    12%
2030    15%
2031    18%
2032    21%
2033    25%
2034    30%
2035    35%
2036    39%
2037    42%
2038    44%
2039    46%
2040    48%

Большое спасибо за любую помощь! Очень признателен! Рад объяснить больше, если требуется какое-либо разъяснение.


person SharpSharpLes    schedule 11.08.2019    source источник


Ответы (1)


Тот факт, что вы помещаете что-то в data.table или data.frame, кажется несущественным. То, о чем вы просите, - это просто функция начала, конца и типа кривой. Это может быть сигмовидная функция (она же "логистическая функция").

Попробуй это:

mysigmoid <- function(n, min, max, maxe = 4, mine = -maxe) {
  y <- 1 / (1 + exp(-seq(mine, maxe, len = max(0, n))))
  min + (max - min) * (y - y[1]) / (y[n] - y[1])
}

Вам нужно будет поиграть с двумя экспоненциальными конечными точками (maxe и mine, они соответствуют левым/правым значениям x, используемым в экспоненциальном уравнении в сигмовидной ссылке выше), чтобы получить идеальный спред. Используя «от -3 до 2», я могу получить «начиная с 1%, заканчивая 1,9%», что кажется близким к вашему заявленному намерению.

round(mysigmoid(19, 1, 49, 2, -3), 1)
#  [1]  1.0  1.8  2.9  4.2  5.8  7.9 10.3 13.1 16.4 20.0 23.9 27.9 31.8 35.6 39.1
# [16] 42.2 44.9 47.1 49.0
round(diff(mysigmoid(19, 1, 49, 2, -3)), 1)
#  [1] 0.8 1.0 1.3 1.6 2.0 2.4 2.9 3.3 3.6 3.9 4.0 4.0 3.8 3.5 3.1 2.7 2.3 1.9

(А затем просто назначьте их фрейму или столбцу таблицы по вашему выбору.)

person r2evans    schedule 11.08.2019
comment
Благодарю вас! Да, я изменил заголовок, чтобы избавиться от примечания к фрейму данных. Я был слишком в сорняках о моей собственной цели. Очень признателен! - person SharpSharpLes; 12.08.2019