web-dev-qa-db-ja.com

cor()関数のComplete.obs

このように私のデータの相関行列を確立しています

df <- structure(list(V1 = c(56, 123, 546, 26, 62, 6, NA, NA, NA, 15
), V2 = c(21, 231, 5, 5, 32, NA, 1, 231, 5, 200), V3 = c(NA, 
NA, 24, 51, 53, 231, NA, 153, 6, 700), V4 = c(2, 10, NA, 20, 
56, 1, 1, 53, 40, 5000)), .Names = c("V1", "V2", "V3", "V4"), row.names = c(NA, 
10L), class = "data.frame")

これにより、次のデータフレームが得られます。

        V1  V2  V3   V4
    1   56  21  NA    2
    2  123 231  NA   10
    3  546   5  24   NA
    4   26   5  51   20
    5   62  32  53   56
    6    6  NA 231    1
    7   NA   1  NA    1
    8   NA 231 153   53
    9   NA   5   6   40
    10  15 200 700 5000

私は通常、complete.obsコマンドを使用して、このコマンドを使用して相関行列を確立します

crm <- cor(df, use="complete.obs", method="pearson") 

ここでの私の質問は、complete.obsがデータをどのように処理するかです。 「NA」値を持つ行を省略し、「NA」フリーテーブルを作成して、このように一度に相関行列を作成しますか?

df2 <- structure(list(V1 = c(26, 62, 15), V2 = c(5, 32, 200), V3 = c(51, 
53, 700), V4 = c(20, 56, 5000)), .Names = c("V1", "V2", "V3", 
"V4"), row.names = c(NA, 3L), class = "data.frame")

または、ペアで "NA"値を省略しますか。たとえば、V1とV2の間の相関を計算するとき、V3のNA値を含む行(この例では行1と2など)も省略されますか?

その場合は、NA値をペアで省略して、可能な限り多くのデータを予約するコマンドを確立することを楽しみにしています。

どうもありがとう、

11
Error404

cor、つまり?corのヘルプファイルを確認します。特に、

「使用」が「すべて」である場合、「NA」は概念的に伝播します。つまり、寄与する観測値の1つが「NA」である場合、結果の値は「NA」になります。

「use」が「all.obs」の場合、欠落している観測値が存在するとエラーが発生します。 「use」が「 "complete.obs"」の場合、欠損値はケースワイズ削除によって処理されます(完全なケースがない場合はエラーになります)。

何が起こっているかをよりよく理解するには、(さらに)単純な例を作成します。

df1 = df[1:5,1:3]
cor(df1, use="pairwise.complete.obs", method="pearson") 
cor(df1, use="complete.obs", method="pearson") 
cor(df1[3:5,], method="pearson") 

したがって、complete.obsを使用する場合、NAが存在する場合はentire行を破棄します。私の例では、これは行1と2を破棄することを意味します。ただし、pairwise.complete.obsは、V1V2の間の相関を計算するときにNA以外の値を使用します。

18
csgillespie