Я работал над крупной финансовой моделью и пытаюсь смоделировать неопределенности в данных.Чтобы сделать это, я моделировал свои переменные как нормальные распределения (я знаю, мне, вероятно, следовало бы использовать Вейбулла или что-то в этом роде, но на данный момент это просто самое легкое, учитывая мои временные ограничения.
Я нашелпакет distr
, и это прекрасная реализация математики для статистических объектов, но я не могу понять, как заставить умножение работать, учитывая, что я работаю с финансовыми объектами, которые находятся в миллионах долларов.Я думаю, что я перегружаю некоторые функции в пакете, так как они предназначены для работы с данными типа X ~ [0,1]
, а не X_mean = 70000, X_sd = 250
, которые представляют финансовую неопределенность.
Вот код:
```{r one more thing}
library(distr)
library(tidyverse)
distroptions("DefaultNrFFTGridPointsExponent" = 50)
distroptions("DefaultNrGridPoints" = 2^50)
Containers <- Norm(mean=71000, sd=250)
# Containers is how many containers we own in the wild
Container_Unit_Cap_Cost <- Norm(mean=85,sd=2)
# Container_Unit_Cap_Cost is the unit cost to acquire new containers
Container_Total_Cap_Cost <- Containers * Container_Unit_Cap_Cost
# Container_Total_Cap_Cost is product distribution of the two previous uncertain variables
xlim_min <- Container_Total_Cap_Cost@gaps[1,2]
xlim_max <- Container_Total_Cap_Cost@gaps[2,2]
ggplot(tibble(x = c(xlim_min, xlim_max)), aes(x)) +
stat_function(fun = conv@d, n = 101) +
scale_y_continuous() +
theme_dark()
```
Это привело к ошибке
Grid for approxfun too wide, increase DefaultNrFFTGridPointsExponentError in seq.default(from = lower, to = upper, by = h) : 'by' argument is much too small
со следующей трассировкой от RStudio
14. stop("'by' argument is much too small")
13. seq.default(from = lower, to = upper, by = h)
12. seq(from = lower, to = upper, by = h)
11. .discretizeP(e1, lower, upper, h)
10. e10 + e20
9. e10 + e20
8. .class1(object)
7. as(e10 + e20, "UnivarLebDecDistribution")
6. log(e1DC$pos$D) + log(e2DC$pos$D)
5. log(e1DC$pos$D) + log(e2DC$pos$D)
4. .class1(object)
3. as(exp(log(e1DC$pos$D) + log(e2DC$pos$D)), "UnivarLebDecDistribution")
2. Containers * Container_Unit_Cap_Cost
1. Containers * Container_Unit_Cap_Cost
Я перебрал опции для distr
, но могуКажется, я не нашел способ заставить его повторяться с большим интервалом для h. Я увеличил DefaultNrFFTGridPointsExponentError
У кого-нибудь есть идеи?