统计学第九周:参数估计python实现

统计学第九周
  1. 参数估计复习

    参数估计,根据从总体中随机取样获得样本,根据取样样本来估计总体分布中参数的过程。

    方法:估计形式上分:点估计与区间估计;估计的方法有矩法估计,最小二乘法估计,似然估计,贝叶斯估计等等

    问题一般有:

    🔽未知参数的估计量

    🔽在一定置信度下求解估计量的精度

  2. 实战
    2.1

    #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-week7_data.xlsx')
    print(df.head())
    
    age = df['Age']
    #print(age.mean())
    #29.64209269662921
    
    #抽取100个样本
    age_sam = age.sample(100)
    print(age_sam.describe())
    
    count    100.000000
    mean      30.635800
    std       15.160597
    min        0.750000
    25%       22.000000
    50%       28.000000
    75%       41.500000
    max       66.000000
    Name: Age, dtype: float64
    
    2.2
    #计算置信区间
    #1)、pandas.std() 默认是除以n-1 的,即是无偏的,如果想和numpy.std() 一样有偏,需要加上参数ddof=0 ,即pandas.std(ddof=0) ;DataFrame的describe()中就包含有std();
    #2)、 numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1;
    
    #正态分布下的置信区间
    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(age)
    
    年龄在95%的置信区间维
    (1.2364661816394822, 58.04771921161894)
    

    注:scipy.stats.norm.interval

    # 求正态分布95%置信区间
    CI = stats.norm.interval(0.95, loc=mean, scale=std)
    # 随机生成1000个样本
    norm_samples = stats.norm.rvs(loc=mean, scale=std, size=1000)
    # 求gamma置信区间 gamma(a, b)
    CI_gamma = stats.gamma.interval(0.95, a, scale=1/b)
    # 随机生成1000个样本
    gamma_samples = stats.gamma.rvs(a, scale=1/b, size=1000)
    此处代码原文链接:https://blog.csdn.net/weixin_41947081/article/details/80954267
    

    可参考:

    https://www.zybuluo.com/Channelchan/note/662919

    https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html 正态分布官网

    #T分布
    #T分布下的置信区间
    def ttest_conf(data,confidence=0.95):
        sample_mean = np.mean(data)
        sample_std = np.std(data,ddof=1)
        sample_size = len(data)
        conf_interval = stats.t.interval(confidence,df = (sample_size-1),loc=sample_mean,scale=sample_std)
        print(conf_interval)
    
    ttest_conf(age)
    
    (1.1880290866314134, 58.09615630662701)
    
    2.3
    #重复抽取数据1000次,计算正态分布下的95%置信区间范围
    scale_means = []
    for _ in range(1000):#  for   _ in  range(n):  _是占位符,表示不在意变量的值,只是循环n次
        scale_sample = age.sample(100,replace=True)
        mean = scale_sample.mean()
        scale_means.append(mean)
    #print(scale_means)
    print(norm_conf(scale_means))
    
    #(26.683871851503763, 32.56412034849624)
    
    print(ttest_conf(scale_means))
    #t分布下
    (26.82880423989253, 32.40856276010748)
    
    
    2.4
    #绘制数据sbn.set_palette("hls")#设置所有图颜色,hls色彩空间
    sbn.distplot(scale_means,color="r",bins=10,kde=True)
    plt.title('Age')
    plt.xlim(25,35)
    plt.grid(True)
    plt.show()
    

在这里插入图片描述
本文参考自:
https://blog.csdn.net/qq_43315928/article/details/103658733,其中主要代码来自于该链接。

问题:在计算置信区间时,已知方差和未知方差,在计算时是否需要处以根号n,?

numpy.std() 样本方差,默认就是除以n的,而方差已知则是在计算时需要转化,再处以n,确实是对的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值