6

私は株式のペア(ペア取引)について少し分析を始めています。これがグラフを作成するために書いた関数です(pairs.report-以下にリストされています)。

1つのプロットに3つの異なる線をプロットする必要があります。私がリストした関数は、私がやりたいことを実行しますが、x軸(タイムライン)を細かくカスタマイズしたい場合は、少し手間がかかります。そのままでは、x軸に年(10年のデータの場合)または月(6か月のデータの場合)のみを出力し、目盛りのフォーマットはありません。

xtsオブジェクトを使用する場合、つまり、

plot(xts-object-with-date-asset1-asset2, ...)

それ以外の

plot(date, asset2, ...)

(グリッドとボックスとともに)適切にフォーマットされたx軸をすぐに取得しますが、points()、text()、lines()などの関数を使用したプロットへのその後の追加は失敗します。points.xts()とtext.xts()はすぐには出てこないと思います。

xtsオブジェクトの利便性が欲しいのですが、プロットをきめ細かく制御する必要もあります。では、私のワークフローはどのようにすべきでしょうか?基本的なグラフィックに固執し、すべてのカスタマイズを手動で行う必要がありますか?または、xtsを機能させる方法はありますか?

私はlatticeとggplot2を知っていますが、今は使いたくありません。これが私が言及した機能です(コードの改善のための批判/提案は大歓迎です)-

library(xts)

pairs.report <- function(asset1, asset2, dataset) {

#create data structures
attach(dataset)
datasetlm <- lm(formula = asset1 ~ asset2 + 0, data = dataset)
beta = coef(datasetlm)[1]

#add extra space to right margin of plot within frame
par(mar=c(5, 4, 4, 4) + 0.1)

# Plot first set of data and draw its axis
ylim <- c(min(asset2,asset1), max(asset2,asset1))
plot(date, 
     asset2,  
     axes=T, 
     ylim=ylim, 
     xlab="Timeline", 
     ylab="asset2 and asset1 equity", 
     type="l", 
     col="red", 
     main="Comparison between asset2 and asset1")
lines(date, asset1, col="green")
box()
grid(lwd=3)

# Allow a second plot on the same graph
par(new=T)

# Plot the second plot and 
ylim <- c(min(asset1-beta*asset2), max(asset1-beta*asset2))
plot(date, 
     asset1-beta*asset2, 
     xlab="", ylab="", 
     ylim=ylim, 
     axes=F, 
     type="l", 
     col="blue")

#put axis scale on right
axis(side=4, 
     ylim=ylim, 
     col="blue",
     col.axis="blue")
mtext("Residual Spread",side=4,col="blue",line=2.5)

abline(h=mean(asset1-beta*asset2))
}
4

1 に答える 1

4

plot.xtsは基本プロット関数です。これは、plot.xtsが使用するのと同じx引数を使用できることを意味points.default()lines.default()ます。しかし、それは必要ありません。xtsおよびzooパッケージがロードされ、実行methods(lines)してメソッド(ポイント)を実行すると、そのような関数がすでに使用可能になっていることがわかるため、xtsパッケージとzooパッケージではすでにハッシュ化されています。points.zoo?plot.zooページに記載されています。

于 2011-08-11T12:39:53.053 に答える