пакет distr: ошибка операции умножения двух случайных величин - PullRequest
0 голосов
/ 24 декабря 2018

Я работал над крупной финансовой моделью и пытаюсь смоделировать неопределенности в данных.Чтобы сделать это, я моделировал свои переменные как нормальные распределения (я знаю, мне, вероятно, следовало бы использовать Вейбулла или что-то в этом роде, но на данный момент это просто самое легкое, учитывая мои временные ограничения.

Я нашелпакет 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

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 27 декабря 2018

Я обнаружил, что, удалив два изменения опций из процедуры и вернув их к значениям по умолчанию, это запустилось без проблем.Я не знаю, почему произошла первоначальная ошибка, которая побудила меня изменить их, но теперь эта проблема решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...