R语言中的统计分布

1

R语言中与正态分布有关的函数有四个,分别为dnorm,pnorm,qnorm和rnorm,其中,dnorm表示密度函数,pnorm表示分布函数,qnorm表示分位数函数,rnorm表示生成随机数的函数。在R中与之类似的函数还有很多,具体的可以通过 help(Distributions)命令去查看。

正态分布

dnorm

dnorm:正态分布的 概率密度函数(PDF,Probability Density Function)d表示 densitynorm表示正态。

正态分布的公式如下所示:

f(x | \mu, \sigma)=\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}}

dnorm()函数会返回上公式的值。如果是标准正态分布,​\mu = 0,\sigma=1

f(x | \mu, \sigma)=\frac{1}{\sqrt{2 \pi}} e^{-\frac{x^{2}}{2}}
# 标准正态分布
# mean=0,sd=1 默认值可省略
dnorm(0,mean=0,sd=1)  #  0.3989423 
# 非标准正态分布
dnorm(2, mean = 5, sd = 3) # 0.08065691 


# PDF曲线
z_scores <- seq(-4,4,0.1)
z_scores
# 计算z_scores的概率密度
dvalues <- dnorm(z_scores)
dvalues
# plot
plot(z_scores,dvalues, 
     type = "l",
     main = "pdf of the Standard Normal",
     xlab= "Z-score") 

be559163cd6941ea5812a389dd0e5909.png

pnorm

pnorm:正态分布的累积概率密度函数(CDF,Cumulative Distribution Function)。
pnorm函数中的 p表示Probability,计算​P[X ≤ x]的概率。
lower.tail参数默认 True,如果 lower.tail = FALSE,返回的​P[X > x]的概率(即 pnorm(q) = 1-pnorm(q,lower.tail=FALSE)
在R中,pnorm()这个函数完全可以取代正态分布表。

# pnorm()默认的参数与dnorm()一样,都是标准正态分布
pnorm(0)  # 0.5 

# lower.tail参数
pnorm(2, mean = 5, sd = 3)  # [1] 0.1586553
pnorm(2, mean = 5, sd = 3, lower.tail = FALSE)  # [1] 0.8413447
1 - pnorm(2, mean = 5, sd = 3, lower.tail = FALSE)  # [1] 0.1586553 

用一组Z-scores计算一下相应的累积概率:

z_scores <- seq(-4,4,0.1)
z_scores

pvalues <- pnorm(z_scores)
pvalues


plot(pvalues, 
     xaxt = "n", # 不绘制x轴的刻度
     type = "l", # 使用曲线将各点连接起来
     main = "标准正态分布的CDF曲线",
     xlab= "分位数(Quantiles)",
     ylab="概率密度(Probability Density)") 

# 以下是添加x轴的刻度
axis(1, at=which(pvalues == pnorm(-2)), labels=round(pnorm(-2), 2))
axis(1, at=which(pvalues == pnorm(-1)), labels=round(pnorm(-1), 2))
axis(1, at=which(pvalues == pnorm(0)), labels=c(.5))
axis(1, at=which(pvalues == pnorm(1)), labels=round(pnorm(1), 2))
axis(1, at=which(pvalues == pnorm(2)), labels=round(pnorm(2), 2)) 

c7959af69e8ac98147aa1e71f22b6a7e.png

qnorm

qnorm可视作 pnorm的反函数,计算正态分布中的第p分位对应Z-score是多少。

例如计算在标准正态分布分布中,第50百分位的Z-score是多少?

qnorm(0.5)
# [1] 0

pnorm(qnorm(0)) # 0

rnorm

rnomr()函数的功能用于生成一组符合正态分布的随机数,它的参数有 n,meansd,其中n表示生成的随机数,mean与sd分别表示正态分布的均值与标准差。(runif生成的是均匀分布的随机数)

# 随机数种子
set.seed(100)

# 生成5个服从标准正态分布的随机数
rnorm(5)

# 生成1000个,服从均值为70,标准差为5的正态分布的随机数
n10000 <- rnorm(100, mean = 70, sd = 5)

# plot
par(mfrow=c(1,2))
hist(n10000, breaks = 20) 
d <- density(n10000)
plot(d)

e65c1011cb0014a594f09c2c7a0c6bd7.png

其它分布

分布 中文名称 R中的表达式 参数
Beta 贝塔分布 beta(a,b) shape1、shape2
Binomial 二项分布 binom(n,p) size、prob
Cauchy 柯西分布 cauchy() location、scale
Chi-square 卡方分布 chisq(df) df
Exponential 指数分布 exp(lambda) rate
F F分布 f(df1,df2) df1、df2
Gamma 伽玛分布 gamma() shape、rate
Geometric 几何分布 geom() prob
Hypergeometric 超几何分布 hyper() m、n、k
Logistic 逻辑分布 logis() location、scale
Negative binomial 负二项分布 nbinom() size、prob
Normal 正态分布 norm() mean、sd
Multivariate normal 多元正态分布 mvnorm() mean、cov
Poisson 泊松分布 pois() lambda
T t分布 t() df
Uniform 均匀分布 unif() min、max
Weibull 威布尔分布 weibull() shape、scale
Wilcoxon 威尔考可森分布 wilcox() m、n

上述分布函数前面加上r,p、q、d就可以表示相应的目的:

  • r:相应分布的随机数;
  • d:相应分布的密度函数;
  • p:相应分布的累积概率密度函数;
  • q:相应分布累积概率密度函数的反函数。

参考资料

Introduction to dnorm, pnorm, qnorm, and rnorm for new biostatisticians