Rで近似曲線を描く
EXCELとかで出す近似曲線を描いた
準備
気温のプロットと、それの近似曲線を描くことを目標にします。
気象庁から5/1のとある地点のデータを持ってきます。データの内容はこんな感じで「kion_20160501.csv」という名前にして任意の場所に保存。
時刻 | 気温 |
---|---|
2016-05-01 00:00 | 13.9 |
2016-05-01 01:00 | 13.9 |
2016-05-01 02:00 | 12.3 |
読み込む際に1列目をPOSIXct2列目をnumericとして読み込みます
kion = read.csv("kion_20160501.csv", header = T, colClasses = c("POSIXct", "numeric"))
まずはプロット
g = ggplot(kion, aes(1:nrow(kion), temp)) + geom_line(colour="blue") + labs(title="2016/05/01") plot(g)
お昼に向かって気温が高くなり、夕方に向けて気温が下がっていくのが見て取れる
近似曲線を描く
こんなデータの近似曲線は三次関数で表せます。
Rではnls関数を使うことで、変数a, b, c, dを算出できる。
x = 1:nrow(kion) y = kion[,2] kinji = nls(y ~ a * x^3 + b * x^2 + c * x + d, start=c(a=0, b=0, c=0, d=0)) summary(kinji) # Formula: y ~ a * x^3 + b * x^2 + c * x + d # # Parameters: # Estimate Std. Error t value Pr(>|t|) # a -0.009287 0.001626 -5.710 1.38e-05 *** # b 0.285935 0.061774 4.629 0.000162 *** # c -1.640390 0.671806 -2.442 0.024033 * # d 14.627075 1.979598 7.389 3.89e-07 *** # --- # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # # Residual standard error: 2.056 on 20 degrees of freedom # # Number of iterations to convergence: 1 # Achieved convergence tolerance: 6.516e-08
これで係数が出たので、プロットする。
a = -0.009 b = 0.228 c = -1.640 d = 14.627
近似曲線のプロット
predict関数でベクトルをとれます。
predict.c = predict(kinji)
ggplotでplotするためベクトルをdata.frameにしておきます
kd = data.frame(predict.c) kd$num = 1:nrow(kion)
プロットするとこんな感じ
g = ggplot(kion, aes(1:nrow(kion), temp)) + geom_line(colour="blue") + labs(title="2016/05/01") k = geom_line(aes(kd$num, kd$predict.c), colour="red") a = annotate("text", label= "y = -0.009 * x^3 + 0.285 * x^2 - 1.64 * x + 14.62", x=7, y=25, col="red") plot(g + k + a)
これで近似曲線が描けた。フィットしているようなしていないような、、、