我正在进行统计分析并需要置信区间,我假设正态分布值,因此使用T分布作为区间。
我找到的解决方案使用scipy.stats.sem( data )
或ss.t.fit( data, len(data)-1 )
作为scale
- 参数的来源。完整的例子:
import numpy as np, scipy.stats as ss
# sample size
sample = 30
# data generate
dist = ss.norm( loc=100, scale=20 )
data = dist.rvs( size=sample )
# degrees of freedom
df = len(data)-1
# Using sem
loc, scale = np.mean(data), ss.sem(data)
print( ss.t.ppf(0.95, df=df, scale=scale) )
# Using fit
params = ss.t.fit( data, df )
loc, scale = params[-2], params[-1]
print( ss.t.ppf(0.95, df=df, scale=scale) )
我希望两种解决方案都能正常工作,前者只是更有效率。但是,输出看起来像:
6.56521148383
25.8184505101
有什么区别?
如果我使用来自dist
的参数绘制原始ss.t.fit
与分布的对比,那么它看起来是正确的。