私は2つのベクトルを持っています、x
そしてy
。
x
は、各エントリが数年間の1か月を表すベクトルであるため、(たとえば)10年間のデータがありますlength(x) = 120
。(私は「posix.ct」コマンドを使用したので、その意味では実際には「月」ですが、どの月とどの年の特定の要素がすでにわかっているので、何かのx
ような数値ベクトルとして持つことはできませんでしたに対応しますか?つまり、の場合、それは2年目の2月であることがわかります。c(1:n)
c(1:n)
x = c(1:n)
x[13]
yは、各要素が特定の月の特定の変数の観測値であるベクトルです。したがって、観測されたデータは、このようにグループ化されます(1月、0.123)、(2月、2.125)など。私はその月に2つのベクトルを持っています。
x1 = seq(as.POSIXct("YYYY-MM-DD", tz="GMT"),
as.POSIXct("YYYY-MM-DD", tz="GMT"),
by="month")
x2 = c(1:length(x1))
私がやりたいのはksmoothを実行することです:
plot(x1,y)
smooth = ksmooth(x2,y,"normal")
lines(smooth)
plot()コマンドでx1を使用する理由は、x軸を時間内に取得する方法がわからないためです。
何も指定していない場合、Rは適切な平滑化パラメーターを自動的に検出する必要があります。その結果、ksmooth $ yは入力ベクトルyに等しくなります!また、プロットには垂直バーが作成されます。上記のコードででx2
置き換えると、入力の値と等しい最初と最後を除くすべての値のNAになります。 x1
ksmooth$y
y
だから私はいくつかの帯域幅を試します
h = 0.1
::今smooth$y = y
、以前のように。垂直バーが生成されます(コマンドで指定したのと同じ色なlines()
ので、コマンドと関係がある必要がありksmooth
ます)
h = 10
:smooth $ yで奇妙でない結果が得られますが、垂直バーは以前と同じように生成されます。
次に、非常に広い帯域幅というクレイジーなアイデアを試しました。
:これは、上記のコードのように使用しh = 1e+06
たときに何も生成しませんでした。しかし、に変更すると、いくつかの良い結果が得られます。(それは巨大です!!)私は非常に素晴らしい結果を得ることができます。(データに適合し、見栄えのする曲線が得られます)しかし、それは合理的ですか?私が見たすべての例で、hは0.1と10の間の何かです。経験則について何か聞いた:hはn ^(-1/5)に等しくなければならない。ここでnはデータポイントの数である。x1
x2
x2
x1
h = 1e+09
h = 1e+09