`stat_smooth()` 中的非线性回归线及其计算失败:缺少参数“p”,没有默认错误

Posted

技术标签:

【中文标题】`stat_smooth()` 中的非线性回归线及其计算失败:缺少参数“p”,没有默认错误【英文标题】:Non-linear regression line and its Computation failed in `stat_smooth()`: argument "p" is missing, with no default error 【发布时间】:2021-12-30 21:58:37 【问题描述】:

我一直在尝试将非线性回归线拟合到我的标准曲线中。但是,我收到了following error:

主要问题是对于线性回归线,我可以使用如下简单命令:

stat_cor(label.y = c(825),
              label.x = c(0.88), 
          aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~")))+
   stat_regline_equation(label.x=0.88, label.y=750)+

然后出现具有ab 值的线性回归线方程。在这种情况下,使用以下内容后:

stat_smooth(method= "nlm", 
                formula = y~a*x/(b+x),
                method.args = list( start = c(a = 3.8, b = 1457.2)),
                se=FALSE)+

我收到上述错误。 你可能会问我从哪里得到ab 值?我是从:

nls(y~a*x/(b+x))

That has shown:

我不知道自己哪里出错了。

这是我的图表的全部代码

library(tidyverse)
library(tidyr)
library(dplyr)
library(readr)
library(ggplot2)
library(ggpubr)
ggplot(data = STD, aes(x = Absorbance, y = STD)) +
  labs(title = "Quantifying PGD2 in cell culture lysates and its enzymatic reactions ",
       caption = "PGD2 ELISA")+
    geom_point(colour = "#69b3a2")+
    stat_smooth(method= "nlm", 
                formula = y~a*x/(b+x),
                method.args = list( start = c(a = 3.8, b = 1457.2)),
                se=FALSE)+
    xlab(expression(paste("%B/"~B[0])))+
    ylab(expression(paste("Prostaglandin"~ D[2], ~~ " MOX Concentration (pg/ml) ")))+
    
   theme(plot.background =  element_rect(fill = "transparent"),
         panel.background = element_blank(),
         panel.grid.major = element_blank(),
         panel.grid.minor = element_blank(),
         axis.line = element_line(colour = "black"))+
  
   theme(legend.spacing.y = unit(0.01, "cm"))+
   theme(legend.position = c(0.77, .91),
         legend.background = element_rect(colour = NA, fill = NA))+
   theme(plot.title = element_text(size = 12, face = "bold.italic"),
         plot.caption = element_text(hjust = 0))

这给了the following outcome

这是DataUsed

【问题讨论】:

尝试使用list(p = c(a = 3.8, b = 1457.2) 作为起始值的参数,称为p。见?nlm 我已经尝试过这个技巧,我得到的错误是`警告:stat_smooth() 中的计算失败:找不到函数“f”` 至少有所改进。我只是又看了一眼。可能你想要 method = "nls" 而不是 nlm 在这种情况下 "start" 将是参数的正确名称。但是,即使进行了更改, stat_smooth 也会失败,因为您的示例数据只有 5 个 obs。顺便说一句:警告只是警告,但没有错误。 没错,这只是一个警告,但我确实需要非线性回归线,因为我必须拟合线才能将样品吸光度转换为 pg/ml PGD2。我知道至少有 6 个方程可以使用,具体取决于您正在进行的实验及其背后的科学,但是,我几乎可以肯定这是我的图表的正确方程 y~a*x/(b+x),我会仔细检查虽然 好的,我已经仔细检查过,上面的等式是错误的。最适合我的图表的方程是四参数逻辑函数:y=d + a-d/1+ (x/c)^2 使用这样的方程后,我收到以下警告:Warning: Computation failed in stat_smooth(): parameters without starting value in data: d 【参考方案1】:

所以,我想我已经找到了解决问题的方法。我安装了install.packages(drc),其中包含四参数函数。我设置了我的数据model <- drm(STD ~ Absorbance, fct = LL.4(), data = STD),然后是plot(model),然后是got

我知道它需要一些改变才能让它看起来更专业,但这只是我应该做的装饰性的事情。感谢@stefan 抽出宝贵时间。

【讨论】:

以上是关于`stat_smooth()` 中的非线性回归线及其计算失败:缺少参数“p”,没有默认错误的主要内容,如果未能解决你的问题,请参考以下文章

多项式回归原理及在sklearn中的使用+pipeline

线性回归—求解介绍及回归扩展

多元线性回归多重共线性检验及避免方法,简单点的

机器学习入门:线性回归及梯度下降

一元线性回归及案例(Python)

线性回归