0

3つのグラフィックを1つのグラフに結合したいと思います。「nottem」であるRの内側からのデータ。誰かが、季節平均と高調波(正弦波モデル)とその時系列プロットを異なる色を使用してまとめるコードを書くのを手伝ってもらえますか?私はすでにモデルコードを書いたのですが、それらを組み合わせて比較する方法がわかりません。

Code :library(TSA)
  nottem
  month.=season(nottem)
  model=lm(nottem~month.-1)
  summary(nottem)
  har.=harmonic(nottem,1)
  model1=lm(nottem~har.)
  summary(model1)
plot(nottem,type="l",ylab="Average monthly temperature at Nottingham castle") 
points(y=nottem,x=time(nottem), pch=as.vector(season(nottem)))
4

2 に答える 2

1

3 つの値のセットが非常に似ているため、このグラフは非常に読みにくいものです。それでも、単純にこれらすべてをサンプル プロットにグラフ化したい場合は、モデルによって生成された係数を使用することで非常に簡単に実行できます。

ステップ 1 : 生データをプロットします。これは元のコードからのものです。

plot(nottem,type="l",ylab="Average monthly temperature at Nottingham castle") 

ステップ 2 : 平均プロットと余弦プロットの x 値を設定します。

x <- seq(1920, (1940 - 1/12), by=1/12)

ステップ 3 : 最初のモデルの係数を繰り返して、季節平均をプロットします。

lines(x=x, y=rep(model$coefficients, 20), col="blue")

ステップ 4 : 2 番目のモデルの係数を使用して余弦関数の y 値を計算し、プロットします。

y <- model1$coefficients[2] * cos(2 * pi * x) + model1$coefficients[1]
lines(x=x, y=y, col="red")

ggplot variant : プロットで人気のある 'ggplot2' パッケージに切り替える場合は、次のようにします。

x <- seq(1920, (1940 - 1/12), by=1/12)
y.seas.mean <- rep(model$coefficients, 20)
y.har.cos <- model1$coefficients[2] * cos(2 * pi * x) + model1$coefficients[1]

plot_Data <- melt(data.frame(x=x, temp=nottem, seas.mean=y.seas.mean, har.cos=y.har.cos), id="x")
ggplot(plot_Data, aes(x=x, y=value, col=variable)) + geom_line()
于 2013-02-04T18:19:37.943 に答える
1

時系列を行列の中に入れるだけです:

x = cbind(serie1 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2)),
serie2 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2)))

plot(x)

または、プロット領域を構成します。

par(mfrow = c(2, 1)) # 2 rows, 1 column
serie1 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2))
serie2 = ts(cumsum(rnorm(100)), freq = 12, start = c(2013, 2))

require(zoo) 
plot(serie1)
lines(rollapply(serie1, width = 10, FUN = mean), col = 'red')
plot(serie2)
lines(rollapply(serie2, width = 10, FUN = mean), col = 'blue')

それが役に立てば幸い。

PS .:この例ではzooパッケージは必要ありません。フィルター機能を使用できます。次の方法で季節平均を抽出できます。

s.mean = tapply(serie, cycle(serie), mean)
# January, assuming serie is monthly data
print(s.mean[1])
于 2013-02-04T17:52:40.833 に答える