如何获得双高斯拟合中每个高斯的百分比?
How to get the percentage of each Gaussian in a double Gaussian fit?
我正在使用 scipy.optimize.curve_fit 对我的数据进行双高斯拟合。
import scipy
from scipy.optimize import curve_fit
def gaussian(x, mu, sigma, A):
return A*np.exp(-(x-mu)**2/2/sigma**2)
def bimodal(x, mu1, sigma1, A1, mu2, sigma2, A2):
return gaussian(x, mu1, sigma1, A1)+gaussian(x, mu2, sigma2, A2)
def fit_gaussian(n_bins, data):
bin_heights, bin_borders = np.histogram(np.array(data), bins=n_bins, density=True)
bin_centers = bin_borders[:-1] + np.diff(bin_borders) / 2
popt, pcov = scipy.optimize.curve_fit(bimodal, xdata=bin_centers, ydata=bin_heights)
return bin_borders, popt
bins_fit, popt = fit_gaussian(n_bins=100, data=my_data])
高斯 1 和高斯 2 在这个总人口中所占的百分比是多少?它只是 A1/(A1+A2)*100 和 A2/(A1+A2)*100 还是我需要更正一些东西?
您需要包含每个高斯的 sigma
信息。当您说来自每个总体的百分比时,我认为您是在询问每个高斯分布的总计数(积分)。对于您表格中的高斯分布,积分为:
integral = A * np.sqrt(2*np.pi*sigma**2)
然后人口的百分比将是
integral1 / (integral1 + integral2) * 100
我正在使用 scipy.optimize.curve_fit 对我的数据进行双高斯拟合。
import scipy
from scipy.optimize import curve_fit
def gaussian(x, mu, sigma, A):
return A*np.exp(-(x-mu)**2/2/sigma**2)
def bimodal(x, mu1, sigma1, A1, mu2, sigma2, A2):
return gaussian(x, mu1, sigma1, A1)+gaussian(x, mu2, sigma2, A2)
def fit_gaussian(n_bins, data):
bin_heights, bin_borders = np.histogram(np.array(data), bins=n_bins, density=True)
bin_centers = bin_borders[:-1] + np.diff(bin_borders) / 2
popt, pcov = scipy.optimize.curve_fit(bimodal, xdata=bin_centers, ydata=bin_heights)
return bin_borders, popt
bins_fit, popt = fit_gaussian(n_bins=100, data=my_data])
高斯 1 和高斯 2 在这个总人口中所占的百分比是多少?它只是 A1/(A1+A2)*100 和 A2/(A1+A2)*100 还是我需要更正一些东西?
您需要包含每个高斯的 sigma
信息。当您说来自每个总体的百分比时,我认为您是在询问每个高斯分布的总计数(积分)。对于您表格中的高斯分布,积分为:
integral = A * np.sqrt(2*np.pi*sigma**2)
然后人口的百分比将是
integral1 / (integral1 + integral2) * 100