R语言中进行随机变量运算以及产生混合分布的convdistr包

可用函数

1.metadata(x) :Print the metadata for the distribution
2.summary(object, n=10000, seed=): Produce a summary of the distribution
3.rfunc(x, n) : Generate n random drawns of the distribution
4.plot(x, n= 10000) Produce a density plot of the distribution
5.ggDISTRIBUTION(x, n= 10000) : produce a density plot of the distribution using ggplot2
6. new_MIXTURE(listdistr, mixture) :用于生成混合分布,listdistr是一个包含DISTRIBUTION对象的list,mixture是一个求和等于1的概率向量。
7. 当分布维度不同时,new_CONVOLUTION_assoc 类的函数对维度名相同的随机变量进行运算,对于不相同的维度名称的不做处理。new_CONVOLUTION_comb 类的函数将对全部维度进行运算。

计算法则

在相同维度情形下,DISTRIBUTION 对象之间的+,-,*,/和new_CONVOLUTION(listdistr, op, omit_NA = FALSE) 函数的作用是相同的。参数listdistr 是一个包含 DISTRIBUTION 对象的list, 下面是一个简写:

new_SUM(listdistr, omit_NA = FALSE)
new_SUBTRACTION(listdistr, omit_NA = FALSE)
new_MULTIPLICATION(listdistr, omit_NA = FALSE)
new_DIVISION(listdistr, omit_NA = FALSE)

DISTRIBUTION 类可以产生的分布类别

在这里插入图片描述

实例1:进行随机变量之间的运算

library(convdistr)
library(ggplot2)

a <- new_NORMAL(1,0.5)
b <- new_POISSON(5)
c <- new_BETA(10,20)
res <- a + b * c

metadata(res) 
#>   distribution     rvar
#> 1  CONVOLUTION 2.666667
summary(res,seed=10)

在这里插入图片描述

rvar:表示随机变量
seed:是随机数种子,用在summary函数中
oval:一个观测值
nsample:样本量
mean_:样本均值
sd_:样本标准差
lci_:置信区间下限
uci_:置信区间上限
median_:样本中位数

绘制频率直方图

ggDISTRIBUTION(res) + ggtitle("a + b * c")

在这里插入图片描述

实例2:根据特定概率生成混合分布

new_MIXTURE(listdistr, mixture) :用于生成混合分布,listdistr是一个包含DISTRIBUTION对象的list,mixture是一个求和等于1的概率向量。

d1 <- new_NORMAL(1,0.5)
d2 <- new_NORMAL(5,0.5)
d3 <- new_NORMAL(10,0.5)
dmix <- new_MIXTURE(list(d1,d2,d3),c(0.1,0.3,0.6))
summary(dmix)
# distribution varname oval nsample    mean_      sd_      lci_  median_
#       MIXTURE    rvar  7.6   10000 7.628108 3.151658 0.6508413 9.518044
# uci_
#  10.85935
ggDISTRIBUTION(dmix)

在这里插入图片描述

实例3:不同维度分布之间的卷积

当分布维度不同时,new_CONVOLUTION_assoc 类的函数对维度名相同的随机变量进行运算,对于不相同的维度名称的不做处理。new_CONVOLUTION_comb 类的函数将对全部维度进行运算。

d1 <- new_MULTINORMAL(c(0,1), matrix(c(1,0.3,0.3,1), ncol = 2), p_dimnames = c("A","B"))
d2 <- new_MULTINORMAL(c(3,4), matrix(c(1,0.3,0.3,1), ncol = 2), p_dimnames = c("B","C"))
summary(d1)
# distribution varname oval nsample        mean_       sd_       lci_
# 1  MULTINORMAL       A    0   10000 -0.004687038 1.0041911 -1.9912210
# 2  MULTINORMAL       B    1   10000  0.987839693 0.9965871 -0.9751067
# median_     uci_
# 1 -0.01103639 1.982753
# 2  0.98429613 2.964196
summary(d2)
# distribution varname oval nsample    mean_       sd_     lci_  median_
# 1  MULTINORMAL       B    3   10000 2.987187 1.0086273 1.018242 2.988143
# 2  MULTINORMAL       C    4   10000 3.996152 0.9989062 2.035634 3.999738
# uci_
# 1 4.959087
# 2 5.939658
summary(new_SUM_assoc(d1,d2))
# distribution varname oval nsample      mean_       sd_      lci_
# 1  CONVOLUTION       A    0   10000 0.00180548 1.0077482 -1.993924
# 2  CONVOLUTION       C    4   10000 3.99394719 0.9930702  2.071947
# 3  CONVOLUTION       B    4   10000 4.00697911 1.4107317  1.247139
# median_     uci_
# 1 0.01675671 1.975938
# 2 3.98663174 5.986217
# 3 3.98810120 6.753516
summary(new_SUM_comb(d1,d2))
# distribution varname oval nsample    mean_      sd_      lci_  median_
# 1  CONVOLUTION     A_B    3   10000 2.991535 1.422924 0.2134336 2.975806
# 2  CONVOLUTION     B_B    4   10000 3.984091 1.433978 1.1705028 3.975180
# 3  CONVOLUTION     A_C    4   10000 3.995982 1.436783 1.1971936 3.994802
# 4  CONVOLUTION     B_C    5   10000 4.988538 1.439607 2.1692893 4.982948
# uci_
# 1 5.807620
# 2 6.801032
# 3 6.798537
# 4 7.832810
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值