`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)+
然后出现具有a
和b
值的线性回归线方程。在这种情况下,使用以下内容后:
stat_smooth(method= "nlm",
formula = y~a*x/(b+x),
method.args = list( start = c(a = 3.8, b = 1457.2)),
se=FALSE)+
我收到上述错误。
你可能会问我从哪里得到a
和b
值?我是从:
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”,没有默认错误的主要内容,如果未能解决你的问题,请参考以下文章