R 编程/概率分布
本页回顾了主要的概率分布,并描述了处理它们的 R 函数。
R 拥有许多概率函数。
r
是随机变量生成器的通用前缀,如runif()
、rnorm()
。d
是概率密度函数的通用前缀,如dunif()
、dnorm()
。p
是累积分布函数的通用前缀,例如punif()
、pnorm()
。q
是分位数函数的通用前缀,例如qunif()
、qnorm()
。
离散分布
[edit | edit source]本福特分布
[edit | edit source]本福特分布是数字首位数字的分布。它是由本福特在 1938 年[1]和纽科姆在 1881 年[2]提出的。
> library(VGAM)
> dbenf(c(1:9))
[1] 0.30103000 0.17609126 0.12493874 0.09691001 0.07918125 0.06694679 0.05799195 0.05115252 0.04575749
伯努利
[edit | edit source]我们可以使用以下方法从伯努利分布中抽样:sample(), runif()或rbinom()使用size = 1.
> n <- 1000
> x <- sample(c(0,1), n, replace=T)
> x <- sample(c(0,1), n, replace=T, prob=c(0.3,0.7))
> x <- runif(n) > 0.3
> x <- rbinom(n, size=1, prob=0.2)
二项式
[edit | edit source]我们可以使用 rbinom()
函数从二项式分布中抽样,该函数的参数包括:n
表示要抽取的样本数量,size
定义试验次数,prob
定义每次试验成功的概率。
> x <- rbinom(n=100,size=10,prob=0.5)
超几何分布
[edit | edit source]我们可以使用 rhyper()
函数从超几何分布中抽取 n
次样本。
> x <- rhyper(n=1000, 15, 5, 5)
几何分布
[edit | edit source]几何分布。
> N <- 10000
> x <- rgeom(N, .5)
> x <- rgeom(N, .01)
多项式
[edit | edit source]多项式分布。
> sample(1:6, 100, replace=T, prob= rep(1/6,6))
负二项式分布
[edit | edit source]负二项式分布是伯努利事件序列中在 k 次成功之前失败次数的分布。
> N <- 100000
> x <- rnbinom(N, 10, .25)
泊松分布
[edit | edit source]我们可以使用 lambda
参数设置均值的泊松分布中抽取 n
个值。
> x <- rpois(n=100, lambda=3)
齐夫定律
[edit | edit source]单词频率的分布被称为齐夫定律。它也是城市规模分布的良好描述[3]。dzipf()和pzipf()(VGAM)
> library(VGAM)
> dzipf(x=2, N=1000, s=2)
连续分布
[edit | edit source]Beta 和 Dirichlet 分布
[edit | edit source]- Beta 分布
- gtools 和 MCMCpack 中的 Dirichlet
>library(gtools)
>?rdirichlet
>library(bayesm)
>?rdirichlet
>library(MCMCpack)
>?Dirichlet
柯西
[edit | edit source]我们可以使用 rcauchy()
函数从给定 location
参数 (默认值为 0)和 scale
参数 (默认值为 1)的柯西分布中抽取 n
个值。
> x <- rcauchy(n=100, location=0, scale=1)
卡方分布
[edit | edit source]卡方分布的分位数( 分布)
> qchisq(.95,1)
[1] 3.841459
> qchisq(.95,10)
[1] 18.30704
> qchisq(.95,100)
[1] 124.3421
指数
[edit | edit source]我们可以使用 rexp()
函数从给定 rate
(默认值为 1)的指数分布中抽取 n
个值
> x <- rexp(n=100, rate=1)
费希尔-斯尼德科
[edit | edit source]我们可以绘制费希尔分布(F 分布)的密度
> par(mar=c(3,3,1,1))
> x <- seq(0,5,len=1000)
> plot(range(x),c(0,2),type="n")
> grid()
> lines(x,df(x,df1=1,df2=1),col="black",lwd=3)
> lines(x,df(x,df1=2,df2=1),col="blue",lwd=3)
> lines(x,df(x,df1=5,df2=2),col="green",lwd=3)
> lines(x,df(x,df1=100,df2=1),col="red",lwd=3)
> lines(x,df(x,df1=100,df2=100),col="grey",lwd=3)
> legend(2,1.5,legend=c("n1=1, n2=1","n1=2, n2=1","n1=5, n2=2","n1=100, n2=1","n1=100, n2=100"),col=c("black","blue","green","red","grey"),lwd=3,bty="n")
我们可以使用 rgamma()
函数从具有给定 shape
参数和 scale
参数 的 伽马分布 中抽取 n
个值。或者,可以给出 shape
参数和 rate
参数 。
> x <- rgamma(n=10, scale=1, shape=0.4)
> x <- rgamma(n=100, scale=1, rate=0.8)
我们可以使用 rlevy()
函数从具有给定位置参数 (由参数 m
定义,默认值为 0)和缩放参数(由参数 s
给出,默认值为 1)的 Lévy 分布 中抽取 n
个值。
> x <- rlevy(n=100, m=0, s=1)
我们可以使用 rlnorm()
函数从具有给定 meanlog
(默认值为 0)和 sdlog
(默认值为 1)的 对数正态分布 中抽取 n
个值。
> x <- rlnorm(n=100, meanlog=0, sdlog=1)
我们可以使用 rnorm()
函数从具有给定 mean
(默认值为 0)和 sd
(默认值为 1)的 正态分布 或高斯分布中抽取 n
个值。
> x <- rnorm(n=100, mean=0, sd=1)
正态分布的分位数
> qnorm(.95)
[1] 1.644854
> qnorm(.975)
[1] 1.959964
> qnorm(.99)
[1] 2.326348
- mvtnorm 包含用于多元正态分布的函数。
- rmvnorm()生成多元正态分布。
> library(mvtnorm)
> sig <- matrix(c(1, 0.8, 0.8, 1), 2, 2)
> r <- rmvnorm(1000, sigma = sig)
> cor(r)
[,1] [,2]
[1,] 1.0000000 0.8172368
[2,] 0.8172368 1.0000000
- 广义帕累托 dgpd()在 evd 中
dpareto(), ppareto(), rpareto(), qpareto()
在 actuar 中- VGAM 包也包含用于帕累托分布的函数。
学生 t 分布 的分位数
> qt(.975,30)
[1] 2.042272
> qt(.975,100)
[1] 1.983972
> qt(.975,1000)
[1] 1.962339
以下几行绘制了 t 分布在自由度函数中的 0.975 分位数
curve(qt(.975,x), from = 2 , to = 100, ylab = "Quantile 0.975 ", xlab = "Degrees of freedom", main = "Student t distribution")
abline(h=qnorm(.975), col = 2)
我们可以使用 runif()
函数从两个值之间(默认值为 0 和 1)的 均匀分布(也称为矩形分布)中抽取 n
个值。
> runif(n=100, min=0, max=1)
我们可以使用 rweibull()
函数从具有给定 shape
和 scale
参数 (默认值为 1)的 威布尔分布 中抽取 n
个值。
> x <- rweibull(n=100, shape=0.5, scale=1)
- Gumbel 分布
- Logistic 分布:两个 Gumbel 分布之差的分布。
plogis, qlogis, dlogis, rlogis
- Fréchet
dfrechet()
evd - 广义极值
dgev()
evd - Gumbel
dgumbel()
evd Burr, dburr, pburr, qburr, rburr
在 actuar 中
- CircStats 包包含用于圆形统计学的函数。
- 包 VGAM、SuppDists、actuar、fBasics、bayesm、MCMCpack
- ↑ Benford, F. (1938) The Law of Anomalous Numbers. Proceedings of the American Philosophical Society, 78, 551–572.
- ↑ Newcomb, S. (1881) Note on the Frequency of Use of the Different Digits in Natural Numbers. American Journal of Mathematics, 4, 39–40.
- ↑ Gabaix, Xavier (August 1999). "Zipf's Law for Cities: An Explanation". Quarterly Journal of Economics 114 (3): 739–67. doi:10.1162/003355399556133. ISSN 0033-5533. http://pages.stern.nyu.edu/~xgabaix/papers/zipf.pdf.