2012-04-03 5 views
0

나는 시간 경과에 따른 가격 정보의 ggplot에있는 산점도 (scatterplot)에 지수 붕괴 선 (오류 막대 포함)을 플롯하려고합니다.시계열 모델을 ggplot2 그래픽에 기하 급수적으로 감쇠 시키려면 어떻게 오버레이 할 수 있습니까?

f2 <- ggplot(data, aes(x=date, y=cost)) + 
    geom_point(aes(y = cost), colour="red", size=2) + 
    geom_smooth(se=T, method="lm", formula=y~x) + 
# geom_smooth(se=T) + 
    theme_bw() + 
    xlab("Time") + 
    scale_y_log10("Price over time") + 
    opts(title="The Falling Price over time") 
print(f2) 

이 선형 모델처럼 보이지만 핵심 라인은 formula=y~x의, geom_smooth 명령에, ggplot 자동으로 내 scale_y_log10을 감지하고 기록하는 것 : 나는 현재이 있습니다.

이제 내 문제는 날짜가 날짜 데이터 유형이라는 것입니다. y = Ae^-(bx) 형태의 지수 함수를 적용하려면 t = 0부터 초로 변환해야한다고 생각합니다.

나는 y = exp (x)와 같은 것을 시도했을 때, 나는 (?) 내가 지수의 지수를 가질 수 없다고 말하는 메시지를 얻었 기 때문에 이것을 믿는다. 그것은 읽

Error in lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, : NA/NaN/Inf in foreign function call (arg 1)

그러나 log(y) = x 올바르게 작동합니다. (y는 숫자 데이터 유형이고 x는 날짜 임)

geom_smooth (수식 = 수식) 함수 호출에 ggplot 플롯 내에서 지수 증가/감소 시간 시리즈 모델을 맞추는 편리한 방법이 있습니까?

+0

'geom_smooth (방법 = "GLM"가족 = 가우스 (링크 = "로그 "))'? –

+0

(재현 가능한 예제가 좋을 것입니다.) –

+0

유망 해 보입니다. 시작 값을 지정하는 구문을 알고 있습니까? 내가 기본값으로 시도했을 때,'Error in eval (expr, envir, enclos) : 은 유효한 시작 값을 찾을 수 없다 : 을 지정하십시오. – Mittenchops

답변

5

이 내가이 지저분한/실제 데이터와 얼마나 몹시 신경을 쓰는 모르겠지만, 일을 나타납니다

어쩌면
set.seed(101) 
dat <- data.frame(d=seq.Date(as.Date("2010-01-01"), 
         as.Date("2010-12-31"),by="1 day"), 
       y=rnorm(365,mean=exp(5-(1:365)/100),sd=5)) 

library(ggplot2) 
g1 <- ggplot(dat,aes(x=d,y=y))+geom_point()+expand_limits(y=0) 
g1+geom_smooth(method="glm",family=gaussian(link="log"), 
       start=c(5,0)) 
+1

Perfect! 이것은 내 데이터에 전혀 맞지 않지만 분명히 올바른 대답입니다. =) – Mittenchops