distr包:两个随机变量乘法运算错误

时间:2018-12-24 17:45:24

标签: r statistics distribution

我一直在研究大型财务模型,并且试图对数据中的不确定性进行建模。为此,我一直将变量建模为正态分布(我知道,我可能应该使用Weibull变量之类的方法,但这在目前存在时间矛盾的情况下,这只是最简单的方法。

我已经找到了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 :(得分:0)

我发现,通过清除例程中的两个选项更改并将其设置回默认值,此命令可以正常运行。我不知道为什么会发生促使我更改它们的原始错误,但是现在这个问题已解决。