前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R中的概率分布函数及可视化

R中的概率分布函数及可视化

作者头像
SYSU星空
发布2022-05-05 12:46:30
1.6K0
发布2022-05-05 12:46:30
举报

写在前面:

概率分布函数乍一看十分复杂,很容易让学习者陷入困境。对于非数学专业的人来说,并不需要记忆与推导这些公式,但是需要了解不同分布的特点。对此,我们可以在R中调用相应的概率分布函数并进行可视化,可以非常直观的辅助学习。

R中拥有众多的概率函数,既有概率密度函数,也有概率分布函数,可以调用函数,也可以产生随机数,其使用规则如下所示:

代码语言:javascript
复制
[dpqr]distribution_abbreviation()

其中前面字母为函数类型,含义如下:

d=密度函数(density)

p=分布函数(distributionfunction)

q=分位数函数(quantilefunction)

r=生成随机数(随机偏差)

distribution_abbreviation为概率分布名称的缩写,R中的概率分布类型如下所示:

对于概率密度函数和分布函数,其使用方法举例如下:例如正态分布概率密度函数为dnorm(),概率分布函数pnorm(),生成符合正态分布的随机数rnorm()。

代码语言:javascript
复制
x=pretty(c(-3,3),100)
y=dnorm(x)
plot(x, y)

作图结果如下所示:

对于生成随机数,其使用方法举例如下:

代码语言:javascript
复制
rnorm(n, mean=0, sd=1) #产生n个正态分布的数,mena平均值,sd标准差
runif(n, min=0, max=1) #产生n个均匀分布的数,min最小值,max最大值

接下来我们产生符合正态分布的随机数并作图:

代码语言:javascript
复制
library(ggplot2)
y=rnorm(10000, mean=0, sd=1)
x=1:10000
data=data.frame(x=x, y=y)
ggplot(data, aes(x=y)) + 
  geom_histogram(position='identity', alpha=0.5, binwidth=0.1, aes(y=..density..), fill="cyan") +
  stat_density(geom='line', position='identity', color="cyan4")

作图结果如下所示:

可以看到数据分布图像与正态函数图像基本相同。R也可以产生多维随机变量,例如MASS包中的mvrnorm()函数可以产生一维或者多维正态分布的随机变量,其使用方法如下所示:

代码语言:javascript
复制
mvrnorm(n=1, mu, Sigma...)

其中n为随机数的个数,mu为数值向量,给出均值,Sigma为对称的数值矩阵给出协方差矩阵。

当有多个随机变量都服从正态分布时,为多元正态性。接下来我们产生相关系数不同(1、0.75、0.25、0)的二维正太随机变量,并绘制其密度图,来观察区别,具体如下:

代码语言:javascript
复制
library(MASS) 
#相关系数1
Sigma1=matrix(c(1, 1, 1, 1), 2, 2) 
X1=mvrnorm(n=1000, c(0, 0), Sigma1) #总共1000个点
K1=kde2d(X1[,1], X1[,2], n=100) #n为估计密度所用点数,不能太大
col.palette=colorRampPalette(c("white","red")) #自定义颜色
filled.contour(K1, color=col.palette)
#相关系数0.75
Sigma2=matrix(c(1, 0.75, 0.75, 1), 2, 2) 
X2=mvrnorm(n=1000, c(0, 0), Sigma2)
K2=kde2d(X2[,1], X2[,2], n=100)
filled.contour(K2, color=col.palette)
#相关系数0.25
Sigma3=matrix(c(1, 0.25, 0.25, 1), 2, 2) 
X3=mvrnorm(n=1000, c(0, 0), Sigma3)
K3=kde2d(X3[,1], X3[,2], n=100)
filled.contour(K3, color=col.palette)
#相关系数0
Sigma4=matrix(c(1, 0, 0, 1), 2, 2) 
X4=mvrnorm(n=1000, c(0, 0), Sigma4)
K4=kde2d(X4[,1], X4[,2], n=100)
filled.contour(K4, color=col.palette)

作图结果如下所示:

上面程序中kde2d()函数根据二维坐标来估计数据点的分布密度,并画出等密度线(可以使用contour(K4, lwd=1,add=T, xlim, ylim...)函数添加边界线并标注数据比例),然后自定义颜色并并填充进去形成图像,实际上展示了三维信息。但是我们仍可以用persp()函数来展示出3D图:

代码语言:javascript
复制
persp(K1, col="orange", theta=95, phi=30, d=2)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微生态与微进化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档