web-dev-qa-db-ja.com

R-警告メッセージ:「cor(...):標準偏差はゼロです」

フローデータの単一のベクトル(29データ)と3Dマトリックスデータ(360 * 180 * 29)があります。

単一のベクトルと3Dベクトルの間の相関関係を見つけたいです。相関行列のサイズは360 * 180です。

> str(ScottsCk_flow_1981_2010_JJA)
 num [1:29] 0.151 0.644 0.996 0.658 1.702 ...
> str(ssta_winter)
 num [1:360, 1:180, 1:29] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
> summary(ssta_winter)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
    -2.8     -0.2      0.1      0.2      0.6      6.0 596849.0 

これは、ベクターと3Dマトリックスの構造です。 3DマトリックスにはNullと同様に多くの値があります。

> for (i in 1:360) {
+   for(j in 1:180){
+       cor_ScottsCk_SF_SST_JJA[i,j] = cor(ScottsCk_flow_1981_2010_JJA,ssta_winter[i,j,]) 
+    }
+ }
There were 50 or more warnings (use warnings() to see the first 50)

上記のコードのこの部分は、相関を見つけるためのコードです。しかし、それは警告を与えます

> warnings()
Warning messages:
1: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j,  ... :
  the standard deviation is zero
2: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j,  ... :
  the standard deviation is zero
3: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j,  ... :
  the standard deviation is zero
4: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j,  ... :
  the standard deviation is zero
5: In cor(ScottsCk_flow_1981_2010_JJA, ssta_winter[i, j,  ... :
  the standard deviation is zero

また、相関行列の結果はすべてNULLです。どうしてそうなった?

> str(cor_ScottsCk_SF_SST_JJA)
 num [1:360, 1:180] NA NA NA NA NA NA NA NA NA NA ...

私は350フローベクトルと360 * 180 * 350マトリックスでまったく同じコードbfrを使用しました。このコードは完全に機能します。

21
Yu Deng

いくつかの考え。

まず、apply()を使用して、ネストされたループを次のように置き換えることができます。

_cor_ScottsCk_SF_SST_JJA <- 
    apply(ssta_winter, MARGIN = 1:2, FUN = cor, ScottsCk_flow_1981_2010_JJA)
_

次に、_ssta_winter_のポイントの31%以上(596849/(360*180*29))がNaNまたは(おそらく)_NA_real__であるようです。単一のNaNを含むベクトルで計算された相関の戻り値を考えると、

_cor(c(1:3, NaN), c(1:4))
# [1] NA
_

これらすべてのNaNsが_cor_ScottsCk_SF_SST_JJA_をNAsで埋めている原因ではないでしょうか?

3番目に、警告メッセージがはっきりと伝えているように、cor()に渡すベクトルの一部は、分散がゼロです。これらはNaNsとは何の関係もありません。次のように、RはNaNが関係しているときの標準偏差0について文句を言いません。 (未定義の数値の標準偏差を計算できないため、かなり賢明です):

_cor(c(NaN, NaN, NaN, NaN), c(1,1,1,1))
# [1] NA

cor(c(1,1,1,1), c(1,2,3,4))
# [1] NA
# Warning message:
# In cor(c(1, 1, 1, 1), c(1, 2, 3, 4)) : the standard deviation is zero
_
20
Josh O'Brien

以下はlibrary("psych")を使用しています

partial.r(sd,c("GPA","SAT"),"GRADE1",use = "complete.obs")
Warning Message:
 In cor(data, use = use, method = method) : the standard deviation is zero

sdにはSATのNAが含まれています。

partial.r(subset,c("GPA","SAT"),"GRADE1", use = "complete.obs")
no warnings

サブセットはNAが削除されています

1
Robert Calvert

このエラーは、列のすべての観測値が同じである場合にも表示されることがあります。そのため、それらの行を削除したい場合があります。

0