我对stat很新 . 我想知道有没有办法找到非线性函数(高斯,电力,对数物流)的良好拟合分数?我尝试在scipy中使用曲线拟合函数来使我的数据适合模型 . 我知道如果是线性回归,我们可以找到R平方 . 但是,如果我的数据适合所有这些功能,我真的不知道如何进行测量 . 我做了一些研究,有人用伪R平方,有些用过Chi-quare . 这是我运行高斯的代码,并尝试找到合适的 .

# X,Y  -> both are in array

x = ar(df['r'].values)
y = ar(df['D'].values)

# Parameters for Gaussian
n = len(x)
mean = sum(x*yn)/n
sigma = math.sqrt(sum(y*(x-mean)**2)/n)

def gaussian(x, a, x0, sigma):
    return (a/(sigma*math.sqrt(2 * 3.14159265)))*exp(-(x-x0)**2/(2*sigma**2))

# Curve fit from Scipy
popt, pcov = curve_fit(gaussian, x, yn, p0=[1, mean, sigma])

# First option :Finding best fit from Chi-square
p1 = popt[0]
p2 = popt[1]
p3 = popt[2]
chisqr = sum((yn- guassian(x,p1,p2,p3)**2/sigma**2)
dof = len(yn) - 2
GOF = 1 - chi2.cdf(chisqr,dof)

#Second option : R^2 = SS_reg/SS_tot
y_fit = [gaus(xi, *popt) for xi in x]
y_bar = np.sum(yn)/len(y)
ssreg = np.sum([ (yihat - ybar)**2 for yihat in y_fit])
sstot = np.sum([ (yi - ybar)**2 for yi in yn])
results = ssreg / sstot

另一个问题:我的模型是否正确?

Gaussian: 
    (a/(sigma*math.sqrt(2 * 3.14159265)))*exp(-(x-x0)**2/(2*sigma**2))

    Power:
    x*exp(-b)

    Exponential:
    exp(-b*x)

    Logarithm
    :exp(-x) / (1+exp(-x))**2

这一切都正确吗?我得到了低GOF分数,其中curve_fit的结果图看起来非常合适 . 非常感谢您的参与 . 万分感激