2013-08-12 60 views
1

我試圖在這裏搜索這個問題,但我找不到任何東西,所以很抱歉,如果這個問題已經得到解答。我的數據集包含10年期間大量股票(1000+)的每日信息。所以我已經讀取了我的數據集作爲數據幀時間序列,其中每列是一個單獨的股票。我想回歸每個股票對照月的虛擬變量捕捉季節變化並獲得殘差。我所做的是以下幾點:時間虛擬變量和迴歸數據框的列作爲因變量

for (i in 1:1000){ 
month.f<-factor(months(time(stockinfo[,i]))) 
dummy<-model.matrix(month.f) 
residStock[,1]<-residuals(lm(stockinfo[,i]~dummy,na.action=na.exclude)) 
} 
#Stockinfo is data.frame 

這是正確的方法嗎?

其次,我想運行殘差作爲因變量和其他數據框的其他獨立變量的迴歸。最好的辦法是做什麼,我會不得不再次使用for循環?

非常感謝您的幫助。

+0

http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example; http://stackoverflow.com/questions/6065826/how-to-do-a-regression-of-a-series-of-variables-without-typing-each-variable-nam – Henrik

+0

非常感謝你,我不能' t之前找到該線程。我很抱歉。你介意告訴我,我的虛擬變量的方法是否正確?再次感謝。 – user2672759

+1

對不起,我現在不能幫你。我可以給出的唯一建議是提供一些代表實際數據最重要屬性的小*測試數據。這會讓人們更願意幫助你。例如,一個日期列和兩個股票列,20個行。這種測試數據的解決方案很可能會縮放到您的1000多列。 – Henrik

回答

0

如下您可以創建股票的列表,然後使用Map功能,可避免[R for loop(未測試,因爲你沒有提供的樣本數據)

假設你的數據是MYDATA以每月1, 2,你使用11個個月的假,如果有在12個月

mystock<-list("APP~","INTEL~","MICROSOFT~") # stocks with tilde sign 
myresi<-Map(function(x) resi(lm(as.formula(paste(x,paste(levels(as.factor(mydata$month))[-1],collapse="+"))),data=mydata),mystock) #-1 means we are using only 11 months excluding first as base month 

說你的獨立var爲indep1,indep2和indep3和依賴是DEP(並假設DEP和INDEP是相同的每個股票)

myestimate<-Map(function(x)lm(dep~indep1+indep2+indep3,data=x),myresi) 
+0

謝謝,但我不得不使用for循環,因爲我的時間序列數據包含NA(對不起,在問題中未提及),這意味着我必須分別倒退每列。 – user2672759

+0

您可以刪除'NA',但在更新答案之前,您需要提供樣本數據。 – Metrics