登录
首页精彩阅读R语言与区间估计学习笔记
R语言与区间估计学习笔记
2016-10-25
收藏

R语言与区间估计学习笔记

鉴于区间估计的理论与方法可以在任意一本统计学教程中找到,故这里只是单纯的介绍R语言中区间估计的函数与一些自己编写的区间估计函数。

一、单正态总体的参数估计

1、 方差已知时的均值估计

z.test<-function(x,n,sigma,a,u0,alt){

result<-list()

mean<-mean(x)

result$interval<-c(mean-sigma*qnorm(1-a/2,0,1)/sqrt(n),mean+sigma*qnorm(1-a/2,0,1)/sqrt(n))

z<-(mean-u0)/(sigma/sqrt(n))

p<-pnorm(z,lower.tail=F) #函数笔记:lower.tail是真的话,得出的就是X<=x的分位数,为假的话就是用P(X>x)的办法寻找这个值。一般我们用默认的真就可以了

result$z<-z

result$p.value<-p #通过P值判定参数估计效果

if(alt==2)

reslut$p.value<-2*pnorm(abs(z),lower.tail=F)

else

reslut$p.value<-pnorm(z)

reslut#函数笔记:如果函数的结果需要有多个返回值,可以创建一个list(),并返回该对象。也可以用return()函数,设定返回值。但是一个函数的返回的对象只有一个。

}

2、 方差未知时的均值估计

在小样本中,我们通常使用R语言内置函数t.test()调用格式:

t.test(x, y = NULL,

alternative = c("two.sided", "less","greater"),

mu = 0, paired = FALSE, var.equal = FALSE,

conf.level = 0.95, ...)

对于大样本,我们可以使用样本方差代替总体方差,使用z.test()处理

3、 方差的区间估计

chisq.var.test<-function(x,n,a,alt=2,sigma0=1)

{

result<-list()

v<-var(x)

result$interval<-c((n-1)*v/qchisq(1-a/2,n-1,lower.tail=T),(n-1)*v/qchisq(a/2,n-1,lower.tail=T))

chi2<-(n-1)*v/sigma0

result$chi2<-chi2

p<-pchisq(chi2,n-1)

if(alt==2)

result$p.value<-2*min(pchisq(chi2,n-1),pchisq(chi2,n-1,lower.tail=F))

else

result$p.value<-pchisq(chi2,n-1,lower.tail=F)

result

}

这里虽然用fisher引理知道利用卡方分布来处理,但是我们不用chisq.test()来命名这个函数,因为R的内置函数中有chisq.test().如果我们这样命名函数,会导致卡方检验时使用有些许不便。

二、两正态总体参数的区间估计

1、 两方差都已知时两均值差的置信区间

two.sample.sigmaknown<-function(x,y,conf.level=0.95,sigma1,sigma2,alt=c("twosides","less","greater"))

{

n1<-length(x)

n2<-length(y)

x_<-mean(x)-mean(y)

a<-1-conf.level

z1<-qnorm(1-a/2)*sqrt(sigma1/n1+sigma2/n2)

z2<-qnorm(1-a)*sqrt(sigma1/n1+sigma2/n2)

if(alt=="two sides")

x_ +c(-z1,z1)

else if(alt=="less")

x_ -z2

else

x_ +z2

}

注:对于大样本,我们可以以样本标准差代替总体方差来进行区间估计

2、 两方差都未知但相等时两均值差的置信区间

直接使用t.test()函数即可

注:由于对于一般情形估计的方法特别多,可以使用neyman的枢轴量法亦可以使用fisher的信仰推断(通常认为后者较好)。故在此不予介绍

3、 两方差比的置信区间 数据分析培训

仔细阅读方差比的区间估计内容,我们应该注意到,两样本在做方差比估计时应该需要做正态性检验,在R中,你可以使用函数shapiro.test()来实现,该检验对数据的正态性是给与保护的。

使用var.test()函数,调用格式如下:

var.test(x, y, ratio = 1,

alternative = c("two.sided", "less", "greater"),

conf.level = 0.95, ...)

最后,我想解释一下置信水平的含义,我们所说的置信水平是指用这样的办法对数据进行100次估计,包含真值的次数为100*conf.level。这里的估计是指对不同数据用同样方法进行估计。我们可以编写一个R函数来验证一下:

judge<-rep(0,1000)

for(i in 1:1000){

set.seed(5*i)

if(t.test(rnorm(100000,5,17))$conf.int[1]<=5&5<=t.test(rnorm(100000,5,17))$conf.int[2])

judge[i]<-0

else

judge[i]<-1

}

table(judge)

输出结果:

#judge

# 0 1

#954 46

#从这里来看,估计达到95%的置信水平

数据分析咨询请扫描二维码

客服在线
立即咨询