首页 > 解决方案 > 来自不同包的两个功能不能一起工作

问题描述

所以我正在研究破产概率。我正在通过 R 执行蒙特卡罗模拟。最适合此的包是'ruin'。您只需为不同的废墟模型指定输入。我正在尝试模拟一个 SparreAndersen 模型,其中有两个来自不同分布的随机变量生成器。使用 rgamma 或 rexp 的典型分布(例如指数分布或 gamma 分布)可以正常工作。

我遇到的问题是我需要一个混合指数函数作为 rv 生成器之一。我找到了一个很棒的包来实现这一点,称为“gendist”,我在其中使用 rmixt 函数从混合指数函数生成 rvs。

使用所有参数运行 rmixt 工作正常,给出正确和准确的数字输出。使用所有参数运行 rexp 工作正常,给出正确和准确的数字输出。当使用任何不是 rmixt 函数的函数时,运行 SparreAndersen() 函数可以正常工作。

问题:SparreAndersen 不喜欢使用 'gendist' 包中的 rmixt 作为 rv 生成器

当我尝试运行此功能时,我将其视为错误

我不知道为什么这不起作用???请参阅下面的整个代码:

library(ruin)
library(gendist)

rmixt(1, phi=1, spec1="exp", arg1=list(rate=3), spec2="exp",
      arg2=list(rate=7) )

rexp(1, rate=1)

modelSA <- SparreAndersen(initial_capital = 1,
                          premium_rate = 5,
                          claim_interarrival_generator = rmixt,
                          claim_interarrival_parameters = list(1, phi=1, spec1="exp", arg1=list(rate=3), spec2="exp", arg2=list(rate=7)),
                          claim_size_generator = rexp,
                          claim_size_parameters = list(rate=1))

编辑:我找到了一个可行的解决方案,不涉及“性别歧视”包。让我知道这是否是最好的方法。

我的新工作代码:

# Function which generates multiple exponential
rmixedexp <- function(...) {
  choice <- c(...)
  return(rexp(n=1, sample(choice, 1, replace=TRUE)))
}

modelSA <- SparreAndersen(initial_capital = 5,
                         premium_rate = 5,
                         claim_interarrival_generator = rmixedexp,
                         claim_interarrival_parameters = list(1, 3, 7),
                         claim_size_generator = rexp,
                         claim_size_parameters = list(rate=1))

我必须制作自己的函数,该函数采用任意数量的参数,例如 2。每个参数都是指数的比率,随机选择(概率一半)。

标签: rmathstatistics

解决方案


推荐阅读