伙计们,我一直试图获得高斯拟合某些数据集,这些数据集看起来像是一个扭曲的正态分布.我一直在使用软件来做到这一点.我想知道我是否可以应用迭代算法将这些数据集转换为高斯拟合曲线,原始曲线的标准偏差和平均值是输入.有任何想法吗?
对于一个简单的xy散点图,我可以用R或gnuplot以什么方式应用幂拟合曲线?我有一个包含两列的文件.
我写了一个python函数来获取以下余弦函数的参数:

param = Parameters()
param.add( 'amp', value = amp_guess, min = 0.1 * amp_guess, max = amp_guess )
param.add( 'off', value = off_guess, min = -10, max = 10 )
param.add( 'shift', value = shift_guess[0], min = 0, max = 2 * np.pi, )
fit_values = minimize( self.residual, param, args = ( azi_unique, los_unique ) )
def residual( self, param, azi, data ):
"""
Parameters
----------
Returns
-------
"""
amp = param['amp'].value
off = param['off'].value
shift = param['shift'].value
model = …Run Code Online (Sandbox Code Playgroud) 我的直方图清晰地显示了两个峰.但是,当用双高斯曲线拟合它时,它只显示一个峰值.几乎跟随stackoverflow中显示的每个答案.但未能得到正确的结果.它以前是由我在Fortran的老师完成的,他有两个高峰.我在一次试验中使用leastsq了python scipy.optimize.我也应该提供我的数据吗?这是我的代码.
binss = (max(x) - min(x))/0.05 #0.05 is my bin width
n, bins, patches = plt.hist(x, binss, color = 'grey') #gives the histogram
x_a = []
for item in range(len(bins)-1):
b = (bins[item]+bins[item+1])/2
x_a.append(b)
x_avg = np.array(x_a)
y_real = n
def gauss(x, A, mu, sigma):
gaus = []
for item in range(len(x)):
gaus.append(A*e**(-(x[item]-mu)**2./(2.*sigma**2)))
return np.array(gaus)
A1, A2, m1, m2, sd1, sd2 = [25, 30, 0.3, 0.6, -0.9, -0.9]
#Initial guesses for leastsq
p = [A1, A2, …Run Code Online (Sandbox Code Playgroud) 我试图平滑此数据集并生成带有误差条的单个代表性曲线.获取数据点的方法是通过相当粗略的步骤离散化的.我没有太多的编程经验,但我正在努力学习.我读到高斯滤波器可能是一个不错的选择.任何帮助,将不胜感激.
这是一个示例数据集:
Time (min) Non-Normalized Shrinkage Normalized Shrinkage
200 93 1.021978022
202 92 1.010989011
204 92 1.010989011
206 92 1.010989011
208 92 1.010989011
210 92 1.010989011
212 91 1
214 90 0.989010989
216 90 0.989010989
218 90 0.989010989
220 88 0.967032967
222 88 0.967032967
224 87 0.956043956
226 86 0.945054945
228 86 0.945054945
230 86 0.945054945
232 86 0.945054945
234 86 0.945054945
236 85 0.934065934
238 84 0.923076923
240 83 0.912087912
242 83 0.912087912
244 83 0.912087912
246 82 0.901098901 …Run Code Online (Sandbox Code Playgroud) 我想找出最合适的数据.我做的是循环遍历各种n值并使用公式((y_fit - y_actual)/ y_actual)x 100计算每个p的残差.然后我计算每个n的平均值,然后找出最小残差均值和相应的n值并使用此值拟合.可重现的代码包括:
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
x = np.array([12.4, 18.2, 20.3, 22.9, 27.7, 35.5, 53.9])
y = np.array([1, 50, 60, 70, 80, 90, 100])
y_residual = np.empty(shape=(1, len(y)))
residual_mean = []
n = np.arange(0.01, 10, 0.01)
def fit(x, a, b):
return a * x + b
for i in range (len(n)):
x_fit = 1 / np.log(x) ** n[i]
y_fit = y
fit_a, fit_b = optimize.curve_fit(fit, x_fit, y_fit)[0]
y_fit = …Run Code Online (Sandbox Code Playgroud) espfio<- c( 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20)
sensibilidade <-c( 1.51, 1.49, 1.47, 1.43, 1.35, 1.19, 0.96, 0.85, 0.65, 0.64, 0.58, 0.56, 0.52, 0.52, 0.49, 0.50)
plot(espfio,sensibilidade)
B1 = 1
B2 = 1
B3 = 1
fit1 <- nls(sensibilidade ~ B1*(exp(-exp(-B1-B2*espfio))), start=list(B1=B1,B2=B2,B3=B3))
summary(fit1)
Run Code Online (Sandbox Code Playgroud)
nlsModel中的错误(公式,mf,start,wts):初始参数估计时的奇异梯度矩阵
这是关于从lmfit fit_report()(1)对象提取拟合统计信息的问题
在此 lmfit示例中,返回以下部分输出:
[[Model]]
Model(gaussian)
[[Fit Statistics]]
# function evals = 31
# data points = 101
# variables = 3
chi-square = 3.409
reduced chi-square = 0.035
Akaike info crit = -336.264
Bayesian info crit = -328.418
.
.
.
.
.
.
Run Code Online (Sandbox Code Playgroud)
我试图提取该Fit Statistics部分中的所有数量作为单独的变量。
for key in fit.params:
print(key, "=", fit.params[key].value, "+/-", fit.params[key].stderr)
Run Code Online (Sandbox Code Playgroud)
但是,这仅给出了模型参数。它没有提供拟合统计参数,这也很有用。我似乎在文档中找不到此内容。
有没有类似的方式来提取拟合统计参数(chi-square,reduced chi-square, …
我有一个如下所示的数据..有一个时间和2个数据列
time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24)
data1 = c(10, 8, NA, 3, 2, NA, 6, 8, 9, 7, NA, 3, 1, NA, 5, 7, 11, 10, NA, 5, 3, 5, NA, 8)
data2 = c(25, 20, NA, 7.5, NA,10, 15, NA, 22.5, NA, 15, 7.5, NA, 10, 12.5, 17.5, NA, 25, 17.5,NA, 7.5, 12.5, NA, 20)
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码为data1拟合了正弦曲线.
Data <- data.frame(time,data1,data2) …Run Code Online (Sandbox Code Playgroud) 我想用两个共享相同参数的函数来拟合复杂的数据集.为此我用过
def funcReal(x,a,b,c,d):
return np.real((a + 1j*b)*(np.exp(1j*k*x - kappa1*x) - np.exp(kappa2*x)) + (c + 1j*d)*(np.exp(-1j*k*x - kappa1*x) - np.exp(-kappa2*x)))
def funcImag(x,a,b,c,d):
return np.imag((a + 1j*b)*(np.exp(1j*k*x - kappa1*x) - np.exp(kappa2*x)) + (c + 1j*d)*(np.exp(-1j*k*x - kappa1*x) - np.exp(-kappa2*x)))`
poptReal, pcovReal = curve_fit(funcReal, x, yReal)
poptImag, pcovImag = curve_fit(funcImag, x, yImag)
Run Code Online (Sandbox Code Playgroud)
这funcReal是我的模型的真实部分,funcImag虚部,yReal数据的真实部分和数据yImag的虚部.
但是,两个拟合并没有给出与实部和虚部相同的参数.
我的问题是有一个包或一个方法,以便我可以实现多个数据集和多个函数与共享参数的多配合?
curve-fitting ×10
python ×5
numpy ×3
r ×3
gaussian ×2
scipy ×2
algorithm ×1
gnuplot ×1
lmfit ×1
matlab ×1
na ×1
optimization ×1
python-2.7 ×1
statistics ×1