跳转到内容

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]
>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 分布

[编辑 | 编辑源代码]

学生 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() 函数从具有给定 shapescale 参数 (默认值为 1)的 威布尔分布 中抽取 n 个值。

> x <- rweibull(n=100, shape=0.5, scale=1)
[编辑 | 编辑源代码]

plogis, qlogis, dlogis, rlogis

  • Fréchet dfrechet() evd
  • 广义极值 dgev() evd
  • Gumbel dgumbel() evd
  • Burr, dburr, pburr, qburr, rburractuar

圆形统计学中的分布

[编辑 | 编辑源代码]
  • CircStats 包包含用于圆形统计学的函数。
    • dvm() 冯·米塞斯分布(也称为圆形正态分布或提霍诺夫分布)密度函数
    • dtri() 三角形密度 函数
    • dmixedvm() 混合冯·米塞斯密度
    • dwrpcauchy() 包裹柯西密度
    • dwrpnorm() 包裹正态密度。

另请参见

[编辑 | 编辑源代码]
  • VGAMSuppDistsactuarfBasicsbayesmMCMCpack

参考文献

[编辑 | 编辑源代码]
  1. Benford, F. (1938) The Law of Anomalous Numbers. Proceedings of the American Philosophical Society, 78, 551–572.
  2. Newcomb, S. (1881) Note on the Frequency of Use of the Different Digits in Natural Numbers. American Journal of Mathematics, 4, 39–40.
  3. 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.
上一节:优化 索引 下一节:随机数生成
华夏公益教科书