问题描述
我知道这里已经有几个类似的问题,但没有一个能真正回答我的特定问题。
我有一个单独的值数组(图片中的黑色正方形)。 现在,我想检查一下黑色正方形是否与红线显着不同,这是我通过将指数方程拟合到数据而创建的。 拟合是这样创建的:
def exponential_equation(x,k,c):
return np.exp(-(x - c) / k)
def fit_exp(x,y):
popt,pcov = curve_fit(exponential_equation,x,y,p0=[0.1,0.1])
k = popt[0]
c = popt[1]
return k,c
k,c = fit_exp(x_array,y_array)
如您所见,我使用的指数方程式与“标准”指数方程式略有不同,因此运行pval = scipy.stats.kstest(y_array,"expon")[1]
之类的方法无效。
我虽然可以使用类似于pval = scipy.stats.kstest(y_array,exponential_equation,args=(k,c)[1]
的方法,但是它也会返回2.68e-104
的p值,并且通过评估眼睛的契合度,看来pvalue应该大于0.05。
如果有人可以告诉我我做错了什么,或者可以指出正确的方向,我会很高兴的!
干杯!
解决方法
万一某人稍后再查找,这就是我最终要做的,我认为结果看起来不错:
def exponential_equation(x,k,c):
return np.exp(-(x - c) / k)
def cdf_exp(b,c):
max_cdf = quad(exponential_equation,np.inf,args=(k,c))[0]
return [quad(exponential_equation,i,c))[0] / max_cdf for i in b]
k = 0.2
c = 0.01
pvalue = scipy.stats.kstest(test_array,cdf_exp,c))[1]
万一有人发现错误,请告诉我,但我很确定这可以满足我的要求。