按代表、拟合模型和积分曲线对数据进行分组
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(.))
随着时间的推移,我有一系列的点,我想为这些点拟合一条曲线,然后找到曲线下的面积。我可以这样做:
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(.))