2017-03-15 4 views
0

시간이 지남에 따라 일련의 포인트가 있으며이 커브에 커브를 맞추고 커브 아래의 영역을 찾고 싶습니다. 나는 이것을 다음과 같이 할 수있다 :담당자에 의한 데이터 그룹핑, 모델 적합 및 곡선 통합

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 또는 다항식과 잘 작동하지 않습니다.

답변

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(.)) 
관련 문제