统计学第十一周:利用假设检验分析

21 篇文章 0 订阅
19 篇文章 4 订阅

统计学第十一周:

一 问题:

  • 1、人体体温的总体均值是否为98.6华氏度?
  • 2、人体的温度是否服从正态分布?
  • 3、人体体温中存在的异常数据是哪些?
  • 4、男女体温是否存在明显差异?
  • 5、体温与心率间的相关性(强?弱?中等?)

引申出来的点:你要怎么向运营或者产品的同事展示数据结果?

二 根据给出的数据进行验证(假设检验)

  1. 原 假 设 H 0 : 给 出 数 据 , 人 体 体 温 的 总 体 均 值 μ 0 = 98.6 , 备 择 假 设 H 1 : μ 0 ≠ 98.6 原假设H_0: 给出数据,人体体温的总体均值\mu _0 = 98.6 , 备择假设H_1:\mu_0\neq98.6 H0:μ0=98.6,H1:μ0=98.6

    经过统计计算:

    df.describe()
    		Temperature      Gender   HeartRate
    count   130.000000  130.000000  130.000000
    mean     98.249231    1.500000   73.761538
    std       0.733183    0.501934    7.062077
    min      96.300000    1.000000   57.000000
    25%      97.800000    1.000000   69.000000
    50%      98.300000    1.500000   74.000000
    75%      98.700000    2.000000   79.000000
    max     100.800000    2.000000   89.000000
    

    总体方差未知,但n未130属于大样本,温度的样本均值为98.248231 ,方差采用样本方差s替代,n=130
    x ‾ ± z α / 2 σ n \overline{x}\pm z_{\alpha/2}\frac{\sigma}{\sqrt{n}} x±zα/2n σ

    z = x ‾ − μ 0 s / n = 98.24923 − 98.6 0.733 / 130 = − 5.44837 z=\frac{\overline{x}-\mu_0}{s/\sqrt{n}}=\frac{98.24923-98.6}{0.733/\sqrt{130}}=-5.44837 z=s/n xμ0=0.733/130 98.2492398.6=5.44837
    根据双侧检验,只要z落在置信区间即可以验证假设,显然不在(-1.96,1.96)所以拒绝。

    95.5%的置信区间范围在

    (96.8122181854031, 99.68624335305843),此时看98.6在此区间范围内
    
    #coding=utf-8
    
    import  pandas  as  pd
    import numpy  as  np
    import  matplotlib.pyplot  as plt
    import  seaborn as  sbn
    from scipy  import  stats
    
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus']=False #解决负数坐标显示
    
    #df  =  pd.read_excel('d:\\excel\\tj-week11_test.xlsx')
    df  =  pd.read_csv('d:\\excel\\tj-week11_test.csv')
    print(df.head())
    
    print(df.describe())
    temperature = df['Temperature']
    
    def norm_conf(data,confidence=0.95):
        sample_mean = np.mean(data)
        sample_std = np.std(data,ddof = 1)
        sample_size = len(data)
        conf_interval = stats.norm.interval(confidence,loc=sample_mean,scale=sample_std)
        print(conf_interval)
    
    norm_conf(temperature)
    
    

    这里因此有个疑问,那种方法错了?

  2. 2.人体的体温是否服从正态分布?

#验证是否服从正态分布#####
ks_test = stats.kstest(df['Temperature'],'norm')
shapiron_test = stats.shapiro(df['Temperature'])
normaltest_test = stats.normaltest(df['Temperature'],axis=0)
print('ks_test: ',ks_test)
print('shapiro_test: ',shapiron_test)
print('normaltest_test: ',normaltest_test)
ks_test:  KstestResult(statistic=1.0, pvalue=0.0)
shapiro_test:  (0.9865769743919373, 0.2331680953502655)
normaltest_test:  NormaltestResult(statistic=2.703801433319236, pvalue=0.2587479863488212)

从根据检验pvalue>0.05,认为服从正态分布。

  1. 人体体温中存在的异常数据是哪些?

    这个问题求解,可以从正在分布的
    ( μ − 3 σ , μ + 3 σ ) 范 围 内 , 判 断 , (\mu-3\sigma,\mu+3\sigma)范围内,判断, μ3σ,μ+3σ

    df.describe()
    		Temperature      Gender   HeartRate
    count   130.000000  130.000000  130.000000
    mean     98.249231    1.500000   73.761538
    std       0.733183    0.501934    7.062077
    

    由上面计算结果知道样本均值未98.249,标准差为0.73318,
    所 以 3 σ 标 准 检 验 的 区 间 范 围 是 ( 98.249 − 0.73318 ∗ 3 , 98.249 + 0.733 ∗ 3 ) = 所以3\sigma标准检验的区间范围是(98.249-0.73318*3,98.249+0.733*3)= 3σ(98.2490.733183,98.249+0.7333)=

( 96.04946 , 100.448 ) (96.04946,100.448) (96.04946,100.448)

因此求出异常数据:

#求异常数据
print(df.loc[(df['Temperature']>100.448)])

#求异常数据
print(df.loc[(df['Temperature']<96.04946)])
     Temperature  Gender  HeartRate
129        100.8       2         77

同时利用箱型图进一步检验

在这里插入图片描述
最高点处有一个异常为100.8,低点有96.3,96.4,但基本在上述区间范围内,可以认为100.8点位异常值。

#箱型图
df['Temperature'].plot(kind='box')
plt.show()

4.男女体温是否存在差异?
原 假 设 位 H 0 : u 1 = u 2 , 即 男 女 体 温 无 差 异 备 择 假 设 H 1 : u 1 ≠ u 2 , 男 女 体 温 有 差 异 原假设位H_0:u_1=u_2,即男女体温无差异 备择假设H_1:u_1\neq u_2,男女体温有差异 H0:u1=u2H1:u1=u2,
利用两个总体均值之差的检验进行假设验证,很明显,男女总体分布未知,且方差未知,但都是大约30的数量,可以认为是大样本,经过统计数量各是65,且分别统计各自样本均值和样本方差:,满足z统计的条件,利用z统计

#按照男女分组统计
#定义聚合函数
def get_stats(group):
    return {'Gender': group.count()}
#分组统计
groupd = df['Temperature'].groupby([df['Gender']])
temperature_amount = groupd.apply(get_stats).unstack()
print(temperature_amount)
#===============================
Gender        
1           65
2           65

#定义聚合函数,求均值
def get_stats2(group):
    return {'Gender': group.mean()}
#分组统计
groupd = df['Temperature'].groupby([df['Gender']])
temperature_mean = groupd.apply(get_stats2).unstack()
print(temperature_mean)
Gender           
1       98.104615
2       98.393846

#定义聚合函数,求样本方差
def get_stats2(group):
    return {'Gender': group.std()}
#分组统计
groupd = df['Temperature'].groupby([df['Gender']])
temperature_std = groupd.apply(get_stats2).unstack()
print(temperature_std)
Gender          
1       0.698756
2       0.743488

利 用 z 检 验 统 计 量 的 计 算 公 式 z = x 1 ‾ − x 2 ‾ − ( μ 1 − μ 2 ) σ 1 2 n 1 + σ 2 2 n 2 利用z检验统计量的计算公式z=\frac{\overline{x_1}-\overline{x_2}-(\mu_1-\mu_2)}{\sqrt{\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}}} zz=n1σ12+n2σ22 x1x2(μ1μ2)

按 照 假 设 u 1 − u 2 = 0 , x 1 ‾ = 98.1046 , x 2 ‾ = 98.3938 , n 1 = n 2 = 65 , σ 1 = 0.698756 , σ 2 = 0.743488 按照假设u_1-u_2=0,\overline{x_1}=98.1046,\overline{x_2}=98.3938,n_1=n_2=65,\sigma_1=0.698756,\sigma_2=0.743488 u1u2=0,x1=98.1046,x2=98.3938,n1=n2=65,σ1=0.698756,σ2=0.743488

计 算 z = − 0.2892 σ x 1 − x 2 计算z=\frac{-0.2892}{\sigma_{x_1-x_2}} z=σx1x20.2892

σ x 1 − x 2 = 0.00751169 + 0.0085042 = 0.126554 \sigma_{x_1-x_2}=\sqrt{0.00751169+0.0085042}=0.126554 σx1x2=0.00751169+0.0085042 =0.126554

经 计 算 z = − 2.285 , 当 α = 0.05 时 , z α / 2 = 1.96 , 因 此 拒 绝 H 0 , 认 为 两 者 具 有 显 著 差 异 。 经计算z=-2.285,当\alpha=0.05时,z_{\alpha/2}=1.96,因此拒绝H_0,认为两者具有显著差异。 z=2.285,α=0.05zα/2=1.96,H0,

5.体温与心率间的相关性(强?弱?中等?)
假 设 体 温 与 心 率 间 的 关 系 假设体温与心率间的关系

#相关系数
print(df.corr())  #pearson相关系数
print(df.corr('kendall'))  #kendall  tau相关系数
print(df.corr('spearman'))  #spearman秩相关
#显著性检验
print(stats.pearsonr(df['Temperature'],df['HeartRate']))
           Temperature    Gender  HeartRate
Temperature     1.000000  0.198006   0.253656
Gender          0.198006  1.000000   0.055766
HeartRate       0.253656  0.055766   1.000000
             Temperature    Gender  HeartRate
Temperature     1.000000  0.163190   0.186489
Gender          0.163190  1.000000   0.063322
HeartRate       0.186489  0.063322   1.000000
             Temperature    Gender  HeartRate
Temperature     1.000000  0.195231   0.280919
Gender          0.195231  1.000000   0.075927
HeartRate       0.280919  0.075927   1.000000
(0.25365640272076423, 0.003591489250708233)

根据spearman秩相关,即pvalue=0.00359<0.05,可以认为体温与心率间弱相关。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值