2016-08-31 10 views
3

私は線形回帰関数lmが1分間隔の時系列で完全に機能するかどうか疑問に思っています。私ははいと思っていますが、一見このような場合はありません。私はlm(z ~ index(z))lm関数on 1min xts時系列

Coefficients: 
(Intercept)  index(z) 
     11   NA 

だから、回帰の傾きがNAであるを与える適用z

      mean 
    2016-03-11 08:37:00 10 
    2016-03-11 08:38:00 11 
    2016-03-11 08:39:00 12 

XTS時系列以下を持っています。なぜだろう?私はこれを計算することができなかった数学的な理由は見ません。

私はzが予想通り

     mean 
2016-03-11 08:33:00 10 
2016-03-11 08:38:00 11 
2016-03-11 08:39:00 12 

次いでlm(z ~ index(z))作品に等しく、4.839e-3

Coefficients: 
(Intercept)  index(z) 
-7.053e+06 4.839e-03 
の傾きを戻し、5分間の間隔を有するように最初の行の時間を変更する場合

lmの機能がどのように機能するかについて私は誤解していますか?または誰でもこの動作についてコメントできますか? 1minの勾配を計算できる他の関数はありますか?

+1

良い質問!再現可能な例がありますか? – nilsole

答えて

3

これはxtsやlmの機能に固有のものではありません。一般的に線形回帰係数を見積もる際の問題です。実質的に変化しないデータ(浮動小数点演算の精度内)を使用してデータ系列の変動を見積もることはできません。

あなたはあなたの最初の例は計算単数形であることがわかります。

lm(z ~ index(z), singular.ok=FALSE) 
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
    singular fit encountered 

しかし、それはあなたが許容値を下げた場合、「仕事」が、犠牲数値的安定性ということになります。あなたは十分なバリエーションを作成したので

lm(z ~ index(z), singular.ok=FALSE, tol=1e-8) 

Call: 
lm(formula = z ~ index(z), singular.ok = FALSE, tol = 1e-08) 

Coefficients: 
(Intercept)  index(z) 
-2.430e+07 1.667e-02 

あなたの第二の例は動作します。

+0

ありがとう、耐性を下げることは私の問題を解決し、私のために正常に動作します。私はちょうど別の回帰計算から来るこれらの点の傾きを知りたいので、十分に重要であるはずです。しかし、私は数学的な背景についてもっと読むべきだと思います。 – Mike

+0

Joshuaは、事前にインデックスをスケールアップして、 'tol'と同じ結果を得ますか?例えば。 'ix < - as.numeric(index(z))* 10; lm(z〜ix)'(補償するために 'ix'係数を後でスケーリングします)。 –

+0

@DarrenCook:はい、うまくいくはずです。この問題に遭遇した場合は、線形モデルを見積もる際により高い精度をサポートするパッケージを使用する価値があります。私は何も知らないが、もし存在しなければ私は驚くだろう。 –