5

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

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))

在此处输入图像描述

4

1 回答 1

5

如果您知道切点在哪里并且切点之前的值为零:

sfun <- function(x,brk,a=1) {
    ifelse(x<brk,0,suppressWarnings(a*sqrt(x-brk)))
}

suppressWarnings()是否存在,因为ifelse对 的所有值同时评估ifelse情况x,并且我们不想要关于取负数平方根的警告)

测试(未显示):

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)

由于我们只需要弄清楚平方根函数是如何缩放的,因此我们可以通过原点进行回归来做到这一点(-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")

在此处输入图像描述

于 2013-06-14T21:32:51.050 回答