跳轉到內容

R 程式設計/機率分佈

華夏公益教科書,一個開放的世界,開放的書籍

本頁面回顧主要的機率分佈並描述處理它們的R函式。

R有很多機率函式。

  • r是隨機變數生成器的通用字首,例如runif()rnorm()
  • d是機率密度函式的通用字首,例如dunif()dnorm()
  • p是累積密度函式的通用字首,例如punif()pnorm()
  • q是分位數函式的通用字首,例如qunif()qnorm()

離散分佈

[編輯 | 編輯原始碼]

本福德分佈

[編輯 | 編輯原始碼]

The 本福德分佈是數字首位數字的分佈。它是由 Benford 1938 [1]和 Newcomb 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

伯努利

[編輯 | 編輯原始碼]

我們可以使用伯努利抽樣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)

二項式

[編輯 | 編輯原始碼]

我們可以使用rbinom()函式從二項分佈中抽樣,其中引數n表示要抽取的樣本數量,size定義試驗次數,prob定義每次試驗中成功的機率。

> x <- rbinom(n=100,size=10,prob=0.5)

超幾何分佈

[編輯 | 編輯原始碼]

我們可以使用rhyper()函式從超幾何分佈中抽取n次。

> x <- rhyper(n=1000, 15, 5, 5)

幾何分佈

[編輯 | 編輯原始碼]

The 幾何分佈.

> N <- 10000
> x <- rgeom(N, .5)
> x <- rgeom(N, .01)

多項式

[編輯 | 編輯原始碼]

The 多項式分佈.

> sample(1:6, 100, replace=T, prob= rep(1/6,6))

負二項式分佈

[編輯 | 編輯原始碼]

The 負二項式分佈是一系列伯努利事件中,在 k 次成功之前失敗次數的分佈。

> N <- 100000
> x <- rnbinom(N, 10, .25)

泊松分佈

[編輯 | 編輯原始碼]

我們可以從泊松分佈中抽取n個值,平均值由引數lambda設定。

> x <- rpois(n=100, lambda=3)

齊夫定律

[編輯 | 編輯原始碼]

單詞頻率的分佈被稱為齊夫定律。它也是城市規模分佈的良好描述 [3]dzipf()pzipf()(VGAM)

> library(VGAM)
> dzipf(x=2, N=1000, s=2)

連續分佈

[編輯 | 編輯原始碼]

Beta 和 Dirichlet 分佈

[編輯 | 編輯原始碼]
>library(gtools)
>?rdirichlet
>library(bayesm)
>?rdirichlet
>library(MCMCpack)
>?Dirichlet

我們可以使用rcauchy()函式從給定location引數(預設值為 0)和scale引數(預設值為 1)的柯西分佈中抽取n個值。

> x <- rcauchy(n=100, location=0, scale=1)

卡方分佈

[編輯 | 編輯原始碼]

The 卡方分佈 分佈)的分位數

> qchisq(.95,1)
[1] 3.841459
> qchisq(.95,10)
[1] 18.30704
> qchisq(.95,100)
[1] 124.3421

我們可以使用rexp()函式從給定rate(預設值為 1)的指數分佈中抽取n個值。

> x <- rexp(n=100, rate=1)

費希爾-斯尼德科

[編輯 | 編輯原始碼]

我們可以繪製 費希爾分佈(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)的 萊維分佈 中取樣 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() 馮·米塞斯分佈(也稱為迴圈正態分佈或 Tikhonov 分佈)密度函式
    • 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.
前一頁:最佳化 索引 下一頁:隨機數生成
華夏公益教科書