【问题标题】:What is the datatype of "formula" for the e1071 package in R?R 中 e1071 包的“公式”数据类型是什么?
【发布时间】:2013-11-04 14:20:05
【问题描述】:

我正在学习 R 的 e1071 包来执行朴素贝叶斯分析。根据this 教程,包的 naieveBayes 方法接受一个名为“公式”的输入——它说是“表单类的公式 ~ x1 + x2 + ..”

如何创建这样的公式?我有一个包含性别、工作和收入列的数据集,并希望对这些维度/因素中的每一个进行分析。我需要以某种方式将它们变成公式对象吗? (我对 R 很陌生,所以我不清楚 R 是否支持特定的数据类型,如公式)。

【问题讨论】:

    标签: r


    【解决方案1】:

    只需输入~ x1 + x2 就会创建一个formula 类的对象。

    查看?lm 了解基本思想的示例。特定领域的语言非常灵活,因此不同的模型以不同的方式使用它。

    例如:

    dat <- data.frame(x=runif(10), y=runif(10))
    lm( y ~ x, data=dat)
    f <- y ~ x
    class(f)
    lm( f, data=dat )
    

    【讨论】:

    • 如何将参数分配给 X 和 Y?
    • 不是这样想的。该公式定义了一组指令,模型将使用这些指令来解释要做什么。查看上面的lm 示例。 lm 有两个参数:公式和数据。该公式告诉它如何处理数据。
    • B Friedman 做一个想象的类比,如果你想用一个类似于 lm() 的假装函数 regressionthis() 执行回归,那么你可以给它一个 y=mx+b 的公式,如果你想让它找到一个线性模型?
    • @abe3 这完全取决于regressionthis 想要从公式中得到什么。不同的函数会以不同的方式处理它们。关键是公式是模型知道如何解释的一组指令。
    • 指出?formula 将创建一个公式类对象并没有什么坏处。
    【解决方案2】:

    公式是使用~ 函数创建的。它可以用作前缀运算符或中缀运算符:

    form <- ~ atom
    form <- atomA ~ atomB
    is.function(`~`)
    [1] TRUE
    
    class(form[[2]])
    #[1] "name"
     is.language(form)
    #[1] TRUE
     is.language(form[[2]])
    #[1] TRUE
    

    就像函数一样,公式对象是通过环境创建的:

    str(form)
    #Class 'formula' length 3 atomA ~ atomB
    #  ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
    

    不同的函数对使用哪种形式(前缀或中缀)有不同的假设。您可以使用列表索引按位置编号提取组件。第一个元素将始终是波浪号运算符。

    form[[1]]
    # returns:  ~> 
    form[[2]]
    # atomA
    form[[3]]
    # atomB
    

    您可以使用as.character 将公式降级为字符对象,或者使用as.formula 将字符对象升级为公式。 formula 函数不创建公式,而是一个通用函数,它对不同的分类对象具有特定的行为,通常用于从回归对象中提取公式。

     methods(formula)
    #-----------
     [1] formula.character*           
     [2] formula.data.frame*          
     [3] formula.default*             
     [4] formula.formula*             
     [5] formula.glm*                 
     [6] formula.lm*                  
     [7] formula.nls*                 
     [8] formula.quantmod*            
     [9] formula.summary.formula.cross
    

    方法(公式)的结果会根据您当时加载的包而有所不同。 [10] 公式.术语*

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 2012-01-07
      • 2015-03-11
      • 1970-01-01
      • 2011-11-15
      • 2023-03-18
      • 2015-06-20
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多