测量显示信号形成为具有偏移和因子的平方根函数。如何在一个图中找到系数并绘制原始数据和拟合曲线?
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))
答案 0 :(得分:5)
如果您知道切割点的位置以及切割点之前的值为零:
sfun <- function(x,brk,a=1) {
ifelse(x<brk,0,suppressWarnings(a*sqrt(x-brk)))
}
(suppressWarnings()
因为ifelse
对x
的所有值的 if 和 else 案例进行了评估,并且我们不希望有关于取负数的平方根的警告。
测试(未显示):
curve(sfun(x,1,1),from=0,to=10) ## test (not shown)
模拟一些数据:
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)
由于我们需要弄清楚平方根函数是如何缩放的,我们可以通过原点回归来做到这一点(如果你想让cutpoint下面的值允许,可以取出-1
非零):
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")