gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:46 25 4
gpt4 key购买 nike

我有一些数据想要对其进行拟合,然后执行卡方检验以获得拟合优度。很明显,我应用的拟合不太适合数据(这本身不是问题,我不一定期望它如此),但返回的值 scipy.stats.chisquare 会表明近乎完美的配合显然是错误的。

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

然后,我将测量数据和拟合数据放入 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 的另一个输出显然是错误的

最佳答案

您只适合两个参数: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 值仍然考虑到这一点。

然而,更可能的原因是您还忘记了 scipy.stats.chisquare 中的 ddof 参数。默认值为 ddof=0,这不是您所拥有的:在您的情况下,它是 len(rate) - 2,在我上面的情况下,它将是 len(速率) - 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

关于python - scipy.stats.chisquare 没有给出输入数据预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com