python参数估计_参数估计的python代码实现

参数估计

参数估计(parameter estimation)

统计推断的一种。根据从总体中抽取的随机样本来估计总体分布中未知参数的过程。从估计形式看,区分为点估计与区间估计:从构造估计量的方法讲,有矩法估计、最小二乘估计、似然估计、贝叶斯估计等。要处理两个问题:

(1)求出未知参数的估计量;

(2)在一定信度(可靠程度)下指出所求的估计量的精度。信度一般用概率表示,如可信程度为95%;精度用估计量与被估参数(或待估参数)之间的接近程度或误差来度量。

导入数据对数据进行概览

导入数据并数据做预览

import pandas as pd

import numpy as np

#from scipy import stats

import scipy as sc

data1 = pd.read_csv(r'D:\univ.csv',usecols= [2],encoding='gbk')

data=data1.sample(80)

data.describe()

总分 count 80.000000 mean 68.870375 std 7.078940 min 63.290000 25% 64.485000 50% 65.835000 75% 71.692500 max 100.000000

data.mean(),data.count()

(总分 68.69075

dtype: float64, 总分 80

dtype: int64)

由此可以看到,样本中共有100个数据,均值为68.5061

对数据做抽样

对样本中的100个数据抽取90个样本,可以进行多次测试,均值总在68.5061的上下一定范围内波动:

# 抽取100个样本

data_sam = data.sample(10)

x1 = data_sam.mean()

data_sam.describe()

总分 count 10.000000 mean 67.704000 std 6.024788 min 63.370000 25% 64.845000 50% 65.255000 75% 66.367500 max 82.430000

计算计算置信区间

关于pandas.std()与numpy.std()pandas.std() 默认是除以n-1 的,即是无偏的,如果想和numpy.std() 一样有偏,需要加上参数ddof=0 ,即pandas.std(ddof=0) ;DataFrame的describe()中就包含有std();

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_intveral=np.array(sc.stats.norm.interval(confidence, loc=sample_mean,scale=sample_std))

return(conf_intveral)

norm_conf(data)

array([[50.92509413],

[90.9882392 ]])

以上通过scipy.stats.norm_conf函数,通过输入置信度、均值、标准差来计算执行区间,并以制作了一个函数,后续可以调用。

计算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_intveral=np.array(sc.stats.t.interval(confidence, df = (sample_size-1),loc=sample_mean,scale=sample_std))

return(conf_intveral)

ttest_conf(data)

array([[54.78009782],

[82.96065218]])

重复抽样

scale_means = []

for _ in range(1000):

scale_sample = data.sample(100, replace=True)

mean = scale_sample.mean()

scale_means.append(mean)

norm_conf(scale_means)

array([67.4901937, 70.2341785])

ttest_conf(scale_means)

array([67.30511657, 70.04288823])

data.describe()

总分 count 80.000000 mean 68.870375 std 7.078940 min 63.290000 25% 64.485000 50% 65.835000 75% 71.692500 max 100.000000

绘制数据的分布图

import seaborn as sns

from matplotlib import pyplot as plt

sns.set_palette("hls") #设置所有图的颜色,使用hls色彩空间

sns.distplot(scale_means,color="r",bins=10,kde=True)

plt.title('data')

#plt.xlim(0,100)

plt.grid(True)

plt.show()

通过手动计算和绘制图形,让我们对参数估计有一个更加深刻的了解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值