这次总结一下数理统计中的参数估计,即**点估计(矩估计、极大似然估计)和区间估计(置信区间)**部分的R语言实现,由于这部分内容没有相应的R语言内置函数,所以需要编程的地方比较多,篇幅也相应地比较长。
在计算非线性方程组的根时,采用了自定义函数Newtons(),运用Newton法进行求根。 # 定义Newton法迭代的函数:计算非线性方程组 Newtons <- function(fun, x, eps=1e-5, it_max=100) { index <- 0; k <- 1; while (k <= it_max) { x1 <- x; obj <- fun(x); x <- x - solve(obj$J, obj$f); norm <- sqrt((x - x1) %*% (x - x1)) # 达到精度,跳出循环,index赋值为1表示计算成功 if (norm < eps) { index <- 1; break } k <- k + 1 } obj <- fun(x); list(root=x, it_num=k, index=index, FunVal=obj$f) }极大似然估计(Maximum Likelihood Estimate, MLE),最早由统计学家Fisher提出,是一种充分利用总体分布函数信息的估计方式,方法是寻找使似然函数达到最大的参数 θ \theta θ。
定义:设总体X的概率密度函数或分布律为 f ( x ; θ ) , θ ∈ Θ f(x;\,\theta),\,\theta\in\Theta f(x;θ),θ∈Θ是未知参数, X 1 , X 2 , ⋯ , X n X_1,\,X_2,\,\cdots,\,X_n X1,X2,⋯,Xn为来自总体 X X X的样本,称 L ( θ ; x ) = L ( θ ; x 1 , x 2 , ⋯ , x n ) = ∏ i = 1 n f ( x i ; θ ) L(\theta;\,x)=L(\theta;x_1,\,x_2,\,\cdots,\,x_n)=\prod\limits_{i=1}^nf(x_i;\,\theta) L(θ;x)=L(θ;x1,x2,⋯,xn)=i=1∏nf(xi;θ) 为 θ \theta θ的极大似然函数(likelihood function)。
定义:设总体X的概率密度函数或分布律为 f ( x ; θ ) , θ ∈ Θ f(x;\,\theta),\,\theta\in\Theta f(x;θ),θ∈Θ是未知参数, X 1 , X 2 , ⋯ , X n X_1,\,X_2,\,\cdots,\,X_n X1,X2,⋯,Xn为来自总体 X X X的样本, L ( θ ; x ) L(\theta;\,x) L(θ;x)为 θ \theta θ的似然函数, 若 θ ^ = θ ^ ( X ) = θ ^ ( X 1 , X 2 , ⋯ , X n ) \hat{\theta}=\hat{\theta}(X)=\hat{\theta}(X_1,\,X_2,\,\cdots,\,X_n) θ^=θ^(X)=θ^(X1,X2,⋯,Xn)是一个统计量,且满足: L ( θ ^ ( X ) ; X ) = sup θ ∈ Θ L ( θ ; X ) L(\hat{\theta}(X);\,X)=\sup\limits_{\theta\in\Theta}L(\theta;\,X) L(θ^(X);X)=θ∈ΘsupL(θ;X) 则称 θ ^ \hat{\theta} θ^为 θ \theta θ的最大似然估计。
下面介绍几种常见分布的似然函数及其推导。
均匀分布
显然得到 a ^ = X ( 1 ) , b ^ = X ( n ) \hat{a}=X_{(1)},\,\hat{b}=X_{(n)} a^=X(1),b^=X(n).
指数分布
服从指数分布的最大似然估计函数为 L ( λ ; x ) = λ n e − λ ∑ i = 1 n x i L(\lambda;\,x) =\lambda^n\mathrm{e}^{-\lambda\sum\limits_{i=1}^nx_i} L(λ;x)=λne−λi=1∑nxi 取对数并求导得到 ∂ ln L ( λ ; x ) ∂ λ = ( n ln λ − λ ∑ i = 1 n x i ) λ = n λ − ∑ i = 1 n x i = 0 \frac{\partial \ln L(\lambda;\,x)}{\partial \lambda} =\left(n\ln\lambda-\lambda\sum\limits_{i=1}^nx_i\right)_{\lambda} =\frac{n}{\lambda}-\sum_{i=1}^n x_i=0 ∂λ∂lnL(λ;x)=(nlnλ−λi=1∑nxi)λ=λn−i=1∑nxi=0 即 λ = n ∑ i = 1 n x i \lambda=\dfrac{n}{\sum\limits_{i=1}^nx_i} λ=i=1∑nxin.
正态分布
正态分布的似然函数为
L ( μ , σ 2 ; x ) = ∏ i = 1 n f ( x i ; μ , σ 2 ) = ( 2 π σ 2 ) − n 2 exp [ − 1 2 σ 2 ∑ i = 1 n ( x i − μ ) 2 ] , L(\mu,\,\sigma^2;\,x)=\prod_{i=1}^nf(x_i;\,\mu,\,\sigma^2)=(2\pi\sigma^2)^{-\frac n2}\exp\left[-\frac1{2\sigma^2}\sum_{i=1}^n(x_i-\mu)^2\right], L(μ,σ2;x)=i=1∏nf(xi;μ,σ2)=(2πσ2)−2nexp[−2σ21i=1∑n(xi−μ)2],
对数似然函数为 ln L ( μ , σ 2 ; x ) = − n 2 ln ( 2 π σ 2 ) − 1 2 σ 2 ∑ i = 1 n ( x i − μ ) 2 , \ln L(\mu,\,\sigma^2;\,x) =-\frac n2\ln(2\pi\sigma^2)-\frac1{2\sigma^2}\sum_{i=1}^n(x_i-\mu)^2, lnL(μ,σ2;x)=−2nln(2πσ2)−2σ21i=1∑n(xi−μ)2, 令 { ∂ ln L ( μ , σ 2 ; x ) ∂ μ = 1 σ 2 ∑ i = 1 n ( x i − μ ) = 0 , ∂ ln L ( μ , σ 2 ; x ) ∂ σ 2 = − n 2 σ 2 + 1 2 σ 4 ∑ i = 1 n ( x i − μ ) 2 = 0 , \begin{cases} \dfrac{\partial \ln L(\mu,\,\sigma^2;\,x)}{\partial \mu} =\dfrac1{\sigma^2}\sum\limits_{i=1}^n(x_i-\mu)=0, \\ \dfrac{\partial \ln L(\mu,\,\sigma^2;\,x)}{\partial \sigma^2} =-\dfrac{n}{2\sigma^2}+\dfrac1{2\sigma^4}\sum\limits_{i=1}^n(x_i-\mu)^2=0, \end{cases} ⎩⎪⎪⎨⎪⎪⎧∂μ∂lnL(μ,σ2;x)=σ21i=1∑n(xi−μ)=0,∂σ2∂lnL(μ,σ2;x)=−2σ2n+2σ41i=1∑n(xi−μ)2=0, 解此似然方程组得到: μ = 1 n ∑ i = 1 n x i = x ‾ , σ 2 = 1 n ∑ i = 1 n ( x i − x ‾ ) 2 , \mu=\dfrac1n\sum\limits_{i=1}^nx_i=\overline{x},\quad \sigma^2=\dfrac1n\sum_{i=1}^n(x_i-\overline{x})^2, μ=n1i=1∑nxi=x,σ2=n1i=1∑n(xi−x)2, 进一步验证,对于对数似然函数 ln L ( μ , σ 2 ; x ) \ln L(\mu,\,\sigma^2;\,x) lnL(μ,σ2;x)的二阶Hesse矩阵 [ − n σ 2 − 1 σ 4 ∑ i = 1 n ( x i − μ ) − 1 σ 4 ∑ i = 1 n ( x i − μ ) n 2 σ 4 − 1 σ 6 ∑ i = 1 n ( x i − μ ) 2 ] = [ − n σ 2 0 0 − n 2 σ 4 ] \begin{bmatrix} -\dfrac n{\sigma^2} & -\dfrac1{\sigma^4}\sum\limits_{i=1}^n(x_i-\mu)\\ -\dfrac1{\sigma^4}\sum\limits_{i=1}^n(x_i-\mu) & \dfrac n{2\sigma^4}-\dfrac1{\sigma^6}\sum\limits_{i=1}^n(x_i-\mu)^2 \end{bmatrix} = \begin{bmatrix} -\dfrac n{\sigma^2} & 0\\ 0 & -\dfrac{n}{2\sigma^4} \end{bmatrix} ⎣⎢⎡−σ2n−σ41i=1∑n(xi−μ)−σ41i=1∑n(xi−μ)2σ4n−σ61i=1∑n(xi−μ)2⎦⎥⎤=⎣⎡−σ2n00−2σ4n⎦⎤ 为负定矩阵,所以 ( x ‾ , 1 n ∑ i = 1 n ( x i − x ‾ ) 2 ) \left(\overline{x},\,\dfrac1n\sum\limits_{i=1}^n(x_i-\overline{x})^2\right) (x,n1i=1∑n(xi−x)2)是 L ( μ , σ 2 ; x ) L(\mu,\,\sigma^2;\,x) L(μ,σ2;x)的极大值点。故 ( μ , σ 2 ) (\mu,\,\sigma^2) (μ,σ2)的最大似然估计为 μ ^ = X ‾ , σ ^ 2 = 1 n ∑ i = 1 n ( X i − X ‾ ) 2 . \hat{\mu}=\overline{X},\quad\hat{\sigma}^2=\dfrac1n\sum\limits_{i=1}^n(X_i-\overline{X})^2. μ^=X,σ^2=n1i=1∑n(Xi−X)2.
下面分两种情况进行极大似然估计中参数的计算。
首先采用Newton法实现:
# 定义待求方程 model <- function(e) { set.seed(7) x <- rnorm(10) n <- length(x) f <- c(sum(x - e[1]), -n + sum((x - e[1])^2 / e[2]^4)) J <- matrix(c(-n, 0, -2 * sum(x - e[1]) / e[2]^4, -4 * e[2]^(-3) * sum((x - e[1])^2)), nrow=2, byrow=T) list(f=f, J=J) } # 调用自定义函数`Newtons()`进行求解 Newtons(model, c(0, 1)) ## $root ## [1] 0.1039757 1.0962031 ## ## $it_num ## [1] 7 ## ## $index ## [1] 1 ## ## $FunVal ## [1] -3.608225e-16 1.878941e-05下面介绍一个简单的方法,需要调用rootSolve外部包的multiroot()函数,求解有 n n n个方程、 n n n个未知量的非线性方程组。
# 定义待求方程 model <- function(e, x) { n <- length(x) F1 <- sum(x - e[1]) F2 <- -n + sum((x - e[1])^2 / e[2]^4) c(F1, F2) } # 调用函数`multiroot()`进行求解 set.seed(7) x <- rnorm(10) # 导入外部包 library(rootSolve) # 求解 multiroot(f=model, start=c(0, 1), x=x) ## $root ## [1] 0.1039757 1.0962036 ## ## $f.root ## [1] -3.469447e-16 5.412950e-10 ## ## $iter ## [1] 5 ## ## $estim.precis ## [1] 2.706477e-10采用数值解法
以Cauchy分布的最大似然估计为例
采用uniroot()函数 # 参数为1的cauchy分布 set.seed(7) x <- rcauchy(100, 1) f <- function(p) sum((x - p) / (1 + (x - p)^2)) out <- uniroot(f, c(0, 5)); out ## $root ## [1] 1.08361 ## ## $f.root ## [1] -0.0001693485 ## ## $iter ## [1] 6 ## ## $init.it ## [1] NA ## ## $estim.prec ## [1] 6.103516e-05 采用optimize()函数,可以达到与uniroot()函数一致的结果。 # 生成参数为1的Cauchy分布样本 set.seed(7) x <- rcauchy(100, 1) loglike <- function(p) { n <- length(x) -log(pi) * n - sum(log(1 + (x - p)^2)) } optimize(loglike, c(0, 5), maximum = T) ## $maximum ## [1] 1.083612 ## ## $objective ## [1] -257.9063使用矩估计进行参数估计的方法称为矩法(method of moments),由英国统计学家K · Pearson提出,思想是用样本矩去估计总体矩,总体矩与总体的参数有关,从而得到总体参数的估计。
利用矩法估计总体的均值和方差,就等价于用样本的一阶原点矩估计均值,用样本的二阶中心矩估计方差。
下面介绍一些常用分布的矩估计推导。
均匀分布
分为两种情况,第一种只需要求解一阶原点矩,而第二种(一般情况)还需要计算二阶中心矩。
情形一(特殊情况) E X = ∫ 0 θ x 1 θ d x = θ 2 , EX=\int_0^\theta x\frac1\theta\mathrm{d}x=\frac\theta2, EX=∫0θxθ1dx=2θ, 所以其矩估计为 θ ^ = 2 X ‾ = 2 n ∑ i = 1 n X i \hat{\theta}=2\overline{X}=\dfrac2n\sum\limits_{i=1}^nX_i θ^=2X=n2i=1∑nXi.
情形二(一般情况)
E X = ∫ a b x 1 b − a d x = b + a 2 , D X = ∫ a b x 2 1 b − a d x − ( b + a 2 ) 2 = ( b − a ) 2 12 , \begin{aligned} EX&=\int_a^b x\frac1{b-a}\mathrm{d}x=\frac{b+a}2,\\ DX&=\int_a^b x^2\frac1{b-a}\mathrm{d}x-\left(\frac{b+a}2\right)^2=\frac{(b-a)^2}{12}, \end{aligned} EXDX=∫abxb−a1dx=2b+a,=∫abx2b−a1dx−(2b+a)2=12(b−a)2, 令 { b + a 2 = X ‾ ( b − a ) 2 12 = 1 n ∑ i = 1 n X i 2 \begin{cases} \dfrac{b+a}2=\overline{X}\\ \dfrac{(b-a)^2}{12}=\dfrac1n\sum\limits_{i=1}^nX_i^2 \end{cases} ⎩⎪⎨⎪⎧2b+a=X12(b−a)2=n1i=1∑nXi2 解得 a ^ = X ‾ − 3 n ∑ i = 1 n X i 2 , b ^ = X ‾ + 3 n ∑ i = 1 n X i 2 . \hat{a}=\overline{X}-\sqrt{\dfrac3n\sum\limits_{i=1}^nX_i^2},\ \hat{b}=\overline{X}+\sqrt{\dfrac3n\sum\limits_{i=1}^nX_i^2}. a^=X−n3i=1∑nXi2 , b^=X+n3i=1∑nXi2 .
指数分布 E X = ∫ 0 + ∞ λ x e − λ x d x = 1 λ , EX=\int_0^{+\infty}\lambda x\mathrm{e}^{-\lambda x}\mathrm{d}x=\frac1\lambda, EX=∫0+∞λxe−λxdx=λ1, 因此其矩估计为 λ ^ = n ∑ i = 1 n X i \hat{\lambda}=\dfrac{n}{\sum\limits_{i=1}^{n}X_i} λ^=i=1∑nXin.
正态分布
算总体 X X X的一阶、二阶原点矩
M 1 = E X = μ , M 2 = E X 2 = σ 2 + μ 2 M_1 =EX=\mu,\quad M_2 =EX^2=\sigma^2+\mu^2 M1=EX=μ,M2=EX2=σ2+μ2 以及样本的一阶、二阶原点矩
A 1 = X ‾ = 1 n ∑ i = 1 n X i , A 2 = 1 n ∑ i = 1 n X i 2 . A_1=\overline{X}=\frac1n\sum_{i=1}^nX_i,\quad A_2=\frac1n\sum_{i=1}^nX_i^2. A1=X=n1i=1∑nXi,A2=n1i=1∑nXi2.
所以得到方程组
{ μ = X ‾ σ 2 + μ 2 = 1 n ∑ i = 1 n X i 2 \begin{cases} \mu=\overline{X}\\ \sigma^2+\mu^2=\dfrac1n\sum\limits_{i=1}^nX_i^2 \end{cases} ⎩⎨⎧μ=Xσ2+μ2=n1i=1∑nXi2
解上述方程,得均值 μ \mu μ和方差 σ 2 \sigma^2 σ2的矩估计
μ ^ = X ‾ , σ ^ 2 = 1 n ∑ i = 1 n X i 2 − X ‾ 2 = 1 n ∑ i = 1 n ( X i − X ‾ ) 2 = n − 1 n S 2 . \begin{aligned}\hat{\mu}&=\overline{X},\\\hat{\sigma}^2&=\dfrac1n\sum\limits_{i=1}^nX_i^2-\overline{X}^2=\dfrac1n\sum\limits_{i=1}^n(X_i-\overline{X})^2=\frac{n-1}nS^2.\end{aligned} μ^σ^2=X,=n1i=1∑nXi2−X2=n1i=1∑n(Xi−X)2=nn−1S2.
# 定义待求方程组 moment_fun <- function(p) { f <- c(p[1] * p[2] - M1, p[1] * p[2] - p[1] * p[2]^2 - M2) J <- matrix(c(p[2], p[1], p[2] - p[2]^2, p[1] - 2 * p[1] * p[2]), nrow=2, byrow=T) list(f=f, J=J) } # 主函数 # N=20, p=0.7, 试验次数n=100 # 设置随机数种子,使每次运行得到相同的结果 set.seed(7) # 生成服从二项分布的随机数作为输入数据 x <- rbinom(100, 20, 0.7); n <- length(x) M1 <- mean(x) M2 <- (n-1) / n * var(x) # 计算矩估计参数 p <- c(10, 0.5); Newtons(moment_fun, p) ## $root ## [1] 20.1441323 0.6875451 ## ## $it_num ## [1] 6 ## ## $index ## [1] 1 ## ## $FunVal ## [1] -1.776357e-15 8.881784e-16这部分的内容比较多,因为涉及到的情况分类多。不过编程不难,直接根据公式与对应的适应情况进行编程即可,主要用到了if-else条件分支语句。
配对数据作差,然后做单样本t检验,其中含有差的变化的区间估计
x <- c(11.3,15.0,15.0,13.5,12.8,10.0,11.0,12.0,13.0,12.3) y <- c(14.0,13.8,14.0,13.5,13.5,12.0,14.7,11.4,13.8,12.0) t.test(x-y) ## ## One Sample t-test ## ## data: x - y ## t = -1.3066, df = 9, p-value = 0.2237 ## alternative hypothesis: true mean is not equal to 0 ## 95 percent confidence interval: ## -1.8572881 0.4972881 ## sample estimates: ## mean of x ## -0.68μ 1 , μ 2 \mu_1,\,\mu_2 μ1,μ2已知
interval_var2 <- function(x, y, mu=c(Inf, Inf), alpha=0.05) { n1 <- length(x); n2 <- length(y) # 均值已知 if (all(mu < Inf)) { Sx2<-1/n1*sum((x-mu[1])^2); Sy2<-1/n2*sum((y-mu[2])^2) df1<-n1; df2<-n2 } # 均值未知 else { Sx2<-var(x); Sy2<-var(y); df1<-n1-1; df2<-n2-1 } r <- Sx2/Sy2 a <- r/qf(1-alpha/2,df1,df2) b <- r/qf(alpha/2,df1,df2) list(rate=r, df1=df1, df2=df2, a=a, b=b) } a <- c(79.98,80.04,80.02,80.04,80.03,80.03,80.04,79.97,80.05,80.03,80.02,80.00,80.02) b <- c(80.02,79.94,79.98,79.97,79.97,80.03,79.95,79.97) #均值已知μ1, μ2 =80 interval_var2(a, b, mu=c(80,80)) ## $rate ## [1] 0.7326007 ## ## $df1 ## [1] 13 ## ## $df2 ## [1] 8 ## ## $a ## [1] 0.1760141 ## ## $b ## [1] 2.482042 #均值未知 interval_var2(a, b) ## $rate ## [1] 0.5837405 ## ## $df1 ## [1] 12 ## ## $df2 ## [1] 7 ## ## $a ## [1] 0.1251097 ## ## $b ## [1] 2.105269采用中心极限定理进行推导
首先进行数据标准化,当 n n n充分大时,有 ∑ i = 1 n X i − u μ n σ ∼ N ( 0 , 1 ) , \frac{\sum\limits_{i=1}^nX_i-u\mu}{\sqrt{n}\sigma}\sim N(0,\,1), n σi=1∑nXi−uμ∼N(0,1), 参数 μ \mu μ的区间估计( σ \sigma σ已知) [ X ‾ − σ n Z α / 2 , X ‾ + σ n Z α / 2 ] \left[\overline{X}-\frac{\sigma}{\sqrt n}Z_{\alpha/2},\,\overline{X}+\frac{\sigma}{\sqrt n}Z_{\alpha/2}\right] [X−n σZα/2,X+n σZα/2]
参数 μ \mu μ的区间估计( σ \sigma σ未知)
[ X ‾ − S n Z α / 2 , X ‾ + S n Z α / 2 ] \left[\overline{X}-\frac{S}{\sqrt n}Z_{\alpha/2},\,\overline{X}+\frac{S}{\sqrt n}Z_{\alpha/2}\right] [X−n SZα/2,X+n SZα/2]
编程得到
interval_estimate3<-function(x,sigma=-1,alpha=0.05) { n<-length(x); xb<-mean(x) if (sigma>=0) tmp<-sigma/sqrt(n)*qnorm(1-alpha/2) else tmp<-sd(x)/sqrt(n)*qnorm(1-alpha/2) list(mean=xb, a=xb-tmp, b=xb+tmp) } # 例题求解 x <- rexp(50,1/2.266) interval_estimate3(x) ## $mean ## [1] 2.202523 ## ## $a ## [1] 1.654711 ## ## $b ## [1] 2.750334