scipy.stats.chisquare没有给出输入数据的预期结果

问题描述 投票:1回答:1

我有一些数据,我想应用适合,然后执行卡方检验,以获得适合的良好。很明显,我正在应用的拟合不能很好地拟合数据(这本身不是问题,我不一定期望它)但是scipy.stats.chisquare返回的值会建议几乎完美的契合,这显然是错误的。

到目前为止我所做的是定义一个函数来描述我正在应用的拟合(正弦拟合),然后使用scipy.optimize.curve_fit通过从popt获取fit参数然后在其中使用它们来将此函数拟合到我的数据中。先前定义的函数以生成拟合。

然后,我将测量数据和拟合数据放入scipy.stats.chisquare,以试图获得拟合,但是返回的p值为1.0,这是不对的。我的假设是在scipy.stats.chisquare中使用scipy.optimize.curve_fit生成的值存在一些问题,但如果是这种情况我不明白为什么这是一个问题或如何解决它。

我将测量数据放在两个列表中,我称之为“时间”和“费率”

import numpy as np
import math
%matplotlib inline
import matplotlib.pyplot as plt
from statistics import stdev
import scipy


time =[309.6666666666667, 326.3333333333333, 334.6666666666667, 399.9166666666667, 416.5833333333333, 433.25, 449.91666666666663, 466.58333333333337, 483.25, 499.91666666666663,]

rate = [0.298168, 0.29317, 0.306496, 0.249861, 0.241532, 0.241532, 0.206552, 0.249861, 0.253193, 0.239867]

def oscillation(t,A,C):
    return(A*np.cos((2*np.pi*(t-x0))/(t0))+C)
t0 = 365.25
A = 0.35/2
x0 = 152.5
C = 0.475

popt, pcov = curve_fit(oscillation, time, rate, p0=[A,C])


rate_fit = []

for t in time:
    r = oscillation(t, popt[0],popt[1])
    rate_fit.append(r)

print(scipy.stats.chisquare(rate, f_exp=rate_fit))

plt.plot(time,rate, '.')
plt.plot(time,rate_fit,'--')

上面的输出是一个拟合,看起来在绘制时看起来最适合数据,但显然不是完美的拟合,使p值的其他输出为0.99999999999458533这显然是错误的

python scipy chi-squared
1个回答
0
投票

你只适合两个参数,AC,因此强迫相位和周期。 如果你也适合阶段和阶段,你会得到更好的契合:

enter image description here

同样在这种情况下,我的p值是1.0。

x0t0被修复时,你的p值为1.0的原因是你的结果是x0t0这些值的最佳拟合。强迫这些价值观,很可能会产生整体更糟糕的情况。为了比较,我得到x0t0免费

A = -3.45840427e-02
C = 2.65142203e-01
x0 = 1.88838771e+02
t0 = 2.61112538e+02

t0 = 365.25x0 = 152.5相比。

当然,有(物理)原因要修复,例如t0到一年,但在这种情况下,你应该更少担心情节看起来很糟糕;你的p值仍然考虑到了这一点。

然而,更可能的原因是你也忘记了ddof中的scipy.stats.chisquare参数。它的默认值是ddof=0,这不是你所拥有的:在你的情况下它是len(rate) - 2,在我的上述情况下,它将是len(rate) - 4。 为了你的健康(t0x0固定),这导致p = 0.902。在所有参数都空闲的情况下,它产生0.999887(即再次为1)。


奖励:当我将期间t0修复为365.25时的输出:

A = -4.05218922e-02
C = 2.74772524e-01
x0 = 8.69008279e+01

p = 0.997

和绘制的拟合:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.