一、区间估计:使用Python进行单个正态总体均值的区间估计

单个正态总体均值的区间估计

一. 预备知识

该实验涉及Numpy库和scipy库的使用,下面仅就这两个库中使用到的函数或方法加以介绍。

1.1 numpy库

numpy库是一个多维数组库,这里涉及数组对象的初始化,求均值,标准差的方法。

  • import numpy as np 导入numpy,并且起名为np
  • data = np.array([101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2]) 使用列表初始化一个一维数组
  • xb=np.mean(data) 求一组数据的平均值
  • s=np.std(data,ddof=1) 求一组数据的标准差

1.2 scipy库

scipy.stats库包含了各种离散型和连续性随机变量的分布。各种分布公共的函数如下:

  • rvs: Random Variates
  • pdf: Probability Density Function
  • cdf: Cumulative Distribution Function
  • sf: Survival Function (1-CDF)
  • ppf: Percent Point Function (Inverse of CDF)
  • isf: Inverse Survival Function (Inverse of SF)

使用各种分布时,通常先要冻结该分布,比如:

  • Z=stats.norm(loc=0,scale=1) 冻结一个正态分布为标准正态
  • T=stats.t(df=3) 冻结一个自由度为3的T分布。

二. 区间估计

单个正态总体的均值的区间估计可以分为两类:方差已知和方差未知。

2.1 方差已知

  1. 枢轴量为 x ‾ − μ σ / n ∼ N ( 0 , 1 ) \frac{\overline x - \mu}{\sigma / \sqrt{n}} \sim N(0, 1) σ/n xμN(0,1)
  2. 其置信水平为 1 − α 1-\alpha 1α的双侧置信区间为:
    ( x ‾ − σ n Z α 2 , x ‾ + σ n Z α 2 ) (\overline x - \frac{\sigma}{\sqrt{n}}Z_{\frac{\alpha}{2}}, \overline x + \frac{\sigma}{\sqrt{n}}Z_{\frac{\alpha}{2}}) (xn σZ2α,x+n σZ2α)
  3. 其置信水平为 1 − α 1-\alpha 1α的单侧置信下限为:
    x ‾ − σ n Z α \overline x - \frac{\sigma}{\sqrt{n}}Z_{\alpha} xn σZα
  4. 其置信水平为 1 − α 1-\alpha 1α的单侧置信上限为:
    x ‾ + σ n Z α \overline x + \frac{\sigma}{\sqrt{n}}Z_{\alpha} x+n σZα

2.2 方差未知

  1. 枢轴量为 x ‾ − μ s / n ∼ T ( n − 1 ) \frac{\overline x - \mu}{s / \sqrt{n}} \sim T(n-1) s/n xμT(n1)
  2. 其置信水平为 1 − α 1-\alpha 1α的双侧置信区间为:
    ( x ‾ − σ n T α 2 , x ‾ + σ n T α 2 ) (\overline x - \frac{\sigma}{\sqrt{n}}T_{\frac{\alpha}{2}}, \overline x + \frac{\sigma}{\sqrt{n}}T_{\frac{\alpha}{2}}) (xn σT2α,x+n σT2α)
  3. 其置信水平为 1 − α 1-\alpha 1α的单侧置信下限为:
    x ‾ − σ n T α \overline x - \frac{\sigma}{\sqrt{n}}T_{\alpha} xn σTα
  4. 其置信水平为 1 − α 1-\alpha 1α的单侧置信上限为:
    x ‾ + σ n T α \overline x + \frac{\sigma}{\sqrt{n}}T_{\alpha} x+n σTα

三. Python实现求解

import numpy as np
from scipy import stats
def confidence_interval_u(data, sigma=-1, alpha=0.05, side_both=True):
    xb = np.mean(data)
    s = np.std(data, ddof=1)
    if  sigma > 0: # sigma已知,枢轴量服从标准正态分布
        Z = stats.norm(loc=0, scale=1.)
        if side_both: # 求双侧置信区间
            tmp = sigma/np.sqrt(len(data))*Z.ppf(1-alpha/2)
            return (xb-tmp, xb+tmp)
        else: # 单侧置信下限或单侧置信上限
            tmp= sigma/np.sqrt(len(data))*Z.ppf(1-alpha)
            return {'bottom_limit': xb-tmp, 'top_limit': xb+tmp}
    else: # sigma未知,枢轴量服从自由度为n-1的t分布
        T = stats.t(df=len(data)-1)
        if side_both:
            tmp = s/np.sqrt(len(data))* T.ppf(1-alpha/2)
            return (xb-tmp, xb+tmp)
        else:
            tmp = s/np.sqrt(len(data))* T.ppf(1-alpha)
            return {'bottom_limit': xb-tmp, 'top_limit': xb+tmp}

例题

  1. 某袋装食品重量(单位:克) X ∼ N ( μ , σ 2 ) X\sim N(\mu, \sigma^2) XN(μ,σ2) . 现从一大批该产品中随机抽取10件,称的重量为:
    101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2
    (1) σ = 3 \sigma =3 σ=3, (2) σ \sigma σ未知, 求(1)(2)两种情况下 μ \mu μ的置信水平为95%的双侧置信区间.
    解:(1) σ = 3 \sigma=3 σ=3
data = np.array([101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2])
confidence_interval_u(data,3)

结果为:
( 98.160614903086312 , 101.87938509691368 ) (98.160614903086312, 101.87938509691368) (98.160614903086312,101.87938509691368)
(2) σ \sigma σ 未知

data = np.array([101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2])
confidence_interval_u(data)

结果为:
( 97.703745477642599 , 102.33625452235739 ) (97.703745477642599, 102.33625452235739) (97.703745477642599,102.33625452235739)

参考文献

  • 《概率论与数理统计》浙大
  • python scipy document
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值