2014-06-06 253 views
1

我有一個XTS數據集,其中包含許多股票收盤價,名爲:dataset。然後我想通過cor()找到他們的退貨是否有任何關聯,但是我收到一條錯誤消息:Error in cor(RETS) : 'x' must be numeric相關性錯誤:'x'必須爲數字

這裏是我做了什麼:

RETS <- CalculateReturns(dataset, method= c("log")) # Calculate returns Via PerformanceAnalytics 
RETS<- na.locf(RETS) #Solves missing NAs by carrying forward last observation 
RETS[is.na(RETS)] <- "0" #I then fill the rest of the NAs by adding "0" 

這裏是RETS

row.names A.Close AA.Close AADR.Close AAIT.Close AAL.Close 
1 2013-01-01 0   0   0   0   0 
2 2013-01-02 0.0035  0.0088  0.0044  -0.00842 0 
3 2013-01-03 0.0195  0.0207  -0.002848 -0.00494 0 
4 2013-01-06 -0.0072  -0.0174  0.0078  -0.00070 0 
5 2013-01-07 -0.0080  0   -0.01106  -0.03353 0 
6 2013-01-08 0.0266  -0.002200 0.006655  0.0160  0 
7 2013-01-09 0.0073  -0.01218  0.007551  0.013620 0 

的樣本。然後我執行的相關性:

#Perform Correlation 
cor(RETS) -> correl 
Error in cor(RETS1) : 'x' must be numeric 

#Tried using as.numeric 
cor(as.numeric(RETS), as.numeric(RETS) -> correl 

然而,答案是「1 」。我也嘗試使用psych中的相關函數,但得到相同的錯誤消息。

+0

你能告訴我們'typeof(RETS)'的結果嗎? – Pop

+0

@Pop是的,'typeof(RETS)=「字符」' – Jason

+2

你的問題是什麼?通過使用'RETS [is.na(RETS)] < - 「0」',您可以將所有數據轉換爲字符,並且無法計算字符的相關性。 – Roland

回答

3

我在@ Roland的答案中添加了關閉問題的地方。

的問題是,使用

RETS[is.na(RETS)] <- "0" 

是因爲添加任何字符值到一個數字值自動改變data.types到字符轉動所有的數據轉換成字符。因此,當你去進行關聯時,沒有辦法爲角色值做到這一點。所以,如果你只是做

RETS[is.na(RETS)] <- 0 

相反,你應該避免轉換問題。

而不是你的遺漏值設置爲NA,您也可以考慮明確地告訴cor如何處理缺失值例如

cor(RETS, use="pairwise.complete.obs") 

將只計算兩個變量對那些對其中兩個是不-NA之間的相關性。有關所有選項,請參閱?cor幫助頁面。

相關問題