0

時間の経過に伴う価格情報のggplotの散布図に、指数関数的減衰線(エラーバー付き)をプロットしようとしています。私は現在これを持っています:

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)

キーラインはgeom_smoothコマンドにありformula=y~x ます。これは線形モデルのように見えますが、ggplotは自動的にscale_y_log10を検出してログに記録するようです。

さて、ここでの私の問題は、日付が日付データ型であるということです。の形式の指数関数的減衰モデルを適用できるようにするには、t=0なので秒に変換する必要があると思いますy = Ae^-(bx)

これは、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(formula = Formula)関数呼び出しのggplotプロット内に指数関数的成長/減衰時系列モデルを適合させる便利な方法はありますか?

4

1 に答える 1

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))
于 2012-04-03T20:48:38.620 に答える