ggduo:多元统计分析的可视化展示

2017 年 11 月 7 日 数萃大数据 louwill

数缺形时少直观。GGally包中的ggduo函数可以让你在多元统计分析中对分组数据进行可视化展示。这在典型相关分析和回归分析中进行图形展示十分有用。

ggduo

ggduo()函数来自于 ggplot2的扩展版本包 GGally,对于多元统计分析下的两组数据变量绘制统计图矩阵有着独特的效果。 ggduo()的基本用法如下:

  
    
    
    
  1. ggduo(data, mapping = NULL, columnsX = 1:ncol(data),


  2.  columnsY = 1:ncol(data), title = NULL, types = list(continuous =

  3.  "smooth_loess", comboVertical = "box_no_facet", comboHorizontal = "facethist",

  4.  discrete = "ratio"), axisLabels = c("show", "none"),

  5.  columnLabelsX = colnames(data[columnsX]),

  6.  columnLabelsY = colnames(data[columnsY]), labeller = "label_value",

  7.  switch = NULL, xlab = NULL, ylab = NULL, showStrips = NULL,

  8.  legend = NULL, cardinality_threshold = 15, legends = stop("deprecated"))

典型相关分析

先看 ggduo()在典型相关分析中的应用。本文使用的数据例子来自于R中内置的 psychademic数据集,该数据集包括600名大一新生的心理测试和学科能力等8个变量的数据。

  
    
    
    
  1. data(psychademic)

  2. str(psychademic)

数据细节如下:

  
    
    
    
  1. 'data.frame':   600 obs. of  8 variables:

  2. $ locus_of_control: num  -0.84 -0.38 0.89 0.71 -0.64 1.11 0.06 -0.91 0.45 0 ...

  3. $ self_concept    : num  -0.24 -0.47 0.59 0.28 0.03 0.9 0.03 -0.59 0.03 0.03 ...

  4. $ motivation      : chr  "4" "3" "3" "3" ...

  5. $ read            : num  54.8 62.7 60.6 62.7 41.6 62.7 41.6 44.2 62.7 62.7 ...

  6. $ write           : num  64.5 43.7 56.7 56.7 46.3 64.5 39.1 39.1 51.5 64.5 ...

  7. $ math            : num  44.5 44.7 70.5 54.7 38.4 61.4 56.3 46.3 54.4 38.3 ...

  8. $ science         : num  52.6 52.6 58 58 36.3 58 45 36.3 49.8 55.8 ...

  9. $ sex             : chr  "female" "female" "male" "male" ...

  10. - attr(*, "academic")= chr  "read" "write" "math" "science" ...

  11. - attr(*, "psychology")= chr  "locus_of_control" "self_concept" "motivation"

数据默认的变量分组为心理变量和学习能力变量:

  
    
    
    
  1. (psych_variables <- attr(psychademic, "psychology"))

  2. (academic_variables <- attr(psychademic, "academic"))

  3. [1] "locus_of_control" "self_concept"     "motivation"    

  4. [1] "read"    "write"   "math"    "science" "sex"    

先使用 ggpair()函数查看两组数据的组内相关性。 心理变量组的组内相关性如下:

  
    
    
    
  1. ggpairs(psychademic, psych_variables, title = "Within Psychological Variables")


学习能力变量组的组内相关性如下:

  
    
    
    
  1. ggpairs(psychademic, academic_variables, title = "Within Academic Variables")


然后再使用 ggduo()函数得到两组变量之间的相关性:

  
    
    
    
  1. ggduo(

  2.  psychademic, psych_variables, academic_variables,

  3.  types = list(continuous = "smooth_lm"),

  4.  title = "Between Academic and Psychological Variable Correlation",

  5.  xlab = "Psychological",

  6.  ylab = "Academic"

  7. )


回归分析

对于 ggduo()在回归分析中的使用,我们可以自定义一个包含 ggduo()的函数,通过分面图形展示各自变量对于因变量回归的拟合的分面图形,并且给出相应的残差诊断图。使用示例数据集为 swiss数据集,代码如下:

  
    
    
    
  1. swiss <- datasets::swiss

  2. # 添加残差列

  3. swiss$Residual <- seq_len(nrow(swiss))

  4. # 计算残差值

  5. residuals <- lapply(swiss[2:6], function(x) {

  6.  summary(lm(Fertility ~ x, data = swiss))$residuals

  7. })

  8. # 计算残差值对应的因变量范围

  9. y_range <- range(unlist(residuals))

  10. # 自定义函数

  11. lm_or_resid <- function(data, mapping, ..., line_color = "red", line_size = 1) {

  12.  if (as.character(mapping$y) != "Residual") {

  13.    return(ggally_smooth_lm(data, mapping, ...))

  14.  }

  15.  # 显示残差值数据

  16.  resid_data <- data.frame(

  17.    x = data[[as.character(mapping$x)]],

  18.    y = residuals[[as.character(mapping$x)]]

  19.  )

  20.  ggplot(data = data, mapping = mapping) +

  21.    geom_hline(yintercept = 0, color = line_color, size = line_size) +

  22.    ylim(y_range) +

  23.    geom_point(data = resid_data, mapping = aes(x = x, y = y), ...)

  24. }

  25. # 利用ggduo进行绘图

  26. ggduo(

  27.  swiss,

  28.  2:6, c(1,7),

  29.  types = list(continuous = lm_or_resid)

  30. )


绘制效果如图所示,图形上半部分为回归拟合图,下半部分为回归诊断的残差图。 也可以在 ggduo()中对图形参数进行自定义修改:

  
    
    
    
  1. ggduo(

  2.  swiss,

  3.  2:6, c(1,7),

  4.  types = list(

  5.    continuous = wrap(lm_or_resid,

  6.      alpha = 0.7,

  7.      line_color = "blue",

  8.      line_size = 3

  9.    )

  10.  )

  11. )



除了在典型相关分析和多元回归分析中使用 ggduo()进行分面的可视化展示之外,ggduo()在其他方面也有用武之地。具体可参考:

https://ggobi.github.io/ggally/#multiple_time_series_analysis



参考资料:

https://ggobi.github.io/ggally/#ggally




欢迎大家关注微信公众号:数萃大数据



课程公告

Python机器学习培训班【武汉站】

时间:2017年11月11日-12日

地点:武汉市湖北经济学院

更多详情,请扫描下面二维码




登录查看更多
1

相关内容

【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
85+阅读 · 2020年6月28日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
281+阅读 · 2020年6月3日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
缺失数据统计分析,第三版,462页pdf
专知会员服务
103+阅读 · 2020年2月28日
ExBert — 可视化分析Transformer学到的表示
专知会员服务
30+阅读 · 2019年10月16日
强化学习最新教程,17页pdf
专知会员服务
168+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
R语言机器学习:xgboost的使用及其模型解释
R语言中文社区
10+阅读 · 2019年5月6日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
最有趣的机器学习可视化图集
AI前线
5+阅读 · 2018年10月8日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
机器学习线性代数速查
机器学习研究会
18+阅读 · 2018年2月25日
可视化多维数据的艺术
论智
10+阅读 · 2018年1月23日
机器学习之确定最佳聚类数目的10种方法
炼数成金订阅号
13+阅读 · 2017年10月12日
开发 | 机器学习之确定最佳聚类数目的10种方法
AI科技评论
3+阅读 · 2017年10月11日
python pandas 数据处理
Python技术博文
3+阅读 · 2017年8月30日
Arxiv
100+阅读 · 2020年3月4日
Arxiv
22+阅读 · 2019年11月24日
Panoptic Feature Pyramid Networks
Arxiv
3+阅读 · 2019年1月8日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
VIP会员
相关VIP内容
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
85+阅读 · 2020年6月28日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
281+阅读 · 2020年6月3日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
缺失数据统计分析,第三版,462页pdf
专知会员服务
103+阅读 · 2020年2月28日
ExBert — 可视化分析Transformer学到的表示
专知会员服务
30+阅读 · 2019年10月16日
强化学习最新教程,17页pdf
专知会员服务
168+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
相关资讯
R语言机器学习:xgboost的使用及其模型解释
R语言中文社区
10+阅读 · 2019年5月6日
文本分析与可视化
Python程序员
8+阅读 · 2019年2月28日
最有趣的机器学习可视化图集
AI前线
5+阅读 · 2018年10月8日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
机器学习线性代数速查
机器学习研究会
18+阅读 · 2018年2月25日
可视化多维数据的艺术
论智
10+阅读 · 2018年1月23日
机器学习之确定最佳聚类数目的10种方法
炼数成金订阅号
13+阅读 · 2017年10月12日
开发 | 机器学习之确定最佳聚类数目的10种方法
AI科技评论
3+阅读 · 2017年10月11日
python pandas 数据处理
Python技术博文
3+阅读 · 2017年8月30日
相关论文
Arxiv
100+阅读 · 2020年3月4日
Arxiv
22+阅读 · 2019年11月24日
Panoptic Feature Pyramid Networks
Arxiv
3+阅读 · 2019年1月8日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Top
微信扫码咨询专知VIP会员