如何从R中的nlrq获取图?

时间:2018-07-07 12:49:26

标签: r curve nls non-linear-regression quantreg

下面的非线性分位数回归工作流程似乎奏效。但是我不知道如何绘制结果曲线。

顺便说一句:我更喜欢使用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)

1 个答案:

答案 0 :(得分:2)

dataFrame.createOrReplaceTempView("your_table") val progressDf = sparkSession.sql( """ SELECT name, player_id, data_ms, coins, COALESCE(progress, LAST_VALUE(progress, TRUE) over (PARTITION BY player_id ORDER BY data_ms ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS progress FROM your_table; """ ) 使用curve,因此实际上更没有理由使用lines来使用curve

首先确保对数据进行排序,以使绘图正确显示。然后使用linesnls进行拟合,并使用nlrq作为拟合线。

fitted

如果要在不同数量的等距点(例如250)上绘制拟合,请执行相同操作,只是使用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) 而不是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