> ssa(1:100)しかし以下のようにすると,あさってなくらい吹き飛ばされてしまいます。
[1] 101
> ssa(sin(1:100))
[1] 0.4520258
> sin(101)
[1] 0.4520258
> ssa(Nile)たぶん,Nileがあちこちで不連続だから,吹き飛ばされるのかな?と思い以下のようにすると,今度は行列が計算されなくなってしまいます。
[1] 544.1812
> ssa(spline(Nile))何かこういう不連続なデータを旨く前処理して微分可能にして,行列も計算してくれるような尤度の高い補間関数があれば,お教え願えれば幸いです。
Error in matrix(0, row, colmn) : invalid 'ncol' value (< 0)
------------------------------------------------------------------
ssa <- function(data, row=10)
{
d.len <- length(data)
colmn <- d.len - row + 1
size <- row*colmn
X <- matrix(0, row, colmn)
d.point <- 1
for (L in 1:size) {
X[L] <- data[d.point]
if (L%%row == 0) {
d.point <- d.point - row + 2
} else {
d.point <- d.point + 1
}
}
C <- X%*%t(X)/colmn
eigV <- eigen(C)$vectors
V <- eigV[, 1:(row - 1)]
L <- matrix(0, row, 1)
L[row, 1] <- 1
Q <- matrix(0, row, 1)
Q[1:(row-1), 1] <- X[2:row, colmn]
Xpre <- (( t(L)%*%V%*%t(V)%*%Q )/( 1- t(L)%*%V%*%t(V)%*%L))[1, 1]
return(Xpre)
}
No.11315 Re: いい関数を教えて下さい。 【のざわ】 2009/11/23(Mon) 19:18
少し補足説明します。
元々これは不連続があるものは,駄目なようです。> ssa(tan(1:100))tan()のように明らかに,切れ目がある奴は覚悟していましたが,Nileみたいなデータを旨く加工して,それとなく値を返して来て欲しいんですが。。
[1] 74.55493
> tan(101)
[1] 0.5067526
No.11316 Re: いい関数を教えて下さい。 【青木繁伸】 2009/11/23(Mon) 20:02
解答ではないですが,ssa(spline(Nile)) がエラーになる理由は,spline が何を返すかをチェックするとわかるでしょう。ssa(spline(Nile)$y) とすれば,734.9737 が帰ってきますが,それがあなたのお気に召すかどうかはわかりません。
No.11317 Re: いい関数を教えて下さい。 【のざわ】 2009/11/23(Mon) 20:13
いつも,どことなく間抜けな質問ばかりで済みません。spline関数の使い方を誤っていただけのようですね。。取り合えず暫く使ってみます。有難うございました。
No.11318 Re: いい関数を教えて下さい。 【のざわ】 2009/11/23(Mon) 21:27
すみません。もうひとつ質問させてください。
こういうプログラムにデータを渡す場合,不連続を連続と見せたい場合の前処理は,他には,どんなものがあるでしょうか?
確かにsplineだと,おとなしくはなったのですが,高次な埋め込み次元ほど精度良く同定されたような結果になり,どうもイメージとは合わなくなってしまいました。
No.11319 Re: いい関数を教えて下さい。 【のざわ】 2009/11/23(Mon) 22:57
どうも,やはりイメージと合わないので,こうやってみました。
> plot(Nile[1:100])
> lines(spline(Nile)$y)
ぜんぜん,splineは,fitしてる感じでは無いので,駄目なのか。と言う結論になりました。
No.11320 Re: いい関数を教えて下さい。 【青木繁伸】 2009/11/23(Mon) 23:14
> ぜんぜん,splineは,fitしてる感じでは無いので,
あの〜,length(spline(Nile)$y) をやってみて下さい。spline(Nile)$x がどのようになっているかも確かめて下さい。正しいグラフを描くには,以下のようにしないとダメですよ。(図はクリックすると原寸大に表示)plot(Nile, type="l")
lines(spline(Nile), col=2)
No.11322 Re: いい関数を教えて下さい。 【のざわ】 2009/11/24(Tue) 14:40
>正しいグラフを描くには,以下のようにしないとダメですよ。
了解しました。
splineってxとyの両方が,各々幾らなのかを出力してきてるわけですね。暫くはsplineで色々やってみます。また何か結果が得られたら報告致します。
いつも,どうも有難うございました。
● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る