如何从 R 中的几个数据点获得平滑曲线?

How do I get a smooth curve from a few data points, in R?

我正在尝试绘制随 mue 变化的速率 1/t。下面给出了代码,我已经突出显示了输入和输出的相关行。


library("deSolve")
library("reshape")
library("tidyverse")


Fd <- data.frame()
MUES <- c(100, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 100010, 100020, 100050, 100060, 100080, 100090, 100100, 100500) # <------ THIS IS THE INPUT

for (i in 1:length(MUES)){
parameters <- c(tau = 0.005, tau_r = 0.0025, mui=0, Ve=0.06, Vi=-0.01, s=0.015, mue=MUES[i])
state <- c(X = 0.015, Y = 0)
Derivatives <-function(t, state, parameters) {
      #cc <- signal(t)
 with(as.list(c(state, parameters)),{
 # rate of change
 dX <- -(1/tau + mue - mui)*X + (Y-X)/tau_r + mue*Ve - mui*Vi
 dY <- -Y/tau + (X-Y)/tau_r

 # return the rate of change
 list(c(dX, dY))
 }) # end with(as.list ...
 }
times <- seq(0, 0.1, by = 0.0001)
out <- ode(y = state, times = times, func = Derivatives, parms = parameters)

out.1 <- out %>% 
  as.data.frame() %>% summarise(d = min(times[Y >=0.015]))
Time <- out.1$d
    localdf <- data.frame(t=Time, rate= 1/Time, input=MUES[i])
Fd <- rbind.data.frame(Fd, localdf)}. # <----- THIS IS THE DATAFRAME WITH OUTPUT AND INPUT

spline_int <- as.data.frame(spline(Fd$input, Fd$rate))
ggplot(Fd) + 
  geom_point(aes(x = input, y = rate), size = 3) +
  geom_line(data = spline_int, aes(x = x, y = y))

速率 1/t1276 处有一个极限值,这就是为什么我最后采用了相当多的 mue 值来强调这一点。我得到这样的图表:

我想要的是下面这样的东西,所以我可以强调一个事实,即速率 1/t 不会增长到无穷大,而且实际上有一个极限值。下图来自.

如何在 R 中完成此操作?我已经尝试过黄土和样条曲线以及 geom_smooth(但只是改变了跨度),也许我遗漏了一些明显的东西。

样条曲线是具有多个拐点的多项式。听起来您想拟合对数曲线:

# fit a logarithmic curve with your data
logEstimate <- lm(rate~log(input),data=Fd)

# create a series of x values for which to predict y 
xvec <- seq(0,max(Fd$input),length=1000)

# predict y based on the log curve fitted to your data
logpred <- predict(logEstimate,newdata=data.frame(input=xvec))

# save the result in a data frame
# these values will be used to plot the log curve 
pred <- data.frame(x = xvec, y = logpred)

ggplot() + 
  geom_point(data = Fd, size = 3, aes(x=input, y=rate)) +
  geom_line(data = pred, aes(x=x, y=y))

结果:

我从this answer那里借用了一些代码。