我有一个1维数据数组:
a = np.array([1,2,3,4,4,4,5,5,5,5,4,4,4,6,7,8])
Run Code Online (Sandbox Code Playgroud)
我希望获得68%置信区间(即:1西格玛).
在第一个评论这个回答指出,这可以实现使用scipy.stats.norm.interval从scipy.stats.norm功能,通过:
from scipy import stats
import numpy as np
mean, sigma = np.mean(a), np.std(a)
conf_int = stats.norm.interval(0.68, loc=mean,
scale=sigma)
Run Code Online (Sandbox Code Playgroud)
但是这篇文章中的评论指出,获得置信区间的实际正确方法是:
conf_int = stats.norm.interval(0.68, loc=mean,
scale=sigma / np.sqrt(len(a)))
Run Code Online (Sandbox Code Playgroud)
也就是说,sigma除以样本大小的平方根:np.sqrt(len(a)).
问题是:哪个版本是正确的?
这些天我花了一些时间解决一个问题。我有一组数据:
y = f(t),其中 y 是非常小的浓度 (10^-7),t 是秒。t 从 0 到 12000 左右不等。
测量遵循既定模型:
y = Vs * t - ((Vs - Vi) * (1 - np.exp(-k * t)) / k)
Run Code Online (Sandbox Code Playgroud)
我需要找到 Vs、Vi 和 k。所以我使用了curve_fit,它返回了最佳拟合参数,并绘制了曲线。
然后我使用了一个类似的模型:
y = (Vs * t/3600 - ((Vs - Vi) * (1 - np.exp(-k * t/3600)) / k)) * 10**7
Run Code Online (Sandbox Code Playgroud)
通过这样做,t 是一个小时数,而 y 是一个介于 0 和大约 10 之间的数字。返回的参数当然是不同的。但是当我绘制每条曲线时,我得到的是:
http://i.imgur.com/XLa4LtL.png
绿色拟合是第一个模型,蓝色拟合是“标准化”模型。红点是实验值。
拟合曲线不同。我认为这不是预期的,我不明白为什么。如果数字“合理”,计算是否更准确?