按照rep,fit模型和积分曲线分组数据

时间:2017-03-15 14:59:28

标签: r dplyr modelr

随着时间的推移,我有一系列的分数,我希望在这些点上拟合曲线,然后找到曲线下面的区域。我可以这样做:

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或一般多项式方面效果不佳。

1 个答案:

答案 0 :(得分:2)

似乎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(.))