我需要做一些强大的数据拟合操作.
我有一堆(x,y)数据,我想要适合高斯(又名正常)函数.关键是,我想删除ouliers.正如可以在下面的示例图中看到的那样,还有另一个数据分布在右边污染我的数据,我不想考虑它来进行拟合(即找到\ sigma,\ mu和整体规模参数).

R似乎是适合这项工作的工具,我发现了一些与稳健拟合相关的软件包(健壮,强大的基础,例如MASS).
但是,他们假设用户已经非常了解R,这不是我的情况,文档仅作为一种参考手册提供,没有教程或同等学历.我的统计背景相当低,我试图阅读关于拟合R的参考资料,但它并没有真正帮助(我甚至不确定这是正确的方法).但我觉得这实际上是一个非常简单的操作.
我已经检查了这个相关的问题(以及链接的问题),但是它们将单个矢量值作为输入,并且我有一对矢量,所以我看不到如何转置.
任何有关如何做到这一点的帮助将不胜感激.
试图fitdistr()在R.中使用chi_square分布.这里的文档(对我来说不是很有用):https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/fitdistr. HTML
问题1:chi_df下面有以下输出: 3.85546875 (0.07695236).第二个数字是多少?方差或标准差?
问题2:fitdistr生成由Chi-SQ分布定义的'k'.如何拟合数据,使得缩放常数为"A"?我愚蠢地使用下面的第14-17行.显然不好.
问题3:Chi-SQ分布仅定义为某个x范围吗?(方差定义为2K,而均值= k.这必须要求一些约束的x范围......统计问题不是编程......)
nnn = 1000;
## Generating a chi-sq distribution
chii <- rchisq(nnn,4, ncp = 0);
## Plotting Histogram
chi_hist <- hist(chii);
## Fitting. Gives probability density which must be scaled.
chi_df <- fitdistr(chii,"chi-squared",start=list(df=3));
chi_k <- chi_df[[1]][1];
## Plotting a fitted line:
## Spanning x-length of chi-sq data
x_chi_fit <- 1:nnn*((max(chi_hist[[1]][])-min(chi_hist[[1]][]))/nnn);
## Y data using eqn for probability function
y_chi_fit <- (1/(2^(chi_k/2)*gamma(chi_k/2)) * x_chi_fit^(chi_k/2-1) …Run Code Online (Sandbox Code Playgroud) 我有一组尺寸标注N点,k作为size的矩阵N X k。
如何通过这些点找到最佳拟合线?该线的k尺寸将是一个平面(曲面)。它将具有k系数和一个偏差项。
现有的函数fit似乎仅可用于2维或3维点。
是否可以在SciPy中拟合分布时修复参数?例如,这段代码:
import scipy.stats as st
xx = st.expon.rvs(size=100)
print st.expon.fit(xx, loc=0)
Run Code Online (Sandbox Code Playgroud)
导致非零位置(loc).
当某个参数提供给fit函数时,它被认为是初始猜测.如果它被提供给构造函数(st.expon(loc=0)),则分布变为"冻结"并且不能用于拟合.
我想将我的表面方程拟合到一些数据中.我已经尝试过scipy.optimize.leastsq,但因为我无法指定边界,所以它给了我一个无法使用的结果.我也试过scipy.optimize.least_squares,但它给了我一个错误:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
我的等式是:
f(x,y,z)=(x-A+y-B)/2+sqrt(((x-A-y+B)/2)^2+C*z^2)
Run Code Online (Sandbox Code Playgroud)
应找到参数A,B,C,以便当以下点用于x,y,z时,上面的等式尽可能接近零:
[
[-0.071, -0.85, 0.401],
[-0.138, -1.111, 0.494],
[-0.317, -0.317, -0.317],
[-0.351, -2.048, 0.848]
]
Run Code Online (Sandbox Code Playgroud)
边界将是A> 0,B> 0,C> 1
我应该如何获得这样的合适?python中最好的工具是什么?我搜索了如何拟合3d表面的示例,但大多数涉及函数拟合的示例都是关于线或平面拟合.
我正在尝试使用 ipython --pylab 将数据集拟合到超策略方程中:y = ax / (b + x)
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)
a和b的值应该在 …
我试图适应这个数据集:
#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) 说我有两个数据列表,如下所示:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [1, 2, 3, 4, 5, 6, 8, 10, 12, 14]
Run Code Online (Sandbox Code Playgroud)
也就是说,很明显,仅使一条线适合此数据是行不通的,而是在数据中的某个点改变了斜率。(显然,可以很容易地从此数据集中查明变化的位置,但在我正在使用的数据集中尚不清楚,因此我们可以忽略这一点。)我想将其视为一个自由参数,在这里我说“是这个点,+ /-这个不确定性,这是该点之前和之后的线性斜率”。
注意,如果比较简单,我可以使用数组来完成此操作。谢谢!
我有一个包含 1096 个数字的向量,这是一个测量站 3 年内测量的 NOx 的日平均浓度。您可以观察图像中的分布类型:

我使用这些命令来做直方图:
NOxV<-scan("NOx_Vt15-17.txt")
hist.NOxVt<-hist(NOxV, plot = FALSE, breaks = 24)
plot(hist.NOxVt, xlab = "[NOx]", ylab = "Frequenze assolute", main = "Istogramma freq. ass. NOx 15-17 Viterbo")
points(hist.NOxVt$mids, hist.NOxVt$counts, col= "red")
Run Code Online (Sandbox Code Playgroud)
我的教授建议我用泊松分布拟合直方图 - 注意转换:离散 -> 连续(我不知道这意味着什么) - 或“对数正态”分布。
我尝试使用她在课程中给我们的一些命令行来进行泊松拟合,但是在执行以下最后一行代码后,R 给了我一个错误:
my_poisson = function(params, x){
exp(-params)*params^x/factorial(x)
}
y<-hist.NOxVt$counts/1096;
x<-hist.NOxVt$mids;
z <- nls( y ~ exp(-a)*a^x/factorial(x), start=list(a=1) )
Run Code Online (Sandbox Code Playgroud)
numericDeriv(form[[3L]], names(ind), env) 中的错误:评估模型时产生的缺失值或无穷大此外:有 50 个或更多警告(使用警告()查看前 50 个)”
这个问题解决不了(在网上搜索类似问题)我决定用对数正态拟合分布,但我不知道怎么做,因为教授没有给我们解释,我仍然没有足够的 R 经验来自己解决。
我将不胜感激有关如何进行对数正态拟合和/或泊松拟合的任何建议或示例。
我的形象:

我试图检测图像中的曲线 - 在图中有堆叠的硬币。我想计算平行曲线。大多数线条是不连续的。
假设我在 numpy.polyfit 中使用 5 个点并获得描述该线的函数。
搜索线并说这些点在第一行,这些点在第二行等的最佳方法是什么?
我正在考虑尝试最小二乘法并将线上下移动。我认为曲线是一条抛物线( ax^2 + bx + c ) - 移动它意味着移动顶点 x=-b/2a => y=a*(-b/2a)^2 + b*(- b/2a)+c。
import numpy as np
data = np.array([[0,0], [1,-1], [2, -2], [3,-1], [4,0]])
data_x = [k[0] for k in data ]
data_y = [k[1] for k in data ]
p = np.poly1d(np.polyfit(data_x, data_y, 2))
Run Code Online (Sandbox Code Playgroud)
请有人帮助我举例说明如何将图像中的点拟合到我刚刚找到的 p。我如何在这里应用最小二乘法?
提前致谢!
data-fitting ×10
python ×5
r ×3
distribution ×2
scipy ×2
chi-squared ×1
exponential ×1
gnuplot ×1
matlab ×1
numpy ×1
plot ×1
poisson ×1