【问题标题】:Run corrplot to a data frame by group按组对数据框运行 corrplot
【发布时间】:2015-11-09 17:51:40
【问题描述】:

我有一个数据框,其中的列代表定量变量和一个定性(组)。

数据框的结构与此相同:

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

我想将 corrplot 函数(来自 corrplot 包)按组应用于数据。

有人可以帮帮我吗?

我尝试按照 user20650 下面的建议进行操作,结果如下:

这是我的数据框的尾部:

structure(list(group = structure(c(4L, 4L, 4L, 4L, 4L, 4L), .Label = c("brooksi", 
"copianullum", "fulbrighti", "paratrygonyi"), class = "factor"), 
    total_length = c(17, 25, 15, 9, 22, 25), max_w = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), n_prog = c(NA, NA, NA, NA, 482L, 432L), ceph_pedun_L = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), bothrid_L = c(NA, 870, NA, NA, NA, NA), bothrid_W = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), n_loculi = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_), n_transv_septa = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), stalk_L = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), stalk_W = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_), prog_max_W = c(NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_), term_seg_L = c(500L, 
    NA, 400L, 420L, NA, NA), term_seg_L.1 = c(360L, NA, 220L, 
    230L, NA, NA), ratio_term_seg = c(1.39, NA, 1.82, 1.83, NA, 
    NA), term_seg_SA = c(1800, NA, 880, 966, NA, NA), pore_pst_mrgn = c(360L, 
    NA, 260L, 300L, NA, NA), percent_.prog_L = c(72L, NA, 65L, 
    71L, NA, NA), n_progl_LgrW = c(NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_), n_mat_segs = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), n_testes = c(NA, 6L, 6L, 5L, NA, NA), testes_L = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), testes_W = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), length_tst_field = c(NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_), term_c_sac_L = c(150L, 
    NA, 105L, 125L, NA, NA), term_c_sac_W = c(125L, NA, 75L, 
    95L, NA, NA), ovary_L = c(255L, NA, 140L, 135L, NA, NA), 
    Ov_ratio_prog = c(51, NA, 35, 32.1, NA, NA), OV_max_W = c(240, 
    NA, 125, 140, NA, NA)), .Names = c("group", "total_length", 
"max_w", "n_prog", "ceph_pedun_L", "bothrid_L", "bothrid_W", 
"n_loculi", "n_transv_septa", "stalk_L", "stalk_W", "prog_max_W", 
"term_seg_L", "term_seg_L.1", "ratio_term_seg", "term_seg_SA", 
"pore_pst_mrgn", "percent_.prog_L", "n_progl_LgrW", "n_mat_segs", 
"n_testes", "testes_L", "testes_W", "length_tst_field", "term_c_sac_L", 
"term_c_sac_W", "ovary_L", "Ov_ratio_prog", "OV_max_W"), row.names = 563:568, class = "data.frame")

我试图用这段代码做你所说的:

for(i in unique(data$group)) {
    corrplot(cor(data[data$group==i, -match("group", names(data))]))
}

但是我收到了这个错误:

Error in if (min(corr) < -1 - .Machine$double.eps || max(corr) > 1 + .Machine$double.eps) { : 
  missing value where TRUE/FALSE needed

【问题讨论】:

  • 您需要计算每个分组变量的定量变量之间的相关性,并将 corrplot 应用于每个分组变量。如果您可以添加一些数据和您的尝试,那将会很有帮助。请阅读此stackoverflow.com/questions/5963269/… 谢谢
  • 帮助您入门:par(mfrow=c(2,1)) ; for(i in unique(mtcars$am)) corrplot(cor(mtcars[mtcars$am==i, -match("am", names(mtcars))]))
  • 感谢您提供有关如何制定问题的提示 :)

标签: r r-corrplot


【解决方案1】:

升级评论

您需要为每个分组变量计算定量变量之间的相关性,然后将corrplot 应用于每个分组变量。

使用iris 数据集

par(mfrow=c(3,1)) 

# loop through the grouping variable
for(i in unique(iris$Species)) {
            corrplot(cor(iris[iris$Species==i, -match("Species", names(iris))]))
           }

iris$Species==i 对每个分组变量的数据行进行子集化,-match("Species", names(iris)) 删除了分组变量列,因此不包含在相关性计算中。

【讨论】:

  • 我编辑了我的帖子,以显示当我尝试按照您所说的去做时发生了什么。
  • 好的,您需要考虑丢失的数据。您在cor 内执行此操作。请参阅?cor 帮助页面以查看选项 - 一个明智的选择可能是use="pairwise"。当然,如果您有很多变量缺失,那么您仍然可能会遇到问题。但是,您需要考虑在用很少的观察值进行估计时,相关估计的值是多少。
  • 我使用 Hmisc 包中的 rcorr 来进行相关性: m.data
  • 试了use="pairwise" 出现同样的错误
  • 我不熟悉rcorr - 但它看起来好像默认为成对删除缺失的(没有更改此选项的选项)。您遇到的问题当然是由于缺失 - 您需要决定如何最好地处理这个问题,因为如果存在缺失值,corrplot 函数将不起作用。所以首先要做的是生成一个没有缺失的相关矩阵。
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2022-01-22
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 2021-09-26
相关资源
最近更新 更多