标签: non-linear-regression

测试 R 中的比例优势假设

我在 R 中使用响应变量,即学生在特定课程中收到的字母等级。响应是有序的,在我看来,在逻辑上似乎是成正比的。我的理解是,在使用 polr() 而不是 multinom() 之前,我需要测试它是否成比例。

对于我的一门数据课程,我“测试”了这样的比例:

M1 <- logLik(polrModel)  #'log Lik.' -1748.180691 (df=8)
M2 <- logLik(multinomModel)  #'log Lik.' -1734.775727 (df=20)
G <- -2*(M1$1 - M2$2)) #I used a block bracket here in the real code
# 26.8099283
pchisq(G,12,lower.tail = FALSE) #DF is #of predictors
#0.008228890393     #THIS P-VAL TELLS ME TO REJECT PROPORTIONAL
Run Code Online (Sandbox Code Playgroud)

对于测试比例优势假设的第二种方法,我还运行了两个 vglm 模型,一个与family=cumulative(parallel =TRUE)另一个与family=cumulative(parallel =FALSE). 然后我pchisq()用模型偏差的差异和剩余自由度的差异进行了测试。

这两种方式中的任何一种都值得尊敬吗?如果没有,我很乐意帮助您确定是否接受或拒绝比例几率假设的实际编码!

除了上述两个测试之外,我还分别针对每个预测变量绘制了我的累积概率图。我读到我希望这些线平行。我不明白的是,polr()您的输出是每个自变量(系数)的单个斜率,然后是特定的截距,具体取决于您使用的累积概率(例如:P(Y<=A), P( Y<=B) 等)。那么,如果每个方程的斜率系数都相同,那么这些线怎么可能不平行?

我在 Chris Bilder 的 YouTube 课程中学习了我的基础知识;他在第 …

regression r logistic-regression non-linear-regression

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

从 scipy optimize.least_squares 方法获取拟合参数的协方差矩阵

我正在使用 scipy.optimize 的east_squares 方法来执行约束非线性最小二乘优化。我想知道如何获取拟合参数的协方差矩阵,以便获得拟合参数的误差线?

对于curve_fitlesssq来说,这似乎非常清楚,但对于 east_squares 方法来说,则不太清楚(至少对我来说)。

我一直在做的一种方法是,因为我知道least_squares返回雅可比矩阵J(这是“jac”返回值),那么我所做的就是用2*J^T J近似Hessian H。最后,协方差矩阵是 H^{-1},因此大约是 (2*J^TJ)^{-1},但我担心这对协方差的近似可能太粗糙?

python curve-fitting scipy data-fitting non-linear-regression

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

使用 GPy 多输出共区域化预测

我最近遇到一个问题,我认为多输出 GP 可能是一个不错的选择。我目前正在对我的数据应用单输出 GP,随着维度的增加,我的结果变得越来越糟。我尝试过使用 SKlearn 进行多输出,并且能够在更高维度上获得更好的结果,但是我相信 GPy 对于此类任务来说更完整,并且我可以更好地控制模型。对于单输出 GP,我将内核设置如下:

kernel = GPy.kern.RBF(input_dim=4, variance=1.0, lengthscale=1.0, ARD = True)
m = GPy.models.GPRegression(X, Y_single_output, kernel = kernel, normalizer = True) 
m.optimize_restarts(num_restarts=10)  
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,X 的大小为 (20,4),Y 的大小为 (20,1)。

我从多输出高斯过程简介中获得的多输出实现 我根据示例准备数据,将 X_mult_output 设置为大小 (80,2) - 第二列是输入索引 - 并重新排列 Y至 (80,1)。

kernel = GPy.kern.RBF(1,lengthscale=1, ARD = True)**GPy.kern.Coregionalize(input_dim=1,output_dim=4, rank=1)
m = GPy.models.GPRegression(X_mult_output,Y_mult_output, kernel = kernel, normalizer = True)
Run Code Online (Sandbox Code Playgroud)

好吧,到目前为止一切似乎都有效,现在我想预测这些值。问题是我似乎无法预测这些值。据我了解,您可以通过在 Y_metadata 参数上指定输入索引来预测单个输出。由于我有 4 个输入,因此我设置了一个要预测的数组,如下所示:

x_pred = np.array([3,2,2,4])
Run Code Online (Sandbox Code Playgroud)

然后,我想我必须分别对 x_pred 数组中的每个值进行预测,如共区域回归模型(向量值回归)中所示:

Y_metadata1 = {'output_index': np.array([[0]])}

y1_pred = …
Run Code Online (Sandbox Code Playgroud)

python regression machine-learning non-linear-regression gpy

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

R中的非线性多元回归

我正在尝试使用数据集在R中运行非线性多元回归,它有数千行,所以我只是将前几个放在这里:

      Header.1 Header.2   Header.3  Header.4 Header.5 Header.6 Header.7
1          -60      -45 615 720        1.8318          0.428    -11.614
2          -59      -45 616 720        1.8322          0.429    -11.498
3          -58      -45 617 720        1.8326          0.430    -11.383
4          -57      -45 618 720        1.8330          0.430    -11.267
5          -56      -45 619 720        1.8334          0.431    -11.152
6          -55      -45 620 720        1.8338          0.432    -11.036
7          -54      -45 621 720        1.8342          0.433    -10.921
8          -53      -45 622 720        1.8346          0.433    -10.806
9          -52      -45 623 720        1.8350          0.434    -10.691 …
Run Code Online (Sandbox Code Playgroud)

regression r nls non-linear-regression

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

编程语言R:库方法“loess”中“weights”参数的含义

loess我使用R编程语言的库方法进行非参数数据拟合。数据集是二维的。我还没有找到该方法参数的任何正确文档weights

我的数据点是正态分布的随机变量,并且我还估计了它们各自的标准差。我想知道该参数是否weights允许我向 R 提供标准差的详细信息。换句话说:我想知道 中的各个权重是否weights是数据质量的(相对)度量,因此如果通过参数 提供某种数据不确定性度量,则可以改进拟合weights

编辑:我怀疑其中的条目weights被用作 LOESS 过程中本地数据集的加权最小二乘回归中的权重(也许作为(位置相关)核函数的附加权重前置因素?)。这表明,对于数据点是独立正态分布随机变量,但仍然具有不同噪声水平(即不同标准差)(如我的情况)的情况,权重应选择为 ,1/\sigma_{i}^2其中\sigma_{i}是各自的随机变量/数据点。如果有人确切知道的话,那就太好了。

r loess non-linear-regression

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

nls() 错误收敛(尽管起始值很好)

我一直在研究一个曲线拟合脚本,该脚本将 3 个指数修改的高斯 (EMG) 拟合到卷积曲线。我的基函数类似于高斯分布,但包括第三个参数(前两个是musigma),它决定了函数的指数分量的权重。

所以总的来说,每个 EMG 峰值需要 3 个参数,加上一个幅度系数(为了匹配值 > 1.0 的实验数据)

要对 3 个 EMG 峰进行去卷积,要最小化的参数总数为 3x4 = 12

在某些情况下,拟合效果很好,但在许多情况下它无法收敛,并返回这样的错误

Convergence failure: false convergence (8)
Run Code Online (Sandbox Code Playgroud)

仅经过 50 次左右的迭代(远低于限制)。

通过使用跟踪选项,我可以看到结果非常接近匹配数据。通过根据我的初始估计值绘制曲线,还可以看出起始参数与数据在合理的范围内:

数据 = 黑色(添加噪声),初始 = 橙色,错误前的最终迭代 = 红色

这是我的代码示例,我在其中调用nls()

t <- 0.05
fit <- nls(y ~ emgmix(a,b,c,d,a1,b1,c1,d1,a2,b2,c2,d2), 
  start = list(
    a=pk1coef[2],
    b=pk1coef[2],
    c=t,
    d=y[pk1c[2]]*40,

    a1=pk2coef[1],
    b1=pk2coef[2],
    c1=t,
    d1=y[pk2c[2]]*40,

    a2=pk3coef[1],
    b2=pk3coef[2],
    c2=t,
    d2=y[pk3c[2]]*40),

    lower=rep(0.001,12),

    control = list(maxiter = 1000),
    trace = TRUE,
    algorithm …
Run Code Online (Sandbox Code Playgroud)

r curve-fitting nls non-linear-regression

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

在 r 的 sigmoidal 曲线上找到一个点

这是一个数据集:

df <- data.frame('y' = c(81,67,54,49,41,25), 'x' =c(-50,-30,-10,10,30,50))
Run Code Online (Sandbox Code Playgroud)

到目前为止,我知道如何拟合 sigmoidal 曲线并将其显示在屏幕上:

plot(df$y ~ df$x)
fit <- nls(y ~ SSlogis(x, Asym, xmid, scal), data = df)
summary(fit)
lines(seq(-100, 100, length.out = 100),predict(fit, newdata = data.frame(x = seq(-100,100, length.out = 100))))
Run Code Online (Sandbox Code Playgroud)

我现在想在 y = 50 时在 sigmoidal 曲线上找到一个点。我该怎么做?

regression r curve-fitting non-linear-regression sigmoid

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

在 ggplot 中显示 y~log(x) 函数的 R2 和 p 值

我想要进行ggplot对数回归并显示 R2 和 p 值。我尝试过stat_cor,但它只显示线性回归的 R2 和 p 值。我尝试将“formula=y~log(x)”合并到 中stat_cor,但说未知参数:公式。我是否必须使用不同的函数才能实现这一点?

ggplot(data = Data,aes(x=Carbon_per,y=Pyrite_per,col=Ecosystem,shape=Ecosystem)) +
  geom_smooth(method='lm', formula=y~log(x))+
  geom_point() +
  stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~")))
Run Code Online (Sandbox Code Playgroud)

干杯,格洛丽亚

r ggplot2 p-value non-linear-regression

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

计算并绘制广义非线性模型的 95% 置信区间

我使用nlmeR包和包含的函数构建了几个广义非线性最小二乘模型(指数衰减)。我不简单地使用基函数构建非线性最小二乘模型的原因是因为我希望能够对异方差进行建模以避免变换。我的模型看起来像这样:gnls()nls()

model <- gnls(Response ~ C * exp(k * Explanatory1) + A,
              start = list(C = c(C1,C1), k = c(k1,k1), A = c(A1,A1)),
              params = list(C ~ Explanatory2, k ~ Explanatory2, 
                            A ~ Explanatory2),
              weights = varPower(), 
              data = Data)
Run Code Online (Sandbox Code Playgroud)

与简单模型的主要区别nls()在于weights参数,它可以通过解释变量对异方差性进行建模。的线性等效项gnls()是广义最小二乘法,使用nlmegls()函数运行运行。

现在我想计算置信区间R并将它们与我的模型拟合ggplot()ggplot2包)一起绘制。我对一个对象执行此操作的方法gls()是这样的:

NewData <- data.frame(Explanatory1 = c(...), Explanatory2 = c(...)) 
NewData$fit <- predict(model, newdata = NewData)
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常,我的模型适合我。

modmat …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 confidence-interval nlme non-linear-regression

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

在 Google Colab 中导入“pyearth”(“from pyearth import Earth”错误)

我需要从pyearthGoogle Colab 上的库加载多元自适应回归样条 (MARS) 算法。这就是我想做的:

# Import model from library
from pyearth import Earth

# Initialize model
reg = Earth()
Run Code Online (Sandbox Code Playgroud)

但是,Google Colab 默认情况下没有该库。当我尝试时收到以下错误提示import pyearth

ModuleNotFoundError:没有名为“pyearth”的模块

因此,我尝试使用安装它!pip,但是,如下所示,它也不起作用。

# Instal `pyearth`
!pip install pyearth # Runs smoothly

# Import Earth
from pyearth import Earth

> ImportError: cannot import name 'Earth' from 'pyearth' (/usr/local/lib/python3.7/dist-packages/pyearth/__init__.py)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,确实import pyearth有效。

这篇文章解决了一个非常相似的问题,但仍未解决。唯一可用的答案对我不起作用。

python non-linear-regression google-colaboratory

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