代わりにsm.density
、デフォルトよりも細かいグリッドで密度を評価し、approx
またはapproxfun
を使用して、必要な密度の補間値を指定しReturns
ます。ダミーデータを使用した例を次に示します。
set.seed(1)
foo <- data.frame(Date = seq(as.Date("2010-01-01"), as.Date("2010-12-31"),
by = "days"),
Returns = rnorm(365))
head(foo)
## compute the density, on fin grid (512*8 points)
dens <- with(foo, density(Returns, n = 512 * 8))
この時点で、返された密度のおよびコンポーネントapprox()
を補間するために使用できますが、同じことを行い、補間を行うために使用できる関数を返す方を好みます。まず、補間関数を生成します。x
y
approxfun()
## x and y are components of dens, see str(dens)
BAR <- with(dens, approxfun(x = x, y = y))
BAR()
これで、たとえば最初の場合など、任意の時点で補間された密度を返すために使用できますReturns
。
> with(foo, BAR(Returns[1]))
[1] 0.3268715
例を終了するには、各データムの密度を に追加しReturns
ます。
> foo <- within(foo, Density <- BAR(Returns))
> head(foo)
Date Returns Density
1 2010-01-01 -0.6264538 0.3268715
2 2010-01-02 0.1836433 0.3707068
3 2010-01-03 -0.8356286 0.2437966
4 2010-01-04 1.5952808 0.1228251
5 2010-01-05 0.3295078 0.3585224
6 2010-01-06 -0.8204684 0.2490127
補間がどの程度うまく機能しているかを確認するために、密度と補間されたバージョンをプロットして比較できます。Returns
必要な効果を得るlines
には、データを昇順で表示する必要があるため、並べ替える必要があることに注意してください。
plot(dens)
with(foo, lines(sort(Returns), BAR(sort(Returns)), col = "red"))
次のようなものが得られます。

密度が十分に細かい点のセット (上記の例では 512*8) で評価される限り、何の問題もないはずであり、補間されたバージョンと実際のものとの違いを見分けるのは難しいでしょう。の値に「ギャップ」がある場合、プロットするように要求したポイントを結合するだけで、直線セグメントがギャップの位置で黒の密度に従わないことがありますReturns
。これは、補間の問題ではなく、lines()
ギャップとその仕組みの単なるアーティファクトです。lines()