这篇博文主要是介绍如何用R来对未知参数进行估计。
给定置信水平时,置信区间越窄,区间估计精度越高。
均值估计
在估计总体均值时,方差已知。
install.packages("BSDA")
install.packages("UsingR")
#方差已知
conf.int=function(x,sigma,alpha){
mean=mean(x)
n=length(x)
z=qnorm(1-alpha/2,mean=0,sd=1,lower.tail=TRUE)
c(mean-sigma*z/sqrt(n),mean+sigma*z/sqrt(n))
}
set.seed(111) #设定随机种子
x=rnorm(20,10,2)
conf.int(x,2,0.05)
library("BSDA")
library("lattice")
z.test(x,sigma.x=2)$conf.int
library("UsingR")
simple.z.test(x,2)
Out:
[1] 8.416051 10.169096
[1] 8.416051 10.169096
attr(,"conf.level")
[1] 0.95
[1] 8.416051 10.169096
三种方法得到的置信区间都是一样的。其中利用BSDA
包做区间估计时,z.test()
用法如下:
z.test(
x,
y = NULL,
alternative = "two.sided",
mu = 0,
sigma.x = NULL,
sigma.y = NULL,
conf.level = 0.95
)
根据参数可直接指定单边还是双边检验,可指定标准差
σ
\sigma
σ和置信水平
在估计总体均值时,方差未知。
t.test(x)$conf.int
[1] 8.432088 10.153059
attr(,"conf.level")
[1] 0.95
比率估计
#比率的区间估计
binom.test(214,2000)
#exact binomial interval for p
#比率的近似置信区间
prop.test(214,2000)
在估计总体比例p时,可用函数prop.test
直接完成对p的区间估计
方差估计
下面是估计总体方差的部分:
var.conf.int=function(x,mu=Inf,alpha){
n=length(x)
if(mu<Inf){
s2=sum((x-mu)^2)/n
df=n
}
else{
s2=var(x)
df=n-1
}
c(df*s2/qchisq(1-alpha/2,df),df*s2/qchisq(alpha/2,df))
}
var.conf.int(x,alpha=0.05)
Out:
[1] 1.955042 7.211313