按代表、拟合模型和积分曲线对数据进行分组

Group data by rep, fit model, and integrate curve

随着时间的推移,我有一系列的点,我想为这些点拟合一条曲线,然后找到曲线下的面积。我可以这样做:

fit<-loess(mass ~ hour, df)
f <- function(x) predict(fit,newdata=x)
answer<-integrate(f, 0, 60)$value  

到目前为止,还不错,但我的问题是我有重复的要点。我想要每个复制的拟合和值。

trt    rep    hour    mass
y      a      1       3
y      a      2       5
y      a      3       8
y      a      4       6
y      b      1       2
y      b      2       3
y      b      3       5
y      b      4       4
n      c      1       4
n      c      2       6
n      c      3       8
n      c      4       7
n      d      1       5
n      d      2       7
n      d      3       8
n      d      4       7 

我想 dplyr::group_by(rep),但分组没有达到 fit。我也可以在 nlme 中进行分组并使用 nlsList,但该包通常不能很好地与 loess 或多项式一起使用。

似乎是 do() 的情况。使用您的示例数据

dd <- read.table(text="trt    rep    hour    mass
y      a      1       3
y      a      2       5
y      a      3       8
y      a      4       6
y      b      1       2
y      b      2       3
y      b      3       5
y      b      4       4
n      c      1       4
n      c      2       6
n      c      3       8
n      c      4       7
n      d      1       5
n      d      2       7
n      d      3       8
n      d      4       7 ", header=T)

和你的面积计算

get_area <- function(df) {
    fit <- loess(mass ~ hour, df)
    f <- function(x) predict(fit,newdata=x)
    integrate(f, 0, 60)$value  
}

你可以 运行

dd %>% group_by(rep) %>% do(area=get_area(.))