找到非线性模型(高斯,幂,指数和对数逻辑)的良好拟合度量

时间:2015-12-05 09:17:39

标签: python numpy scipy curve-fitting stat

我对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的结果图看起来非常合适。非常感谢您的参与。真的很感激

0 个答案:

没有答案