0

私は昨日この質問を投稿しましたが、私の投稿が少し望まれていないという貴重なフィードバックを受け取りました:)。これは更新された試みであり、うまくいけばより明確になります。

xts 動物園オブジェクトがあり、R を使用して過去 20 期間の勾配係数の t 統計を決定し、その t 値が > 2 であるかどうかをテストしたいと考えています。

class(prices)

[1] "xts" "zoo"

tail(prices)
             IWM    SPY    TLT
2012-10-24 81.20 141.02 121.48
2012-10-25 81.53 141.43 120.86
2012-10-26 81.14 141.35 122.64
2012-10-31 81.63 141.35 123.36
2012-11-01 82.49 142.83 122.35
2012-11-02 81.19 141.56 122.26

各列と時間の回帰を実行する方法がわからなかったので、インデックスを使用して新しい列 (daynumber) を作成し、インデックスと回帰を実行しました。

lastprices = last(prices,20)
prices.data.frame = as.data.frame(lastprices)
daynumber = index(prices.data.frame)
pdfd = data.frame(prices.data.frame, daynumber)
pdfd.lm = lm(pdfd$daynumber ~ ., data=pdfd)
tstat = coef(summary(pdfd.lm))
tstat[,"t value"]
(Intercept)         IWM         SPY         TLT 
  4.5426630  -0.1788975  -1.3521969  -2.2362345 
tstattest = ifelse(tstat[,"t value"]>2,1,0)
tstattest
(Intercept)         IWM         SPY         TLT 
          1           0           0           0 

これは、このタスクを達成するための最も効率的な方法ではないと思わざるを得ません。daynumber 列を作成せずに、各列と時間の回帰を実行する方法についてアイデアを持っている人はいますか?

ありがとう - 勉強を始めたばかりなので、安心してください!

4

1 に答える 1

0

あなたの元々の問題は有益な進歩を遂げたと思います。名前のないパッケージからの出力形式だと思ったのは、実際には、数式のLHSに複数の列があるlmの出力でした。私があなたの2番目のバージョンでしたことはこれです:

require(zoo)
require(xts)
prices <- read.zoo(text="dt           IWM    SPY    TLT
 2012-10-24 81.20 141.02 121.48
 2012-10-25 81.53 141.43 120.86
 2012-10-26 81.14 141.35 122.64
 2012-10-31 81.63 141.35 123.36
 2012-11-01 82.49 142.83 122.35
 2012-11-02 81.19 141.56 122.26", index=1, header=TRUE, FUN=as.Date, format="%Y-%m-%d")
 prices <- as.xts(prices)
dprice <- as.data.frame(prices)
dprice$dat <- 1:6

lm( cbind(IWM,SPY , TLT) ~dat , data=dprice)
#-------------
Call:
lm(formula = cbind(IWM, SPY, TLT) ~ dat, data = dprice)

Coefficients:
             IWM        SPY        TLT      
(Intercept)   81.19800  140.90000  121.24933
dat            0.09486    0.19714    0.25971

その出力にはt値がないことに注意してください。summary.lm関数はそれらを作成します:

tstat = coef(summary(fit))
tstat
#--------------
Response IWM :
               Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 81.19800000  0.4993259 162.6152292 8.578215e-09
dat          0.09485714  0.1282151   0.7398284 5.004726e-01

Response SPY :
               Estimate Std. Error    t value     Pr(>|t|)
(Intercept) 140.9000000  0.5356109 263.064096 1.252746e-09
dat           0.1971429  0.1375322   1.433431 2.250283e-01

Response TLT :
               Estimate Std. Error   t value     Pr(>|t|)
(Intercept) 121.2493333  0.7632198 158.86556 9.417108e-09
dat           0.2597143  0.1959767   1.32523 2.557232e-01

3つの行列のリストからt値を抽出するには、lapplyを使用できます。

lapply( coef(summary(fit)), "[" , ,"t value")
#----------
$`Response IWM`
(Intercept)         dat 
162.6152292   0.7398284 

$`Response SPY`
(Intercept)         dat 
 263.064096    1.433431 

$`Response TLT`
(Intercept)         dat 
  158.86556     1.3252

切片だけを取得するには、次を使用できます。

 lapply( coef(summary(fit)), "[" , "(Intercept)","t value")
#-----
$`Response IWM`
[1] 162.6152

$`Response SPY`
[1] 263.0641

$`Response TLT`
[1] 158.8656

このコンテキストでは、インターセプト値はほとんど意味がないことに注意してください。1:6の数値を使用すると、1つの切片が得られ、Dates-classes値を使用すると、完全に異なる値が得られます。t検定は、切片がゼロであるかどうかについてのものであり、スケールはかなり恣意的であるため、コーディングとゼロ値が意味することを非常に確信していない限り、解釈はありません。

于 2012-11-05T05:46:19.033 に答える