我想找出遵循正态分布的样本的置信区间。

为了测试代码,我首先创建一个示例,然后尝试在Jupyter笔记本中绘制置信区间的图片[python内核]

%matplotlib notebook

import pandas as pd
import numpy as np
import statsmodels.stats.api as sms
import matplotlib.pyplot as plt

s= np.random.normal(0,1,2000)
# s= range(10,14)                   <---this sample has the right CI
# s = (0,0,1,1,1,1,1,2)             <---this sample has the right CI

# confidence interval
# I think this is the fucniton I misunderstand
ci=sms.DescrStatsW(s).tconfint_mean()

plt.figure()
_ = plt.hist(s,  bins=100)

# cnfidence interval left line
one_x12, one_y12 = [ci[0], ci[0]], [0, 20]
# cnfidence interval right line
two_x12, two_y12 = [ci[1], ci[1]], [0, 20]

plt.plot(one_x12, one_y12, two_x12, two_y12, marker = 'o')


绿线和黄线假定为置信区间。但是他们的位置不正确。

我可能会误解此功能:

sms.DescrStatsW(s).tconfint_mean()


但是文件说这个函数会返回置信区间。

python - 正态分布样本的置信区间-LMLPHP

这是我期望的数字:

%matplotlib notebook

import pandas as pd
import numpy as np
import statsmodels.stats.api as sms
import matplotlib.pyplot as plt

s= np.random.normal(0,1,2000)


plt.figure()
_ = plt.hist(s,  bins=100)
# cnfidence interval left line
one_x12, one_y12 = [np.std(s, axis=0) * -1.96, np.std(s, axis=0) * -1.96], [0, 20]
# cnfidence interval right line
two_x12, two_y12 = [np.std(s, axis=0) * 1.96, np.std(s, axis=0) * 1.96], [0, 20]

plt.plot(one_x12, one_y12, two_x12, two_y12, marker = 'o')


python - 正态分布样本的置信区间-LMLPHP

最佳答案

问题看起来像“那里有什么函数来计算置信区间”。

由于给定的数据是正态分布的,因此可以简单地通过

ci = scipy.stats.norm.interval(0.95, loc=0, scale=1)


alpha值0.95,它指定了95个百分点,因为公式中给出了平均值的相应1.96标准偏差。
https://en.wikipedia.org/wiki/1.96

loc=0指定平均值,scale=1用于sigma。
https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule

您可以查看@bogatron的答案以获取有关Compute a confidence interval from sample data的更多详细信息



以下代码生成所需的绘图。我为可重复性播下了随机数。

import pandas as pd
import numpy as np
import statsmodels.stats.api as sms
import matplotlib.pyplot as plt
import scipy

s = np.random.seed(100)
s= np.random.normal(0,1,2000)

plt.figure()
_ = plt.hist(s,  bins=100)

sigma=1
mean=0
ci = scipy.stats.norm.interval(0.95, loc=mean, scale=sigma)
print(ci)

# cnfidence interval left line
one_x12, one_y12 = [ci[0],ci[0]], [0, 20]
# cnfidence interval right line
two_x12, two_y12 = [ci[1],ci[1]], [0, 20]

plt.plot(one_x12, one_y12, two_x12, two_y12, marker = 'o')


ci返回

(-1.959963984540054, 1.959963984540054)


这是情节。

python - 正态分布样本的置信区间-LMLPHP

关于python - 正态分布样本的置信区间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49769546/

10-12 18:35