数理统计——推断统计参数估计与python实现

前言

本节知识要点:推断统计分析——参数估计

目标:
熟知点估计与区间估计
中心极限定理
正态分布及其特性
python实现与分析思路是重点

一、基本概念

1.总体、样本、个体(略)

2.点估计、区间估计

3.推断统计概念

推断统计即用样本的数据去推断总体数量的特征,是以概率形式进行推断的,因为总体往往是未知的。

二、代码实现

1.点估计

使用鸢尾花样本长度的均值来估计总体鸢尾花的长度的情况。因此我们需要求到样本的长度均值。
#点估计

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.datasets import load_iris
import warnings
sns.set(style="darkgrid")
plt.rcParams["font.family"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
warnings.filterwarnings("ignore")
iris=load_iris()
data=np.concatenate([iris.data,iris.target.reshape(-1,1)],axis=1)
data=pd.DataFrame(data,columns=["sepal_length","sepal_width","petal_length","petal_width","type"])
print(data["petal_length"].mean())

输出:
3.7580000000000027

点估计很准确,但是容易受到随机抽样的影响,导致估计的精确度不高。

2.区间估计

区间估计是指使用一个置信区间和置信度,表示总体参数有多大概率(置信度)会落在该区间(置信区间)。
重要概念:
中心极限定理;
标准差(包括总体和样本的);
标准误差(样本均值的标准差);
正态分布的特性;

代码实现中心极限定理:

#中心极限定理(构建总体——构建抽样样本数组——计算样本均值分布的、标准差——可视化)

#定义总体的数据情况
all_1=np.random.normal(loc=30,scale=80,size=10000)   #loc——均值;  scale—标准差  size—样本容量

mean_arr=np.zeros(1000)  #这里用来创建一个存放每次抽样(每个样本)的均值的一个数组;#np.zeros()返回一个给定形状和类型的新数组,用0填充

for i in range(len(mean_arr)):   #循环1000次,获取1000个样本:
    
    mean_arr[i]=np.random.choice(all_1,size=64,replace=False).mean()#表示进行随机抽样,计算每个抽取的样本的均值并放入数组中.size是样本容量。replace是否为放回抽样,默认为True,即放回。
    
print("样本均值构成的正态分布的均值:",mean_arr.mean())#样本均值构成正态分布,该正态分布的均值等于总体均值,
print("样本均值构成的正态分布的标准误差:",mean_arr.std())#其标准差(标准误)也是总体的标准差/根号n
print("偏度:",pd.Series(mean_arr).skew())
sns.distplot(mean_arr)

输出:
样本均值构成的正态分布的均值: 29.688790473508583
样本均值构成的正态分布的标准误差: 10.00221115017939
偏度: 0.019632037828777406

输出可视化图形:
在这里插入图片描述
代码实现正态分布特性1——看标准差与概率的关系

#定义标准差
scale=50 
#定义数据
x=np.random.normal(0,scale,size=100000)
#定义标准差的倍数,倍数从1到3:
for times in range(1,4):
    y=x[(x>-times*scale)&(x<times*scale)]
    print(f"{times}倍标准差:")
    print(f"{len(y)*100/len(x)}%")

输出:
1倍标准差:
68.24%
2倍标准差:
95.417%
3倍标准差:
99.721%

样本均值有95%的概率落在正负1.96倍标准差之间。
用代码看一下效果图:

#使用随机数生成总体均值,其值未知。
mean=np.random.randint(-10000,10000)
#定义总体标准差
std=50 
#定义样本容量:
n=50 
#随机生成总体数量:
all_=np.random.normal(loc=mean,scale=std,size=10000)
#从总体中抽取若干个个体,构成一个样本
sample=np.random.choice(all_,size=n,replace=False)
sample_mean=sample.mean()
print("总体的均值:",mean)
print("一次抽样的样本均值:",sample_mean)
plt.plot(mean,0,marker="*",color="orange",ms=15,label="总体均值")
plt.plot(sample_mean,0,marker="o",color="r",label="样本均值")
#计算标准误差
se=std/np.sqrt(n)
min_=sample_mean-1.96*se 
max_=sample_mean+1.96*se 
print("置信区间(95%置信度):",(min_,max_))
plt.hlines(0,xmin=min_,xmax=max_,colors="b",label="置信区间")
plt.axvline(min_,0.4,0.6,color="r",ls="--",label="左边界")
plt.axvline(max_,0.4,0.6,color="g",ls="--",label="右边界")
plt.legend()

输出:
总体的均值: 1775
一次抽样的样本均值: 1769.8384490767182
置信区间(95%置信度): (1755.979156165462, 1783.6977419879745)

以及可视化图形:

在这里插入图片描述
表示这个过程太复杂了,真不是我这种菜狗能做的出来的。

三、作业

作业1——1.经过大量长期统计,A公司商品日均生产量为50,标准差为15,公司领导对最近半个月(15天)的生产量进行突击检查,请问:
. 如果最近半个月日均产量为45,是否可能存在消极变数?例如,机器老化,员工怠工等.
. 如果最近半个月日均生产量为59, 是否可能存在积极改进?例如提高生产效率,加大人力投入等

代码实现:

import numpy as np 
sample_mean=45 #当样本均值为45时
std=15#总体标准差
n=15 #最近15天,样本容量
se=std/np.sqrt(n)#计算样本的标准误
min_=sample_mean-1.96*se  
max_=sample_mean+1.96*se 
print("置信区间(95%置信度):",(min_,max_))
#由于总体均值50在这个区间,所以95%的置信度认为没有存在消极变数

sample_mean=59 #当样本均值为59时
std=15#总体标准差
n=15 #最近15天,样本容量
se=std/np.sqrt(n)#计算样本的标准误
min_=sample_mean-1.96*se  
max_=sample_mean+1.96*se 
print("置信区间(95%置信度):",(min_,max_))
#由于总体均值50没有落在这个区间,所以95%的置信度可以认为确实有所改进

输出:
置信区间(95%置信度) (37.408952641433466, 52.591047358566534)
置信区间(95%置信度) (51.408952641433466, 66.59104735856654)

作业2——编写程序,尝试计算当正态分布覆盖99%数据时,标准差大概是多少

import numpy as np
#定义标准差
scale=50
#定义数据
x=np.random.normal(0,scale,size=100000)
#定义标准差的倍数,倍数从1到3:
for times in np.arange(2,3,0.01):
    #保留两位小数:
    times=round(times,2)
#求出覆盖99%的时刻,输出标准差值,停止循环:
    y=len(x[(x>-times*scale)&(x<times*scale)])*100/len(x)
    if y>=99:
        print(times)
        break

输出:2.58

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值