- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些数据想要对其进行拟合,然后执行卡方检验以获得拟合优度。很明显,我应用的拟合不太适合数据(这本身不是问题,我不一定期望它如此),但返回的值 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 的另一个输出显然是错误的
最佳答案
您只适合两个参数:A
和 C
,从而强制使用相位和周期。
如果您也适合该阶段和时期,那么您会更适合:
同样在这种情况下,我的 p 值为 1.0。
当 x0
和 t0
固定时,您的 p 值为 1.0 的原因是您的结果是与这些结果最匹配的结果 x0
和 t0
的值。强制使用这些值很可能会产生整体更差的拟合。作为比较,在 x0
和 t0
免费的情况下,我得到
A = -3.45840427e-02
C = 2.65142203e-01
x0 = 1.88838771e+02
t0 = 2.61112538e+02
将其与 t0 = 365.25
和 x0 = 152.5
进行比较。
当然,您想要解决一些(物理)原因,例如t0
到一年,但在这种情况下,你不用担心情节看起来很糟糕;您的 p 值仍然考虑到这一点。
然而,更可能的原因是您还忘记了 scipy.stats.chisquare
中的 ddof
参数。默认值为 ddof=0,这不是您所拥有的:在您的情况下,它是 len(rate) - 2,在我上面的情况下,它将是 len(速率) - 4
.
对于您的拟合(t0
和 x0
固定),结果为 p = 0.902
。在所有参数均自由的情况下,结果为 0.999887(即再次为 1)。
奖励:当我将周期 t0
修正为 365.25 时的输出:
A = -4.05218922e-02
C = 2.74772524e-01
x0 = 8.69008279e+01
p = 0.997
和绘制的拟合:
关于python - scipy.stats.chisquare 没有给出输入数据预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618534/
我正在尝试使用 scipy.stats.chisquare。我已经构建了一个玩具示例: In [1]: import scipy.stats as sps In [2]: import numpy a
有人可以帮我处理 scipy.stats.chisquare 吗?我没有统计/数学背景,我正在使用来自 https://en.wikipedia.org/wiki/Chi-squared_test 的
我需要通过卡方获得 p 值。我的程序是: from scipy.stats import chisquare c = chisquare([10,4,7,5],ddof=[0,1,2,3]) prin
我有一些数据想要对其进行拟合,然后执行卡方检验以获得拟合优度。很明显,我应用的拟合不太适合数据(这本身不是问题,我不一定期望它如此),但返回的值 scipy.stats.chisquare 会表明近乎
我在每个类别中都有这样的预期和频率,如下所示: 它们看起来很相似,但卡方检验并不这么认为: stats.chisquare(city_ans.answered, city_ans.sent) # Po
UCLA 有这个很棒的统计测试网站 https://stats.idre.ucla.edu/r/whatstat/what-statistical-analysis-should-i-usestati
我正在使用 scipy.stats.chi2_contingency 方法来获取卡方统计数据。我们需要传递频率表,即列联表作为参数。但是我有一个特征向量,想自动生成频率表。我们有这样的功能吗?我目前是
我在窗口 10 下使用 spyder 3.1.3 和 python 3.6.8,scipy 1.2.1。我想获取 chisquare 值,但注意到返回了负值。这是为什么? from scipy.sta
我有以下代码(基于示例 here ),但它不起作用: [...] def my_analyzer(s): return s.split() my_vectorizer = CountVecto
非常感谢您对此问题的帮助。看起来应该很简单。 我在名为 Totals 的 pandas 数据框中有两列:Totals['Connections'] 和 Totals['Expected']。 Tota
看完recent blog post关于泊松分布的应用,我尝试使用 Python 的“scipy.stats”模块以及 Excel/LibreOffice“POISSON”和“CHITEST”函数重现
看完recent blog post关于泊松分布的应用,我尝试使用 Python 的“scipy.stats”模块以及 Excel/LibreOffice“POISSON”和“CHITEST”函数重现
我是一名优秀的程序员,十分优秀!