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"
数値に文字値を追加すると、自動的にdata.typesが文字に変更されるため、すべてのデータが文字に変換されます。したがって、相関を取るために行くとき、文字値に対してそれを行う方法はありません。だからあなたが単にするなら
RETS[is.na(RETS)] <- 0
代わりに、変換の問題を回避する必要があります。
欠損値をNA
に設定するのではなく、欠損値の処理方法をcor
に明示的に通知することも検討してください。次に例を示します。
cor(RETS, use="pairwise.complete.obs")
両方がNAではないペアの2つの変数間の相関のみを計算します。 ?cor
すべてのオプションのヘルプページ。