我有一个XTS
数据集,其中包含许多股票收盘价:dataset
。然后我想通过cor()
找到他们的回报是否有任何相关性,但是我得到一个错误消息:Error in cor(RETS) : 'x' must be numeric
。
下面是我所做的:
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
中使用相关函数,但得到相同的错误信息。
我在结束问题的地方添加了@Roland的答案。
问题是使用RETS[is.na(RETS)] <- "0"
将所有数据转换为字符,因为向数值添加任何字符值都会自动更改数据。键入一个字符。因此,当你去取相关性时,没有办法对字符值这样做。所以如果你只输入
RETS[is.na(RETS)] <- 0
应该避免转换问题。
与其将丢失的值设置为NA
,不如考虑显式地告诉cor
如何处理丢失的值。例如
cor(RETS, use="pairwise.complete.obs")
将只计算两个变量之间的相关性,对于那些都不是na的对。有关所有选项,请参阅?cor
帮助页面。