2014-02-11 1 views
2

xts 객체를 사용하여 선형 회귀를 수행하는 방법은 무엇입니까? lm(xtsObject ~ index(xtsObject))이 작동하지 않습니다. 시도했습니다.XTS 객체를 사용한 선형 회귀

내 데이터는 회사의 일일 주가입니다. index은 신기원 이래로 초를 나타내며 lm 기능을 제공합니다. 어떻게 해결할 수 있습니까?

+5

dyn 패키지는 동물원 개체에 회귀를 수행 할 수 있습니다. –

답변

3

xtsObject의 데이터와 시간 인덱스 (이미 수행 한대로)를 데이터 프레임에 추출하여 적절한 이름을 지정하십시오. 이 이름을 사용하는 수식의 변수를 참조하고이 데이터 프레임을 인수 데이터로 전달하십시오.

require("xts") 
data(sample_matrix) 
xtsObject <- as.xts(sample_matrix, descr="my new xts object") 

## the example ts has several variables Open High Low Close, 
## here I take just one, "Open" 
df <- data.frame(xtsObject['/'][,"Open"], Time = index(xtsObject)) 
head(df) 

> head(df) 
       Open  Time 
2007-01-02 50.03978 2007-01-02 
2007-01-03 50.23050 2007-01-03 
2007-01-04 50.42096 2007-01-04 
2007-01-05 50.37347 2007-01-05 
2007-01-06 50.24433 2007-01-06 
2007-01-07 50.13211 2007-01-07 

지금, 단순한 일을 의심 그래서 만약

mod <- lm(Open ~ Time, data = df) 
summary(mod) 

> mod <- lm(Open ~ Time, data = df) 
> summary(mod) 

Call: 
lm(formula = Open ~ Time, data = df) 

Residuals: 
    Min  1Q Median  3Q  Max 
-1.16144 -0.47952 -0.08462 0.57053 1.44329 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept) 3.199e+02 1.199e+01 26.68 <2e-16 *** 
Time  -2.302e-07 1.020e-08 -22.57 <2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.6146 on 178 degrees of freedom 
Multiple R-squared: 0.741, Adjusted R-squared: 0.7395 
F-statistic: 509.2 on 1 and 178 DF, p-value: < 2.2e-16 

lm() 아무것도에 대한 XTS 객체를 알고 모델에게 적합하고 그것에게 무언가를 건네 예를 들어, ?xts의 예제 데이터를 사용하여 알지.

xtsObject['/'] 대신 coredata(xtsObject)을 사용할 수 있습니다.

> head(coredata(xtsObject)) 
     Open  High  Low Close 
[1,] 50.03978 50.11778 49.95041 50.11778 
[2,] 50.23050 50.42188 50.23050 50.39767 
[3,] 50.42096 50.42096 50.26414 50.33236 
[4,] 50.37347 50.37347 50.22103 50.33459 
[5,] 50.24433 50.24433 50.11121 50.18112 
[6,] 50.13211 50.21561 49.99185 49.99185 
+0

오해의 소지가 있지만 전부가 아니라 잘못된 제안을 제안했다고 생각합니다. 아래에서 내 대답을 읽고 당신의 생각을 알려주십시오. –

+0

이것은 통계 도움말 사이트는 아니지만 프로그래밍에 관한 사이트입니다. OP는 * no * 데이터와 함께 질문을 제기했습니다. 몇 가지 데이터를 구성하고 원하는 것을 수행하는 방법을 보여주었습니다. 트렌드 구성 요소에 대해 원하는 규모를 결정하는 것은 영업 담당자의 몫입니다. 실제로 보여준 것만으로 볼 수있는 유일한 문제입니다 (내 자신의 데이터에 대해 이렇게하지는 않습니다). 추세에 대한 예상 효과는 작다 추세 변수의 큰 규모가 주어진다. 트렌드를 0으로 시작하는 것이 유용하지 않은 여러 가지 이유를 생각해 볼 수 있습니다. 대안은 시간 변수를 중심에 두는 것입니다. –

+0

나는 각각 동의하지 않습니다. 시간 추세가 1167724800에서 시작된다는 것을 알고 있다면 당신의 접근 방식은 괜찮습니다. 그러나이 접근법의 결과는 읽기가 쉽지 않습니다. 이것이 실제로 사람들이 1 또는 0 (https://en.wikipedia.org/wiki/Linear_trend_estimation)을 시작하는 시간 추세를 선택하는 이유입니다. 예를 들어 시간 추세가 1에서 시작하면 절편은 데이터의 평균을 나타냅니다. 이런 이유로 나는 사람들이 내가 아래에서 개괄 한 접근법을 고려할 것을 제안한다. 'dynlm'이나'dyn'을 사용하면'data.frame'으로 변환하여'lm'을 사용하는 것보다 더 많은 의미가 있습니다. –

0

개빈 심슨의 솔루션은 위험합니다. 이것을 보시려면 위의 회귀 분석을 실행할 때 시간 추세는 as.numeric(df$Time)입니다. 이 시간 추세는 1167724800에서 시작합니다. 일반적으로 시간 추세는 0에서 시작합니다. 시간 추세의 근원을 알지 못하는 경우 계수 추정치를 잘못 해석하기 때문에 중요합니다. 나는 몇 가지 더 나은 대안을 제안했다.

data(sample_matrix) 
xtsObject <- as.xts(sample_matrix, descr="my new xts object") 

#Option 1, the best by far, no need to transform to a data.frame 
library(dynlm) 
dynlm(Open ~ trend(Open), data = xtsObject) 

#Option 2, another option 
library(dynlm) 
xtsObject$t <- 0:(nrow(xtsObject)-1) 
dynlm(Open ~ t, data = xtsObject) 

#Option 3, the data.frame route 
df <- data.frame(xtsObject['/'][,"Open"], t = 1:nrow(xtsObject)) 
lm(Open ~ t, df) 
+0

내 대답은 위험하지 않습니다 *. 이것은 통계 조언을위한 사이트가 아닙니다. 나는 OP가 원했던 것을 얻기 위해 R을 사용하는 한 가지 방법을 보여주었습니다. "기원을 알고 있다는 사실을 알지 못한다"는 당신의 요지는 짚맨의 주장입니다. 하나는 회귀 분석을 데이터로 맞추면 데이터가 어떻게 포맷되고 코딩되었고 그에 따라 행동하는지 알 수 있기를 바란다. –