R语言蒙特卡洛计算和快速傅立叶变换计算矩生成函数

简介: R语言蒙特卡洛计算和快速傅立叶变换计算矩生成函数

概率论中,矩生成数(Moment-generating Function)和特征函数(Characteristic Function)是定义 概率分布函数的另种形式。

特征函数能够唯一确定随机变量的概率分布,如果随机变量的概率密度函数$f(x)$存在,特征函数相当于 $f(x)$的傅里叶变换。

如果随机变量分布的矩母函数存在,那么矩母函数和特征函数之间存在关系


  • 蒙特卡洛计算

可以使用蒙特卡洛模拟来计算矩生成函数函数,



> F=function(x) ifelse(x<0,0,1-exp(-x)/3)
> Finv=function(u) uniroot(function(x) F(x)-u,c(-1e-9,1e4))$root



> Finv=function(u) ifelse(3*u>1,0,uniroot(function(x)
+ F(x)-u,c(-1e-9,1e4))$root))

> plot(u,v,type="b",col='blue')
> lines(u,Mtheo(u),col="red")

 可以计算


> M(3)
[1] 5748134

有限总和始终可以通过数字计算。就算在这里  不存在。就像Cauhy样本的平均值一样,即使期望值不存在,我也总是可以计算出来



> mean(rcauchy(1000000))
[1] 0.006069028

这些生成函数在存在时会很有趣。也许使用特征函数是一个更好的主意。



  • 特征函数

当我们处理独立随机变量的总和时,特征函数很有趣,因为总和的特征函数是特征函数的乘积。考虑计算Gamma随机变量复合和的99.5%分位数的问题,即

策略是分散损失金额,

然后,要计算的代码 , 我们用

99.5%分位数


> sum(cumsum(f)<.995)

考虑以下损失金额




> print(X[1:5])
[1] 75.51818 118.16428 14.57067 13.97953 43.60686

让我们拟合一个伽玛分布。我们可以用



shape         rate
1.309020256   0.013090411
(0.117430137) (0.001419982)
 


> alpha
[1] 1.308995
> beta
[1] 0.01309016

无论如何,我们都有个人损失的Gamma分布参数。并假设泊松计数变量的均值为


> lambda <- 100

同样,可以使用蒙特卡洛模拟。我们可以使用以下通用代码:首先,我们需要函数来生成两种感兴趣的变量,

如果我们生成一百万个变量,我们可以得到分位数的估算,



> set.seed(1)
> quantile(rcpd4(1e6),.995)
99.5%
13651.64

另一个想法是记住Gamma分布的比例:独立Gamma分布的总和仍然是Gamma(在参数上有附加假设,但在此我们考虑相同的Gamma分布)。因此,可以计算复合和的累积分布函数,

如果我们求解那个函数,我们得到分位数



> uniroot()$root
[1] 13654.43

这与我们的蒙特卡洛计算一致。现在,我们也可以在此处使用快速傅立叶变换,

> sum(cumsum(f)<.995)
[1] 13654

让我们比较获得这三个输出的计算时间




> system.time
user      system     elapsed
2.453       0.106       2.611
> system.time
user      system     elapsed
0.041       0.012       0.361
> system.time
user      system     elapsed
0.527       0.020       0.560
相关文章
|
7月前
|
数据可视化 算法
R语言近似贝叶斯计算MCMC(ABC-MCMC)轨迹图和边缘图可视化
R语言近似贝叶斯计算MCMC(ABC-MCMC)轨迹图和边缘图可视化
|
4月前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
55 3
|
7月前
|
机器学习/深度学习
数据分享|R语言广义线性模型GLM:线性最小二乘、对数变换、泊松、二项式逻辑回归分析冰淇淋销售时间序列数据和模拟-1
数据分享|R语言广义线性模型GLM:线性最小二乘、对数变换、泊松、二项式逻辑回归分析冰淇淋销售时间序列数据和模拟
|
4月前
|
数据可视化 数据挖掘 数据处理
R语言函数与自定义函数:提高代码的复用性
【8月更文挑战第27天】 自定义函数是R语言编程中不可或缺的一部分,它们通过封装复杂的逻辑和提供灵活的参数化设计,极大地提高了代码的复用性和可维护性。通过掌握自定义函数的基本语法和高级技巧,我们可以编写出更加高效、可读的R语言代码,从而更好地应对复杂的数据分析和统计建模任务。
|
7月前
|
算法 项目管理
R语言实现蒙特卡洛模拟算法
R语言实现蒙特卡洛模拟算法
|
7月前
|
机器学习/深度学习 人工智能 算法
数据分享|R语言广义线性模型GLM:线性最小二乘、对数变换、泊松、二项式逻辑回归分析冰淇淋销售时间序列数据和模拟-2
数据分享|R语言广义线性模型GLM:线性最小二乘、对数变换、泊松、二项式逻辑回归分析冰淇淋销售时间序列数据和模拟
|
7月前
|
算法 数据可视化 Windows
R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样(2)
R语言BUGS/JAGS贝叶斯分析: 马尔科夫链蒙特卡洛方法(MCMC)采样(2)
|
7月前
|
算法 数据可视化 Python
【视频】逆变换抽样将数据标准化和R语言结构化转换:BOX-COX、凸规则变换方法
【视频】逆变换抽样将数据标准化和R语言结构化转换:BOX-COX、凸规则变换方法
|
7月前
|
数据挖掘
R 语言中的模拟和蒙特卡洛方法
【4月更文挑战第25天】本文探讨了R语言中的模拟和蒙特卡洛方法,包括基本原理、应用场景及实际案例。通过随机数生成函数如`runif()`、`rnorm()`,R语言支持构建复杂模拟场景,应用于数值积分、风险评估和统计推断。案例分析展示了股票价格模拟和项目风险评估。掌握这些方法能提升数据分析能力,解决复杂问题,为决策提供支持。
120 1