标签: curve-fitting

如何强制第二度的polyfit到0的截距

我一直在使用该numpy.polyfit功能进行一些预测.如果我放入1度,它可以工作,但我需要做二次多项式拟合.在某些情况下它可以工作,在其他情况下,预测图会下降然后永远上升.例如:

import matplotlib.pyplot as plt
from numpy import *

x=[1,2,3,4,5,6,7,8,9,10]
y=[100,85,72,66,52,48,39,33,29,32]
fit = polyfit(x, y, degree) 
fitfunction = poly1d(z4)
to_predict=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

plt.plot(to_predict,fitfunction(to_predict))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在我运行之后,这显示了(我尝试放一张照片,但stackoverflow不会让我).

我想强迫它通过零.

我该怎么办?

python numpy curve-fitting

2
推荐指数
1
解决办法
4533
查看次数

使用变量作为R中的列名称来拟合glm

我试图glm()使用变量而不是列名来适应R,但它不起作用.这可以帮助我自动生成glms.当我glm使用列名称时,程序运行正常,当我用包含列名的变量交换列名时,程序给出并出错.

这是我的命令的样子:

##The data
mydata <- structure(list(var1 = c(10L, 100L, 50L, 40L, 20L, 50L, 60L, 55L, 
45L), var2 = c(1.5, 1.2, 1, 1.4, 1.2, 1.4, 1.3, 1.4, 1.3), var3 = c(5L, 
3L, 4L, 1L, 5L, 2L, 7L, 5L, 4L), group = structure(c(1L, 1L, 
2L, 2L, 1L, 1L, 2L, 1L, 1L), .Label = c("A", "B"), class = "factor")), .Names = c("var1", 
"var2", "var3", "group"), class = "data.frame", row.names = c(NA, 
-9L))
## My variable
x <- c("var1+var2") …
Run Code Online (Sandbox Code Playgroud)

statistics r character curve-fitting glm

2
推荐指数
2
解决办法
2866
查看次数

在 R 中使用 gamlss::lms 选择百分比曲线

我正在使用 gamlss 包中的示例代码来绘制百分位数曲线:

library(gamlss) 
data(abdom)
lms(y,x , data=abdom, n.cyc=30)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

它正在绘制自己的一组百分位曲线。我如何选择只绘制第 10、50 和 90% 的曲线?我也想避免绘制点,以便只绘制曲线。谢谢你的帮助。

r curve-fitting percentile gamlss

2
推荐指数
1
解决办法
1602
查看次数

强制 nls 拟合通过指定点的曲线

我正在尝试将 Boltzmann sigmoid 拟合1/(1+exp((x-p1)/p2))到这个小型实验数据集:

xdata <- c(-60,-50,-40,-30,-20,-10,-0,10)
ydata <- c(0.04, 0.09, 0.38, 0.63, 0.79, 1, 0.83, 0.56)
Run Code Online (Sandbox Code Playgroud)

我知道这很简单。例如,使用nls

fit <-nls(ydata ~ 1/(1+exp((xdata-p1)/p2)),start=list(p1=mean(xdata),p2=-5))
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

Formula: ydata ~ 1/(1 + exp((xdata - p1)/p2))

Parameters:
   Estimate Std. Error t value Pr(>|t|)    
p1  -33.671      4.755  -7.081 0.000398 ***
p2  -10.336      4.312  -2.397 0.053490 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1904 on 6 degrees of freedom

Number of …
Run Code Online (Sandbox Code Playgroud)

r curve-fitting nls

2
推荐指数
1
解决办法
1797
查看次数

Python估计数据拟合后的标准差

我正在尝试使用 ipython --pylab 将数据集拟合到超策略方程中:y = ax / (b + x)

这是我的python代码:

from scipy import optimize as opti
import numpy as np
from pandas import DataFrame

x = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8])
y = np.array([0.375, 0.466, 0.509, 0.520, 0.525, 0.536, 0.541])
y_stdev = np.array([0.025, 0.016, 0.009, 0.009, 0.025, 0.019])

def func(x, a, b):
   return a*x / (b + x)

popt, pcov = opti.curve_fit(func, x, y)
print(popt)
print("a = ", popt.ix[0])
print("b = ", popt.ix[1])
Run Code Online (Sandbox Code Playgroud)

ab的值应该在 …

python curve-fitting scipy data-fitting standard-deviation

2
推荐指数
1
解决办法
3902
查看次数

将对数正态分布拟合到已经分箱的数据 python

我想对我已经分箱的数据进行对数正态拟合。条形图如下所示:在此处输入图片说明

不幸的是,当我尝试使用标准lognorm.pdf()时,拟合分布的形状非常不同。我想这是因为我的数据已经分箱了。这是代码:

times, data, bin_points = ReadHistogramFile(filename)

xmin = 200
xmax = 800
x = np.linspace(xmin, xmax, 1000)
shape, loc, scale = stats.lognorm.fit(data, floc=0)
pdf = stats.lognorm.pdf(x, shape, loc=loc, scale=scale)

area=data.sum()
plt.bar(bars, data, width=10, color='b')
plt.plot(x*area, pdf, 'k' )
Run Code Online (Sandbox Code Playgroud)

这是拟合分布的样子: 在此处输入图片说明 显然,缩放也有问题。不过我不太关心这个。我的主要问题是分布的形状。这可能与:this question但我找不到正确的解决方案重复。我试过了,仍然得到与上述操作非常相似的形状。谢谢你的帮助!

更新: 通过使用curve_fit()我能够得到一些适合。但我还不满意。我想要原始垃圾箱而不是统一垃圾箱。此外,我不确定到底发生了什么,以及是否没有更合适的。这是代码:

def normalize_integral(data, bin_size):
normalized_data = np.zeros(size(data))
print bin_size
sum = data.sum()
integral = bin_size*sum
for i in range(0, size(data)-1):
    normalized_data[i] = data[i]/integral

print 'integral:', normalized_data.sum()*bin_size
return normalized_data



def pdf(x, mu, …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting bar-chart

2
推荐指数
1
解决办法
1043
查看次数

用 gnuplot 拟合阻尼正弦波数据集,得到很多错误

我试图适应这个数据集:

#Mydataset damped sine wave data
#X ---- Y
45.80   320.0
91.60   -254.0
137.4   198.0
183.2   -156.0
229.0   126.0
274.8   -100.0
320.6   80.0
366.4   -64.0 
412.2   52.0
458.0   -40.0
503.8   34.0
549.6   -26.0
595.4   22.0
641.2   -18.0
Run Code Online (Sandbox Code Playgroud)

如下图所示,它具有阻尼正弦波的经典趋势: 在此处输入图片说明

所以我首先设置了适合的宏

f(x) = exp(-a*x)*sin(b*x)
Run Code Online (Sandbox Code Playgroud)

然后我做了适当的合身

fit f(x) 'data.txt' via a,b
iter      chisq       delta/lim  lambda   a             b            
   0 2.7377200000e+05   0.00e+00  1.10e-19    1.000000e+00   1.000000e+00

Current data point
=========================
#               = 1 out of 14
x               = -5.12818e+20   
z               = 320            

Current set of parameters …
Run Code Online (Sandbox Code Playgroud)

plot gnuplot curve-fitting data-fitting

2
推荐指数
1
解决办法
2249
查看次数

使用 scipy.optimize.curve_fit 时如何将参数传递给拟合函数

我正在尝试使用 scipy.optimize.curve_fit 拟合一些数据。我的拟合函数是:

def fitfun(x, a):
    return np.exp(a*(x - b))
Run Code Online (Sandbox Code Playgroud)

我想要的是定义a为拟合参数,以及b根据我想要拟合的数据而变化的参数。这意味着对于一组数据,我希望拟合函数:np.exp(a*(x - 10))而对于另一组数据,我希望拟合函数np.exp(a*(x - 20))。原则上,我希望参数 b 作为任何值传入。

我目前调用 curve_fit 的方式是:

coeffs, coeffs_cov = curve_fit(fitfun, xdata, ydata)
Run Code Online (Sandbox Code Playgroud)

但我想要的是这样的:

b=10     
coeffs, coeffs_cov = curve_fit(fitfun(b), xdata, ydata)
b=20     
coeffs2, coeffs_cov2 = curve_fit(fitfun(b), xdata, ydata)
Run Code Online (Sandbox Code Playgroud)

这样我就可以得到两种情况下的系数 a(b=10 和 b=20)。

我是 python 的新手,所以我无法让它工作,即使我试图阅读文档。任何帮助将不胜感激。

curve-fitting scipy python-3.x

2
推荐指数
2
解决办法
5210
查看次数

Python中的曲线拟合指数增长函数

我有以下数据点想要曲线拟合:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

t = np.array([15474.6, 15475.6, 15476.6, 15477.6, 15478.6, 15479.6, 15480.6,
              15481.6, 15482.6, 15483.6, 15484.6, 15485.6, 15486.6, 15487.6,
              15488.6, 15489.6, 15490.6, 15491.6, 15492.6, 15493.6, 15494.6,
              15495.6, 15496.6, 15497.6, 15498.6, 15499.6, 15500.6, 15501.6,
              15502.6, 15503.6, 15504.6, 15505.6, 15506.6, 15507.6, 15508.6,
              15509.6, 15510.6, 15511.6, 15512.6, 15513.6])

v = np.array([4.082, 4.133, 4.136, 4.138, 4.139, 4.14, 4.141, 4.142, 4.143,
              4.144, 4.144, 4.145, 4.145, 4.147, 4.146, 4.147, 4.148, 4.148,
              4.149, 4.149, 4.149, 4.15, 4.15, …
Run Code Online (Sandbox Code Playgroud)

python numpy curve-fitting scipy exponential

2
推荐指数
1
解决办法
7464
查看次数

对数正态曲线拟合

我在 x0 和 y0 数组中有对数正态分布数据:

x0.ravel() = array([19.8815 , 19.0141 , 18.1857 , 17.3943 , 16.6382 , 15.9158 ,
   15.2254 , 14.5657 , 13.9352 , 13.3325 , 12.7564 , 12.2056 ,
   11.679  , 11.1755 , 10.6941 , 10.2338 ,  9.79353,  9.37249,
    8.96979,  8.58462,  8.21619,  7.86376,  7.52662,  7.20409,
    6.89552,  6.6003 ,  6.31784,  6.04757,  5.78897,  5.54151,
    5.30472,  5.07812,  4.86127,  4.65375,  4.45514,  4.26506,
    4.08314,  3.90903,  3.74238,  3.58288,  3.4302 ,  3.28407,
    3.14419,  3.01029,  2.88212,  2.75943,  2.64198,  2.52955,
    2.42192,  2.31889,  2.22026,  2.12583,  2.03543,  1.94889,
    1.86604, …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy

2
推荐指数
1
解决办法
1235
查看次数