R语言中的参数估计

R语言中的参数估计

一直想要写博客来着,一直没有实现,昨天看室友写了,借着复习R语言考试,来开启我的第一篇博客叭!
以下我将从点估计、区间估计来介绍区间估计,本文主要介绍R代码,具体的统计知识,详情可参考相关数理统计的专业书嗷

参数估计

  • R语言中的参数估计
    • 点估计
      • 距估计
      • 极大似然估计
    • 区间估计
      • 均值 μ \mu μ的估计
      • 两样本方差比的估计

点估计

点估计分为距估计和极大似然估计法。
简而言之,距估计就是用样本的一阶原点矩即样本的均值去估计均值,用样本的二阶中心距即样本方差估计方差。
极大似然估计就是求似然函数的极大值点啦,口说不如实战,下面让我们一起看看一道习题叭,是薛毅版的统计建模与R语言中第四章的习题。
R语言中的参数估计_第1张图片

距估计

首先求出该函数的期望
E ( x ) = ∫ 0 1 ( α + 1 ) x α + 1 d x E\left(x\right)=\int_{0}^{1}{(\alpha+1)x^{\alpha+1}dx} E(x)=01(α+1)xα+1dx
求得 E ( x ) = α + 1 α + 2 E\left(x\right)=\frac{\alpha+1}{\alpha+2} E(x)=α+2α+1,然后用样本期望表示待估参数
则有 α = 2 E ( x ) − 1 1 − E ( x ) \alpha=\frac{2E\left(x\right)-1}{1-E(x)} α=1E(x)2E(x)1
接着就上R代码啦

> x=c(0.1,0.2,0.9,0.8,0.7,0.7)
> a=(2*mean(x)-1)/(1-mean(x))
> a
[1] 0.3076923

这样我们就完成了距估计,nice!

极大似然估计

L ( α ; x ) = ∏ i = 1 6 ( α + 1 ) x i α = ( α + 1 ) 6 ∏ i = 1 6 x i α L\left(\alpha;x\right)=\prod_{i=1}^{6}{\left(\alpha+1\right){x_i}^\alpha={(\alpha+1)}^6\prod_{i=1}^{6}{x_i}^\alpha} L(α;x)=i=16(α+1)xiα=(α+1)6i=16xiα
取对数为
l n L ( α ; x ) = 6 l n ( α + 1 ) + α l n ∑ i = 1 6 x i lnL\left(\alpha;x\right)=6ln\left(\alpha+1\right)+\alpha ln\sum_{i=1}^{6}x_i lnL(α;x)=6ln(α+1)+αlni=16xi
接着对其求偏导有:
∂ l n L ( α ; x ) ∂ α = 6 α + 1 + ∑ i = 1 6 l n x i \frac{\partial lnL\left(\alpha;x\right)}{\partial\alpha}=\frac{6}{\alpha+1}+\sum_{i=1}^{6}{lnx_i} αlnL(α;x)=α+16+i=16lnxi
接着输入R程序脚本,使用uniroot函数对 α \alpha α估计求解

> x=c(0.1,0.2,0.9,0.8,0.7,0.7)
> f=function(a)
+ {
     
+     6/(a+1)+sum(log(x))
+ }
> uniroot(f,c(0,1))
$root
[1] 0.211182

$f.root      #极大似然估计得到的数值解根

[1] -3.844668e-05

$iter
[1] 5

$init.it
[1] NA

$estim.prec
[1] 6.103516e-05

这样极大似然估计也做完啦

区间估计

均值 μ \mu μ的估计

分为方差已知和方差未知两种情况

> interval_estimate1=function(x,sigma=-1,alpha=0.5){
     
+   n=length(x);xb=mean(x)
+   if (sigma>=0){
            #sigma已知用正态分布的u检验
+     tmp=sigma/sqrt(n)*qnorm(1-alpha/2);df=n
+   }
+   else{
                     #sigma未知t检验
+     tmp=sd(x)/sqrt(n)*qt(1-alpha/2,n-1);df=n-1
+   }
+   data.frame(mean=xb,df=df,a=xb-tmp,b=xb+tmp)   #最后以数据框的形式输出
+ }
> x=c(14.6,15.1,14.9,14.8,15.2,15.1)
> interval_estimate1(x,0.2)   #已知sigma为0.2
   mean df        a        b
1 14.95  6 14.89493 15.00507
> interval_estimate1(x)       #sigma未知
   mean df      a      b
1 14.95  5 14.883 15.017

通过以上结果可以看出方差已知时的区间更小,更为精确,但是在生活中几乎是都不知道了啦。
上面的代码是将整个过程都运行了一遍,实际上R中有内置函数
t.test()
利用该函数可以得到相同的区间估计,是很方便了。
接着我们看一下配对数据的均值差如何使用这个函数叭

> x=c(11.3,15.0,15.0,13.5,12.8,10.0,11.0,12,13,12.3)
> y=c(14,13.8,14,13.5,13.5,12,14.7,11.4,13.8,12)
> 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 

是不是很简单啊哈哈哈哈,有内置函数就很香了。
t.tes()的作用是和均值挂钩的,和方差估计无关嗷,不要搞混了。

两样本方差比的估计

那么下一个内置函数var.test()
该函数可提供双样本方差比的区间估计
好的来试一下

> x=c(11.3,15.0,15.0,13.5,12.8,10.0,11.0,12,13,12.3)
> y=c(14,13.8,14,13.5,13.5,12,14.7,11.4,13.8,12)
> var.test(x,y)

	F test to compare two variances

data:  x and y
F = 2.2844, num df = 9, denom df = 9, p-value = 0.2343
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.5674248 9.1971787
sample estimates:
ratio of variances 
          2.284449 

哈哈哈哈差不多就到这里叭…
新手上路,有很多不懂的地方,希望能给大家带来些许帮助,也欢迎大家批评指正喔!饿了饿了,干饭人冲了!

你可能感兴趣的:(R语言学习,算法)