DataExplorer,自定义单变量分布

DataExplorer, customize univariate distribution

我正在尝试使用 DataExplorer 来帮助进行快速 EDA。我喜欢它显示单变量分布的方式。这是一个可重现的例子。

A <- c(rep(c(1,2,3,4,5), 200))
A<- factor(A)
B <- c(x=rnorm(1000))
C <- c(x= rnorm(1000, mean = 100, sd=2))
D <- c(x= rnorm(1000, 2, 2))
df<- data.frame(A, B, C, D)
df %>%
  create_report(
    output_file = "trial",
    y= "A", #to get barplots, QQ plots and scatterplots by grouping variable "A"
    report_title = "trial_EDA",
    config = configure_report(
      add_plot_density = TRUE  #To add density plots to report
    )
  )

我想通过分组变量“A”来可视化密度,如附图所示。

但我不知道如何正确使用绘图密度参数来做到这一点。另外,请建议其他包以轻松浏览大型数据集作为初步分析。谢谢!

您尚未指定 BCD 密度图应应用于哪个变量。 如果只有一个,例如B 然后这样做:

library(tidyverse)
library(ggpubr)

A <- c(rep(c(1,2,3,4,5), 200))
A<- factor(A)
B <- c(x=rnorm(1000))
C <- c(x= rnorm(1000, mean = 100, sd=2))
D <- c(x= rnorm(1000, 2, 2))
df<- data.frame(A, B, C, D)

df %>% mutate(A = A %>% fct_inorder()) %>% 
  ggplot(aes(B, fill=A)) +
  geom_density(alpha=0.2)

您也可以对一个图上的每个变量单独执行此操作。

pB = df %>% mutate(A = A %>% fct_inorder()) %>% 
  ggplot(aes(B, fill=A)) +
  geom_density(alpha=0.2)
pC = df %>% mutate(A = A %>% fct_inorder()) %>% 
  ggplot(aes(C, fill=A)) +
  geom_density(alpha=0.2)

pD = df %>% mutate(A = A %>% fct_inorder()) %>% 
  ggplot(aes(D, fill=A)) +
  geom_density(alpha=0.2)

ggarrange(pB, pC, pD, 
          labels = c("B", "C", "D"))

如果你不喜欢馅料,你可以这样做

df %>% mutate(A = A %>% fct_inorder()) %>% 
  ggplot(aes(B, color=A)) +
  geom_density()

更新 1

可以为任意数量的列创建图表。我将在下面的示例中向您展示。 首先,我们将以一种非常简单甚至微不足道的方式进行。

library(tidyverse)
df = tibble(
  A = rep(c(1,2,3,4,5), 200) %>% factor(),
  B = rnorm(1000),
  C = rnorm(1000, mean = 100, sd=2),
  D = rnorm(1000, 2, 2)
)

fPlot = function(x, group) tibble(x=x, group=group) %>% 
  ggplot(aes(x, color=group)) +
    geom_density()

df %>% select_at(vars(B:D)) %>% 
    map(~fPlot(., df$A))

如您所见,我们为变量 BCD.

创建了三个图

第二种方式有点难理解。但它会给你一些额外的奖励。

fPlot2 = function(df, group) df$data[[1]] %>% 
  ggplot(aes(val, color=A)) +
  geom_density() +
  ggtitle(group)

df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>% 
  group_by(var) %>% 
  nest() %>% 
  group_map(fPlot2)

请注意,df %>% pivot_longer(B:D, names_to = "var", values_to = "val") 之后的 tibble 看起来像这样。

# A tibble: 3,000 x 3
   A     var        val
   <fct> <chr>    <dbl>
 1 1     B       1.06  
 2 1     C     100.    
 3 1     D       3.54  
 4 2     B      -0.652 
 5 2     C     100.    
 6 2     D       1.12  
 7 3     B       0.652 
 8 3     C      97.3   
 9 3     D       3.57  
10 4     B      -0.0972
# ... with 2,990 more rows

完成后 df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>% group_by(var) %>% nest() 看起来像这样:

# A tibble: 3 x 2
# Groups:   var [3]
  var   data                
  <chr> <list>              
1 B     <tibble [1,000 x 2]>
2 C     <tibble [1,000 x 2]>
3 D     <tibble [1,000 x 2]>

如您所见,数据已折叠成变量 data 中的三个内部 tibble。 这种方法将允许您轻松地分别计算每列的所有统计信息。看看这个。

fStat = function(df) df$data[[1]] %>% 
  group_by(A) %>% 
  summarise(
    n = n(),
    min = min(val),
    mean = mean(val),
    max = max(val),
    median = median(val),
    sd = sd(val),
    sw.stat = stats::shapiro.test(val)$statistic,
    sw.p = stats::shapiro.test(val)$p.value,
  )

df %>% pivot_longer(B:D, names_to = "var", values_to = "val") %>% 
  group_by(var) %>% 
  nest() %>% 
  group_modify(~fStat(.x))

输出

# A tibble: 15 x 10
# Groups:   var [3]
   var   A         n   min      mean    max     median    sd sw.stat  sw.p
   <chr> <fct> <int> <dbl>     <dbl>  <dbl>      <dbl> <dbl>   <dbl> <dbl>
 1 B     1       200 -2.14   0.139     3.16   0.153    0.960   0.994 0.561
 2 B     2       200 -2.00   0.0185    2.61   0.0162   0.923   0.992 0.373
 3 B     3       200 -3.15   0.0245    2.42   0.0718   1.02    0.992 0.347
 4 B     4       200 -2.75   0.00112   2.73  -0.00691  1.02    0.993 0.496
 5 B     5       200 -3.32  -0.00758   3.23  -0.000105 0.993   0.991 0.250
 6 C     1       200 94.6   99.8     104.    99.8      1.97    0.992 0.365
 7 C     2       200 94.8  100.      104.   100.       1.85    0.991 0.290
 8 C     3       200 94.5  100.      106.   100.       1.94    0.996 0.877
 9 C     4       200 94.4   99.9     107.    99.9      1.97    0.993 0.463
10 C     5       200 94.3   99.8     106.    99.8      2.07    0.996 0.887
11 D     1       200 -4.89   1.81      8.11   1.90     2.09    0.995 0.750
12 D     2       200 -5.42   2.15      7.57   2.18     2.14    0.995 0.726
13 D     3       200 -4.38   2.09      7.10   2.02     1.97    0.989 0.111
14 D     4       200 -4.73   2.13      8.98   1.93     1.99    0.989 0.138
15 D     5       200 -2.19   2.24      7.79   2.25     1.87    0.996 0.867

你喜欢 nie fajne 吗?