【问题标题】:How to use loess method in GGally::ggpairs using wrap function如何在 GGally::ggpairs 中使用 wrap 函数使用 loess 方法
【发布时间】:2016-05-07 05:33:59
【问题描述】:

我正在尝试复制 Coursera R 回归模型课程中给出的这个简单示例:

require(datasets)
data(swiss)
require(GGally)
require(ggplot2)
ggpairs(swiss, lower = list(continuous = "smooth", params = c(method = "loess")))

我希望看到一个 6x6 对图 - 一个散点图,对于瑞士数据中 6 个变量的每个组合,黄土更平滑且置信区间。

但是,我收到以下错误:

display_param_error() 中的错误:“params”是一个已弃用的参数。 请“包装”该函数以提供参数。帮助(“包装”,包= "GGally")

我查看了ggpairs()wrap() 帮助文件,并尝试了wrap()wrap_fn_with_param_arg() 函数的许多排列。

我可以让它按预期工作:

ggpairs(swiss, lower = list(continuous = wrap("smooth")))

但是一旦我添加了黄土部分,它就没有了:

ggpairs(swiss, lower = list(continuous = wrap("smooth"), method = wrap("loess")))

当我尝试上面的行时,我得到了这个错误。

值[3L] 中的错误:以下 ggpair 绘图函数 随时可用:连续:c('points', 'smooth', 'density', 'cor', 'blank') 组合:c('box', 'dot', 'facethist', 'facetdensity', 'denstrip', 'blank') 离散:c('ratio', 'facetbar', 'blank') na: c('na', '空白')

diag 连续:c('densityDiag', 'barDiag', 'blankDiag') diag 离散:c('barDiag', 'blankDiag') 诊断 na: c('naDiag', 'blankDiag')

你也可以提供你自己的函数,遵循 api 功能(数据,映射,...){。 . . } 并返回一个 ggplot2 图 对象例如:my_fn

提供的功能:黄土

显然我在错误的地方进入黄土。谁能帮我理解如何添加黄土部分?

请注意,我的问题与 this one 不同,因为我正在询问如何在 ggpairs 中实现 loess,因为 params 参数已被弃用。

非常感谢。

【问题讨论】:

    标签: r ggplot2 loess ggally


    【解决方案1】:

    一种快速的方法是编写自己的函数...下面的函数是根据您的问题中的ggpairs 错误消息提供的函数编辑的

    library(GGally)
    library(ggplot2)    
    data(swiss)
    
    # Function to return points and geom_smooth
    # allow for the method to be changed
    my_fn <- function(data, mapping, method="loess", ...){
          p <- ggplot(data = data, mapping = mapping) + 
          geom_point() + 
          geom_smooth(method=method, ...)
          p
        }
    
    # Default loess curve    
    ggpairs(swiss[1:4], lower = list(continuous = my_fn))
    

    # Use wrap to add further arguments; change method to lm
    ggpairs(swiss[1:4], lower = list(continuous = wrap(my_fn, method="lm")))
    


    这也许可以对传递给每个 geon_ 的参数提供更多控制

      my_fn <- function(data, mapping, pts=list(), smt=list(), ...){
                  ggplot(data = data, mapping = mapping, ...) + 
                             do.call(geom_point, pts) +
                             do.call(geom_smooth, smt) 
                     }
    
    # Plot 
    ggpairs(swiss[1:4], 
            lower = list(continuous = 
                           wrap(my_fn,
                                pts=list(size=2, colour="red"), 
                                smt=list(method="lm", se=F, size=5, colour="blue"))))
    

    【讨论】:

      【解决方案2】:

      可能你正在学习 Coursera 在线课程 Regression Models 并尝试将课程给出的 Rmarkdown 文件转换为 html 文件,和我一样遇到这个错误。

      我尝试的方式是:

      require(datasets); data(swiss); require(GGally); require(ggplot2)
      g = ggpairs(swiss, lower = list(continuous = wrap("smooth", method = "lm")))
      g
      

      您也可以尝试使用method="loess",但结果看起来与讲座中给出的有点不同。 method = "lm" 在我看来可能更合适。

      【讨论】:

      • 感谢您的建议,但是当我尝试您的代码时,我收到错误错误:未知参数:方法
      • @meenaparam 就我而言,我没有错误。一些R.version 输出:platform x86_64-pc-linux-gnu, os linux-gnu, version.string R version 3.3.3 (2017-03-06).
      • 这对我有用,他们一定更新了ggally,谢谢!
      • 是否可以为 SE 设置 alpha?
      【解决方案3】:

      我也怀疑你在上 Coursera 的课程。 不过,我找不到任何包含 ggplot 示例的 github 存储库。

      为了让它发挥作用,我做了以下工作:

      gp = ggpairs(swiss, lower = list(continuous = "smooth"))
      gp
      

      【讨论】:

      • 感谢@Firefighter1017,但这给出了线性拟合(lm),而不是我想要的更平滑的黄土。请参阅上面@scarin 的答案以使您的代码正常工作。
      猜你喜欢
      • 2015-05-06
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多