R - 缺失值的相关性

时间:2017-12-05 21:50:34

标签: r correlation

我想在以下数据集上运行相关性。我想要所有的相关性(V1与V2,V3,V4,V5; V2与V1,V3,V4,V5等等)。我想要相关系数和p值。

mydataset

   Group    V1        V2          V3         V4       V5
   OH      0.3        5          -3.09      2.5      NA
   OH      0.5        1           NA        1.8      2.5 
   ON      2          2.5         NA       -3.11    -7.5
   OH      1.5       -3.35       -0.82       NA     -2.5
   ON      6.5       -2.85        2.5        NA      NA
   OH      3          0.5         1.8      -2.85     NA

我运行了这段代码

    correlations <- corr.test (mydataset, use = "pairwise"). 

我也跑了:

    correlations <- cor(mydataset, use = "complete.obs", method = "pearson")

我不知道如何处理缺失值。而且我没有得到任何输出。我一直收到这个错误:

    Error in cor(x, use = use, method = method) : 'x' must be numeric

关于什么可行的任何建议?

谢谢!

2 个答案:

答案 0 :(得分:0)

问题不在于NA,而在于变量Group不是数字。所以试试

 cor(mydataset[sapply(mydataset, is.numeric)], use='pairwise')

这只会选择数字变量并排除NA。

        V1         V2         V3         V4         V5
V1  1.0000000 -0.5917056  0.8907941 -0.9355822 -0.9819805
V2 -0.5917056  1.0000000 -0.6376181  0.4894776 -0.2468321
V3  0.8907941 -0.6376181  1.0000000 -1.0000000         NA
V4 -0.9355822  0.4894776 -1.0000000  1.0000000  1.0000000
V5 -0.9819805 -0.2468321         NA  1.0000000  1.0000000

在相关矩阵中,我们看到V3V5之间的相关性得到NA,但这是因为V3V5不是同时只有一个NA观察,你不能只在一对点上获得相关性。

答案 1 :(得分:0)

corr.test(test[2:6], use = 'pairwise')就是你想要的。您必须排除第一列,即一个字符向量。下面是一个带输出的代表。你得到系数和p值。


library('tidyverse')
#> ── Attaching packages ─────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
#> ✔ ggplot2 2.2.1     ✔ purrr   0.2.4
#> ✔ tibble  1.3.4     ✔ dplyr   0.7.4
#> ✔ tidyr   0.7.2     ✔ stringr 1.2.0
#> ✔ readr   1.1.1     ✔ forcats 0.2.0
#> ── Conflicts ────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag()    masks stats::lag()
library('psych')
#> 
#> Attaching package: 'psych'
#> The following objects are masked from 'package:ggplot2':
#> 
#>     %+%, alpha
test = tibble::tribble(
  ~Group, ~V1, ~V2, ~V3, ~V4, ~V5,
  'OH',      0.3,        5,          -3.09,      2.5,      NA,
  'OH',      0.5,        1,           NA,        1.8,      2.5,
  'ON',      2 ,         2.5,         NA,       -3.11,    -7.5,
  'OH',      1.5,       -3.35,       -0.82,       NA,     -2.5,
  'ON',      6.5,       -2.85,        2.5,        NA,      NA,
  'OH',      3,          0.5,         1.8,      -2.85,     NA
)
corr.test(test[2:6], use = 'pairwise')
#> Warning in sqrt(n - 2): NaNs produced
#> Warning in corr.test(test[2:6], use = "pairwise"): Number of subjects must
#> be greater than 3 to find confidence intervals.
#> Warning in sqrt(n[lower.tri(n)] - 3): NaNs produced
#> Call:corr.test(x = test[2:6], use = "pairwise")
#> Correlation matrix 
#>       V1    V2    V3    V4    V5
#> V1  1.00 -0.59  0.89 -0.94 -0.98
#> V2 -0.59  1.00 -0.64  0.49 -0.25
#> V3  0.89 -0.64  1.00 -1.00    NA
#> V4 -0.94  0.49 -1.00  1.00  1.00
#> V5 -0.98 -0.25    NA  1.00  1.00
#> Sample Size 
#>    V1 V2 V3 V4 V5
#> V1  6  6  4  4  3
#> V2  6  6  4  4  3
#> V3  4  4  4  2  1
#> V4  4  4  2  4  2
#> V5  3  3  1  2  3
#> Probability values (Entries above the diagonal are adjusted for multiple tests.) 
#>      V1   V2   V3   V4   V5
#> V1 0.00 0.86 0.66 0.45 0.66
#> V2 0.22 0.00 1.00 1.00 1.00
#> V3 0.11 0.36 0.00  NaN   NA
#> V4 0.06 0.51  NaN 0.00  NaN
#> V5 0.12 0.84   NA  NaN 0.00
#> 
#>  To see confidence intervals of the correlations, print with the short=FALSE option