r - 如何从 R 中的 nlrq 获取情节?
问题描述
遵循非线性分位数回归的工作流程似乎有效。但是我不知道如何绘制结果曲线。
顺便说一句:我更喜欢使用函数 graphics::curve() 而不是 graphics::lines()
require(quantreg)
# load sample data
dat <- DNase
# introduce variable
x <- DNase$conc
y <- DNase$density
# introduce function
f <- function(a, b, x) {(a*x/(b+x))}
# fit the model
fm0 <- nls(log(y) ~ log(f(a,b,x)), dat, start = c(a = 1, b = 1))
# fit a nonlinear least-square regression
fit <- nls(y ~ f(a,b,x), dat, start = coef(fm0))
# receive coeffientes
co <- coef(fit)
a=co[1]
b=co[2]
# plot
plot(y~x)
# add curve
curve((a*x/(b+x)), add=T)
# then fit the median using nlrq
dat.nlrq <- nlrq(y ~ SSlogis(x, Asym, mid, scal), data=dat, tau=0.5)
# add curve
???
编辑:我正在寻找的是一种绘制公式的各种分位数回归的方法,例如 a*x/(b+x)。插入公式让我想到了将什么作为“开始”参数的问题
dat.nlrq.075 <- nlrq(formula=fit, data = dat, start=???, tau = 0.75)
解决方案
curve
使用lines
所以curve
当它更容易使用时真的没有理由使用lines
。
首先确保对数据进行排序,以便正确显示图。然后拟合nls
或nlrq
用于fitted
拟合线。
library(quantreg)
dat <- DNase[order(DNase$conc), ]
fit.nlrq <- nlrq(density ~ SSlogis(conc, Asym, mid, scal), data = dat, tau = 0.5)
plot(density ~ conc, dat)
lines(fitted(fit.nlrq) ~ conc, dat)
如果您想在不同数量的等距点(例如 250)处绘制拟合,则执行相同操作,但使用predict
而不是fitted
:
x <- seq(min(dat$conc), max(dat$conc), length = 250)
lines(predict(fit.nlrq, list(conc = x)) ~ x, lty = 2, col = "red")
相同的样式适用于nls
.
注意如果你使用require
它的值应该被检查。如果您不想这样做,请library
改用。
推荐阅读
- scala - 如果存在 Scala 选项,则设置多个 val 如果 None 将相同的多个 val 设置为空字符串
- microsoft-edge - 在 Windows Server 2019 上安装的 Edge 浏览器上禁用自动更新
- c# - 实体框架平均值与分组
- sqlalchemy - 在 GeoAlchemy 和 PostGIS 中查找最近的位置
- python - 如何在 Discord.py 机器人中使用 max_concurrency()
- java - 无法使用 Selenium Webdriver 和 java 客户端单击输入类型提交导航
- javascript - jsPDF——字体这么大,每个字母占 3 页?
- firebase - Flutter,当我从 firebase 消息发送通知时,我收到此错误并且我的应用程序冻结
- python - 如何用 scipy 计算单边公差区间
- linker - 在 gnu 链接描述文件中使用 ALIGN 命令