[英]Linear regression for multivariate time series in R
作為數據分析的一部分,我正在使用線性回歸分析來檢查是否可以使用今天的數據預測明天的價值。
我的數據是大約100個公司退貨的時間序列。 到目前為止,這是我的代碼:
returns <- read.zoo("returns.csv", header=TRUE, sep=",", format="%d-%m-%y")
returns_lag <- lag(returns)
lm_univariate <- lm(returns_lag$companyA ~ returns$companyA)
這沒有問題,現在我希望對100家公司中的每一個進行線性回歸。 由於手動設置每個線性回歸模型將花費太多時間,因此我想使用某種循環(或應用函數)來縮短過程。
我的方法:
test <- lapply(returns_lag ~ returns, lm)
但這會導致錯誤“ test2中出現意外符號”,因為在此處無法識別代字號。
因此,基本上,我想對每個公司分別進行線性回歸。
唯一看起來與我想要的問題相似的是多個列上的時間序列的線性回歸 ,但是那里的數據似乎存儲在矩陣中,並且代碼示例與我想要的相比非常混亂。
當您知道要包含在回歸中的變量的確切名稱時,公式非常有用。 當您遍歷值時,它們並不是那么好。 這是一個使用索引為每次迭代提取感興趣的列的示例
#sample data
x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1
returns <- zoo(cbind(companya=rnorm(10), companyb=rnorm(10)), x.Date)
returns_lag <- lag(returns)
$loop over columns/companies
xx<-lapply(setNames(1:ncol(returns),names(returns)), function(i) {
today <-returns_lag[,i]
yesterday <-head(returns[,i], -1)
lm(today~yesterday)
})
xx
這將以列表的形式返回每一列的結果。
使用dyn包(加載Zoo),我們可以這樣做:
library(dyn)
z <- zoo(EuStockMarkets) # test data
lapply(as.list(z), function(z) dyn$lm(z ~ lag(z, -1)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.