在使用 scipy.optimize.curve_fit() 之后,我已经阅读了有关手动计算 R 平方值的相关文章。但是,当他们的函数遵循幂律 (f(x) = a*x^b) 时,他们会计算 R 平方值。我正在尝试做同样的事情,但得到负的 R 平方值。
这是我的代码:
def powerlaw(x, a, b):
'''Generic power law function.'''
return a * x**b
X = s_lt[4:] # independent variable (Pandas series)
Y = s_lm[4:] # dependent variable (Pandas series)
popt, pcov = curve_fit(powerlaw, X, Y)
residuals = Y - powerlaw(X, *popt)
ss_res = np.sum(residuals**2) # residual sum of squares
ss_tot = np.sum((Y-np.mean(Y))**2) # total sum of squares
r_squared = 1 - (ss_res / ss_tot) # r-squared value
print("R-squared of power-law fit = ", str(r_squared))
我的 R 平方值为 -0.057....
据我了解,对非线性函数使用 R 平方值并不好,但由于过度拟合,我希望得到比线性模型高得多的 R 平方值。还有什么问题吗?