1. ホーム
  2. r

[解決済み] 相関エラー: 'x' は数値でなければなりません

2022-02-14 03:34:41

質問

を持っています。 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 が、同じエラーメッセージが表示されます。

どうすればいいですか?

ローランドさんの回答を追加して、質問を終了します。

を使用することが問題です。

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

は、数値に文字値を加えると自動的にdata.typesが文字に変わるので、すべてのデータを文字にしています。したがって、相関をとろうとするとき、文字値に対してそれを行う方法はない。そこで、単純に

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

の代わりに、変換の問題を回避する必要があります。

欠損値を設定するのではなく NA を明示的に指定することもできます。 cor 欠損値をどのように扱うか 例えば

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

は、2つの変数の相関を、両方がnot-NAであるペアの場合のみ計算します。を参照してください。 ?cor のヘルプページで、すべてのオプションが確認できます。