python - Python中样本均值的置信区间(不同于手动)
问题描述
我正在尝试为研讨会的介绍性统计创建一些材料。上面的代码计算了一个 95% 的置信区间来估计平均值,但结果与 Python 中实现的结果不同。我的数学/代码有问题吗?谢谢。
编辑:
数据是从这里采样的
import pandas as pd
import numpy as np
x = np.random.normal(60000,15000,200)
income = pd.DataFrame()
income = pd.DataFrame()
income['Data Scientist'] = x
# Manual Implementation
sample_mean = income['Data Scientist'].mean()
sample_std = income['Data Scientist'].std()
standard_error = sample_std / (np.sqrt(income.shape[0]))
print('Mean',sample_mean)
print('Std',sample_std)
print('Standard Error',standard_error)
print('(',sample_mean-2*standard_error,',',sample_mean+2*standard_error,')')
# Python Library
import scipy.stats as st
se = st.sem(income['Data Scientist'])
a = st.t.interval(0.95, len(income['Data Scientist'])-1, loc=sample_mean, scale=se)
print(a)
print('Standard Error from this code block',se)
解决方案
你有2个错误。
首先,您使用 2 作为 CI 的乘数。更准确的值为 1.96。“2”只是一个方便的估计。这使您手动生成的 CI 太胖了。
其次,您将正态分布与 t 分布进行比较。这可能不会造成超过十进制的差异,因为您的 t-dist 有 199 个自由度,这基本上是正常的。
下面是 1.96 的 z 分数和 CI 的计算以及与标准分布与 t 的逐一比较。
In [45]: st.norm.cdf(1.96)
Out[45]: 0.9750021048517795
In [46]: print('(',sample_mean-1.96*standard_error,',',sample_mean+1.96*standard_error,')')
( 57558.007862202685 , 61510.37559873406 )
In [47]: st.norm.interval(0.95, loc=sample_mean, scale=se)
Out[47]: (57558.044175045005, 61510.33928589174)
推荐阅读
- c++ - 多态中的函数对象
- android - Androidx CardView 未在所有设备中按预期显示圆形图像
- postgresql - MULTILINESTRING 附近的 rgeo 点
- php - WordPress主页更改不起作用
- python - “无法找到用于 ipykernel 启动的内核规范”错误在我在虚拟工作室上运行时发生
- javascript - 邮递员在使用 GET 请求时返回空
- javascript - 如何在我的 AJAX 调用中恢复和传递多个 php 变量
- android - WorkManager 现有工作策略 APPEND_OR_REPLACE 未按预期运行
- php - MySQL 使用正常查询返回奇怪的结果
- c - 在 c 中使用括号