R语言 基础统计学之样本量计算
#R语言 基础统计学之样本量计算
以下介绍基础统计学关于样本量计算的问题,主要解决实际问题中在已知一些统计特征下,计算所必要的样本量,共有三种方式:总体方差已知时,总体方差未知时 ,估计比例为P时的三种情况下的样本量。
总体方差σ已知
若已知总体X的均值为μ,方差为,可以依据基本公式:
计算得出。
通过R语言编写一个较为简单函数实现:
sample_size1 <- function(E,var,conf.leval) #E:最大允许误差,var:总体方差,conf.leval:置信水平
{
alpha = 1- conf.leval
((qnorm(1-alpha/2)*sqrt(var))/E)^2#函数qnorm():计算正态下的分位数值
}
简单例子:某小区30000户,调查人员将抽取合适样本调查用户一个月的平均收入,要求置信度为95%,最大允许误差为2,由历史经验表明家庭间收入的方差为600,则需要抽取多少户经行调查?
> sample_size1 (E = 2,var = 600,conf.leval = 0.95)
[1] 576.2188
总体方差未知时
若已知总体X的均值为μ,总体方差未知时,可以依据基本公式:
公式中,是随*度二变化的,即在n未知时,也是未知的。一般情况下采用实验法(先用KaTeX parse error: Expected '}', got 'EOF' at end of input: Z_{1-\alpha/2)代替求出,再将带入求出,重复后直至先后两次的n值的离差最小为止,最后的即为确定的样本量。
通过R语言编写一个较为简单函数实现:
sample_size2 <- function(E,s,conf.leval,m) #m:为给定的较大数
{
alpha = 1- conf.leval
t0 = qt(alpha/2,m,lower.tail = F)#函数qt():计算t分位数
n0 = (t0*s/E)^2
t1 = qt(alpha/2,n0,lower.tail = F)
n1 = (t1*s/E)^2
while (abs(n1-n0)<0.5) #abs为衡量指标 可以替换成平方差等等。
{
no = (qt(alpha/2,n1,lower.tail = F)*s/E)^2
n1 = (qt(alpha/2,n0,lower.tail = F)*s/E)^2
}
n1
}
简单例子:某小区30000户,调查人员将抽取合适样本调查用户一个月的平均收入,要求置信度为95%,最大允许误差为2,样本标准差为,则需要抽取多少户经行调查?
> sample_size2(2,sqrt(600),0.95,100) #设定m值为100
[1] 578.5885
可以看到两个相同例子,在信息不相同的情况下,计算结果并未相差较大。
估计比例为P时
在样本量较大情况下,样本比例p近似服从正态分布,因此s的粗略估计值为p(1-p),故可以根据公式:
p一般根据历史经验数据所得,若p未知,一般情况下取p = 0.5。
通过R语言编写一个较为简单函数实现:
sample_size3 <- function(E,p,conf.leval)
{
alpha = 1- conf.leval
((qnorm(1-alpha/2)/E)^2)*p*(1-p)
}
简单例子:某工厂以往制作产品的合格率为80%,试估计工厂现在制作产品的合格率,要求估计误差小于3%,置信水平为95%情况下抽取多少产品数量。
通过R语言编写一个较为简单函数实现:
>sample_size3(E = 0.03,p = 0.8,conf.leval = 0.95)
>[1] 682.926
以上均为基本样本量计算的方式,而且是博主自己写的函数,读者可以通过自己编写更为简便的函数实现,欢迎交流,学无止境,加油!