R 如何使用非线性函数拟合数据和绘图数据,以及如何使用ggplot()拟合数据

R 如何使用非线性函数拟合数据和绘图数据,以及如何使用ggplot()拟合数据,r,ggplot2,curve-fitting,R,Ggplot2,Curve Fitting,测量显示一个信号,该信号的形式类似于具有偏移量和因子的平方根函数。如何在一个图中找到系数并绘制原始数据和拟合曲线 require(ggplot2) require(nlmrt) # may be this will help later..? # generate simulated measurement data time <- seq(-10,20,0.2) signal <- sqrt(time + 2) # generate sqrt signal; include

测量显示一个信号,该信号的形式类似于具有偏移量和因子的平方根函数。如何在一个图中找到系数并绘制原始数据和拟合曲线

require(ggplot2)
require(nlmrt)  # may be this will help later..?

# generate simulated measurement data

time <- seq(-10,20,0.2)

signal <- sqrt(time + 2) # generate sqrt signal; includes some NA
signal[is.na(signal)] <- 0 # set all NA to zero
signal <- signal + rnorm(length(time)) * 0.1  # add noise

df <- data.frame(x=time, y=signal)

# find coefficiants for y ~ b * sqrt(x - a)
# no idea how...

# plot raw data and fitted curve in one ggplot diagram

ggplot()+
    geom_point(data=df, aes(x=x, y=y))
require(ggplot2)
需要(nlmrt)#这可能会有帮助吗。。?
#生成模拟测量数据

时间前提是您知道切点在哪里,并且切点之前的值为零:

sfun <- function(x,brk,a=1) {
    ifelse(x<brk,0,suppressWarnings(a*sqrt(x-brk)))
}
模拟一些数据:

x <- seq(0,10,length=101)
set.seed(1)
y <- rnorm(length(x),sfun(x,1,1),sd=0.25)
DF <- data.frame(x,y)

只是一个提示,您可能需要拟合
y~b*sqrt(x-a)
,而不是
a+b*sqrt(c*x)
。如果无法预先指定截止点(即,如果它是拟合参数),则可能需要单独拟合(它不适合线性模型框架,而且拟合截止值有一些特别棘手的方面,因为拟合优度在数据点之间的间隔上是平坦的)。如果您可以指定截止值,那么我认为您可以构造一个虚拟变量并执行此操作…作为第一步,我可以手动为截止值定义一个常量。稍后,我希望找到自动的。但这可能是另一个问题的主题。哎呀,我甚至没有注意到您提供了自己的模拟代码。任何想要的人都可以感受到free在OP的例子中编辑。完美!灰色带的宽度是如何定义的?我甚至可以将系数作为数字得到吗?灰色带是95%的置信区间。如果你想要系数,只需执行
lm(y~sfun(x,brk=1)-1,data=DF)
x <- seq(0,10,length=101)
set.seed(1)
y <- rnorm(length(x),sfun(x,1,1),sd=0.25)
DF <- data.frame(x,y)
library("ggplot2")
theme_set(theme_bw())
ggplot(DF,aes(x,y))+geom_point()+
    geom_smooth(method="lm",
                formula=y~sfun(x,brk=1)-1)
ggsave("truncsqrt.png")