标签: piecewise

在Python中拟合分段函数

我正在尝试将分段定义的函数拟合到Python中的数据集。我已经搜索了很长一段时间,但是无论是否可行,我都没有找到答案。

为了让我对我正在尝试做的事情有印象,请看以下示例(对我而言不起作用)。在这里,我尝试将位移的绝对值函数(f(x)= | xp |)拟合到以p为拟合参数的数据集。

import scipy.optimize as so
import numpy as np

def fitfunc(x,p):
   if x>p:
      return x-p
   else:
      return -(x-p)

fitfunc = np.vectorize(fitfunc) #vectorize so you can use func with array

x=np.arange(1,10)
y=fitfunc(x,6)+0.1*np.random.randn(len(x))

popt, pcov = so.curve_fit(fitfunc, x, y) #fitting routine that gives error
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在Python中完成这项工作吗?

在R中执行此操作的方法是:

# Fit of a absolute value function f(x)=|x-p|

f.lr <- function(x,p) {
    ifelse(x>p, x-p,-(x-p))
}
x <- seq(0,10)  #
y <- f.lr(x,6) + rnorm (length(x),0,2)
plot(y ~ x)
fit.lr <- nls(y ~ …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting piecewise

4
推荐指数
1
解决办法
7506
查看次数

在 Octave 中创建并绘制分段函数

所以我想绘制这个函数

在此输入图像描述

对于-1

首先我创建了分段函数

function x = pieceWise(t)
  if t >= 0 & t <3
    x = exp(-t);
  else
    x = 0;
endif
Run Code Online (Sandbox Code Playgroud)

然后调用并在这里绘制它

x = linspace(-1,5,1000);
y = pieceWise(x);
plot(x,y)
Run Code Online (Sandbox Code Playgroud)

但输出始终为0

在此输入图像描述

任何提示都会非常有帮助。谢谢

plot octave piecewise

4
推荐指数
1
解决办法
5555
查看次数

Python:np.vectorize返回“浮点数”

运行以下代码:

import matplotlib.pyplot as plt
import numpy as np

def xon (ton, t):
    if ton <= t:
        return (t-ton)/5
    else:
        return 0

vxon = np.vectorize(xon)
t = np.linspace(0, 49, 50)    
xontest = vxon(0, t)
plt.plot(t, xontest, '-')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我得到了情节: 在此处输入图片说明

但是,当我尝试绘制ton值时,wchich不同于零,例如:

xontest = vxon(2, t)
Run Code Online (Sandbox Code Playgroud)

该图似乎将所有xon值舍入为整数:

在此处输入图片说明

我的代码中有什么导致这种行为?

python numpy vectorization floating piecewise

3
推荐指数
1
解决办法
574
查看次数

如何获得具有先验断点的分段线性回归?

我需要以极其简洁的方式解释这一点,因为我没有统计学的基础知识来更简洁地解释.在SO中询问是因为我正在寻找python解决方案,但如果更合适,可能会转到stats.SE.

我有井下数据,可能有点像这样:

Rt      T
0.0000  15.0000
4.0054  15.4523
25.1858 16.0761
27.9998 16.2013
35.7259 16.5914
39.0769 16.8777
45.1805 17.3545
45.6717 17.3877
48.3419 17.5307
51.5661 17.7079
64.1578 18.4177
66.8280 18.5750
111.1613    19.8261
114.2518    19.9731
121.8681    20.4074
146.0591    21.2622
148.8134    21.4117
164.6219    22.1776
176.5220    23.4835
177.9578    23.6738
180.8773    23.9973
187.1846    24.4976
210.5131    25.7585
211.4830    26.0231
230.2598    28.5495
262.3549    30.8602
266.2318    31.3067
303.3181    37.3183
329.4067    39.2858
335.0262    39.4731
337.8323    39.6756
343.1142    39.9271
352.2322    40.6634
367.8386    42.3641
380.0900    43.9158
388.5412    44.1891
390.4162    44.3563
395.6409    44.5837 …
Run Code Online (Sandbox Code Playgroud)

python r linear-regression piecewise

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

Mathematica:绘制分段函数的导数

我试图在Mathematica中绘制一个mollifier函数的导数.它区分OK功能,并可以绘制使用功能%,但我想能够通过分配导数是一个函数来绘制f[t_],然后Plot[ f[t] , {t,-1,1} ].

我不确定如何解决出现的错误.

Mathematica代码是:

Clear[moll, f]

moll[x_] := 
Piecewise[ {  {E^(-1/(1 - x^2)), -1 < x < 1} , {0,x <= -1 || x >= 1}  } ]; (* Standard     mollifier *)

f[t_] := D[ moll[t] , t]

f[t]

Plot[%, {t, -1, 1}] (* this line works *)

Plot[f[t], {t, -1, 1}] (* this line comes up with an error *)
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica piecewise

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

如何制作两个变量的分段函数的三维图?

我试图在MATLAB中绘制以下函数:

1

目标是将所有不同的条件拼接成一个图形以制作整体CDF图形.到目前为止我尝试的是以下内容:

x=linspace(0,1,20);
y=linspace(0,1,20);
Z=x.^y;
plot3(x,y,Z)
hold on
plot3(x,0,0);
plot3(0,y,0);
Run Code Online (Sandbox Code Playgroud)

我不确定如何绘制图1,x>1, y>1以及是否有一种方法可以使绘图成为这组条件的固体曲面.我已经尝试使用rand()生成器在0和之间生成20多个数字1,这表示变量可以定位的区域.但是,当它是给定区域中的线条散布时,它看起来很麻烦.我宁愿它是一个坚实的表面.

我可以使用特定的命令吗?我在一些例子中看到过Mesh()用于使图形稳固但不确定这是否适用于数据集.

matlab plot surface piecewise

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

解释分段混合效果输出

我试图理解分段混合效果模型的摘要输出,并可以使用一些见解.具体来说,我想知道如何获得断点左右两侧的回归截距和斜率.根据我的理解,下面输出中给出的截距是断点左边的回归线,给出的值I(Days*(Days <6.07))是该线的斜率.但是,我不认为我(Days*(Days> = 6.07))是断点右边的斜率,也不是两个斜率的差异.

library(lme4)
sleepstudy<-as.data.frame(sleepstudy)
Run Code Online (Sandbox Code Playgroud)

我从前一个帖子中提取了断点:https://stats.stackexchange.com/questions/19772/estimating-the-break-point-in-a-broken-stick-piecewise-linear-model-with-rando

Linear mixed model fit by REML ['lmerMod']
Formula: Reaction ~ I(Days * (Days < 6.07)) + I(Days * (Days >= 6.07)) +      (1 | Subject) 
   Data: sleepstudy 

REML criterion at convergence: 1784.369 

Random effects:
 Groups   Name        Variance Std.Dev.
 Subject  (Intercept) 1377.6   37.12   
 Residual              965.7   31.08   
Number of obs: 180, groups: Subject, 18

Fixed effects:
                         Estimate Std. Error t value
(Intercept)              252.2663    10.0545  25.090
I(Days * (Days < 6.07))   10.0754     1.3774 …
Run Code Online (Sandbox Code Playgroud)

mixed r effects piecewise

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

分段方形的矢量,C++ Eigen中两个向量的分段产品

当然v,aEigen::VectorXdn维的向量,我想进行以下分段操作:

  • vby a,即向量的分段乘法(a[1]*v[1], ..., a[n]*v[n]),和
  • 分段的正方形v,即矢量(v[1]*v[1], ..., v[n]*v[n]).

是否Eigen提供上述操作的方法,还是需要手动实现?当然非常简单,但我希望他们尽可能快地运行.

vector square piecewise eigen c++11

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

绘制拟合的分段线性模型显示的断点比估计的要多

今天我正在帮助一位朋友进行分段回归。我们试图用断点拟合分段回归,看看它是否比标准线性模型更适合数据。

我偶然发现了一个我无法理解的问题。当使用所提供的数据用单个断点拟合分段回归时,它确实适合单个断点。

然而,当您根据模型进行预测时,它会给出看起来像 2 个断点的信息。使用绘制模型时plot.segmented()不会出现此问题。

任何人都知道发生了什么以及我如何获得正确的预测(以及标准错误等)?或者我在代码中一般做错了什么?

# load packages
library(segmented)

# make data
d <- data.frame(x = c(0, 3, 13, 18, 19, 19, 26, 26, 33, 40, 49, 51, 53, 67, 70, 88
),
                y = c(0, 3.56211608128595, 10.5214485148819, 3.66063708049802, 6.11000808621074, 
                      5.51520423804034, 7.73043895812661, 7.90691392857039, 6.59626527933846, 
                      10.4413913666936, 8.71673928545967, 9.93374157928462, 1.214860139929, 
                      3.32428882257746, 2.65223361387063, 3.25440939462105))

# fit normal linear regression and segmented regression
lm1 <- lm(y ~ x, d)
seg_lm <- segmented(lm1, ~ x)

slope(seg_lm)
#> $x
#>            Est.  St.Err. t …
Run Code Online (Sandbox Code Playgroud)

regression r linear-regression piecewise lm

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