只是试图找出一个R - > Python的东西:为什么这两个项目没有给出相同的结果?
计算样本数据的95%置信区间,均值= 65,s = 22,n = 121。
R:tsum.test(n.x=121, mean.x=65, s.x=22)
给出了61.04014 68.95986
的95%置信区间
Python:stats.norm.interval(alpha=0.95, loc=65, scale=22/np.sqrt(121))
给出了(61.080072030919894, 68.9199279690801)
的95%置信区间
我认为这些应该是相同的结果,或者我没有为R的tsum.test
使用适当的等效Python函数?
经过进一步调查,我可以看到我错误地假设使用stats.norm
。
scipy.stats.t
允许R的tsum.test
自动执行的自由度计算:
stats.t.interval(alpha = 0.95, df = 121-1, loc = 65, scale= 22/np.sqrt(121))
返回(61.04013918989445, 68.95986081010555)
它以小数点后5位回合tsum.test
在R中给出的答案
我正在使用的一般功能,如果有用,是这样的:
def get_conf_interval_from_sample(n, mean, sigma, alpha = 0.95) :
"""Get confidence interval from sample data with sample of n, mean, sigma, where df = n-1
Equivalent to getting confidence interval using t.test / tsum.test in R"""
df = n-1
scale = sigma / np.sqrt(n)
return stats.t.interval(alpha=alpha, df=df, loc=mean, scale=scale)````