欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言 基础统计学之样本量计算

程序员文章站 2022-07-11 15:34:17
...

#R语言 基础统计学之样本量计算

以下介绍基础统计学关于样本量计算的问题,主要解决实际问题中在已知一些统计特征下,计算所必要的样本量,共有三种方式:总体方差已知时,总体方差未知时 ,估计比例为P时的三种情况下的样本量。

总体方差σ已知

若已知总体X的均值为μ,方差为σ2\sigma^2,可以依据基本公式:
n=(Z1α/2σ2E)2 n = (\frac{Z_{1-\alpha/2}\sigma^2}{E})^2
计算得出。

通过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的均值为μ,总体方差σ2\sigma^2未知时,可以依据基本公式:

n=(t1α/2(n1)sE)2 n = (\frac{t_{1-\alpha/2}(n-1)s}{E})^2
公式中,t1α/2(n1)t_{1-\alpha/2}(n-1)是随*度(n1)(n-1)二变化的,即在n未知时,t1α/2(n1)t_{1-\alpha/2}(n-1)也是未知的。一般情况下采用实验法(先用KaTeX parse error: Expected '}', got 'EOF' at end of input: Z_{1-\alpha/2)代替t1α/2(n1)t_{1-\alpha/2}(n-1)求出n0n_{0},再将n0n_{0}带入t1α/2(n1)t_{1-\alpha/2}(n-1)求出n1n_{1},重复后直至先后两次的n值的离差最小为止,最后的n1n_{1}即为确定的样本量。

通过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,样本标准差为600\sqrt{600 },则需要抽取多少户经行调查?

> sample_size2(2,sqrt(600),0.95,100)	#设定m值为100
 [1] 578.5885

可以看到两个相同例子,在信息不相同的情况下,计算结果并未相差较大。

估计比例为P时

在样本量较大情况下,样本比例p近似服从正态分布,因此s的粗略估计值为p(1-p),故可以根据公式:
n=(Z1α/2E)2p(1p) n = (\frac{Z_{1-\alpha/2}}{E})^2p(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

以上均为基本样本量计算的方式,而且是博主自己写的函数,读者可以通过自己编写更为简便的函数实现,欢迎交流,学无止境,加油!