【问题标题】:Factors ordered vs. levels排序因素与水平
【发布时间】:2014-04-30 19:35:30
【问题描述】:

有人能解释一下 R 中“ordered”参数的用途吗?

R 说:

已订购
用于确定级别是否应被视为有序的逻辑标志(按照给定的顺序)。

因此,如果我有一个名为 names 的因素并设置 ordered = TRUE

names<- factor(c("fred","bob","john"), ordered = TRUE)
names

为什么会打印出来:

[1] fred bob  john
Levels: bob < fred < john

这似乎没有使用我给它的命令。我从 fred 开始,从 Bob 开始?

此外,ordered 参数的使用与使用“levels”参数的使用方式有何不同,后者将对因子进行排序:

names<- factor(c("fred","bob","john"), levels= c("john","fred","bob"))
names

返回

[1] fred bob  john
Levels: john fred bob

这似乎是按照我的命令。那么为什么我需要“ordered”参数呢?

我对如何使用“有序”和“级别”感到困惑。

【问题讨论】:

  • 您的问题的第一部分只需阅读文档即可回答,特别是关于levels 参数的部分。
  • 这远非显而易见,但 R 中因子和无序因子之间的唯一 (?) 主要区别是线性(广义线性等)模型中使用的默认对比度 - 默认为常规(无序)因子是处理(?contr.treatment),有序因子的默认值是多项式(@​​987654327@)——参见options("contrasts")。另一个区别是您可以使用不等式运算符(&lt;&gt; 等)来比较有序因子的水平。

标签: r


【解决方案1】:

我将用更直观的因素替换你的名字向量,因为这些因素更有意义:

heights <- c("low","medium","high")

heights1 <- factor(heights, ordered = TRUE)
heights1
# [1] low    medium high  
# Levels: high < low < medium

heights2 <- factor(heights) # ordered = FALSE by default
heights2
# [1] low    medium high  
# Levels: high low medium

级别的顺序可能不是您所期望的,但是当您没有设置明确的顺序时,级别会按字母顺序排序。

要设置显式顺序,我们可以执行以下操作:

heights1<- factor(heights, levels = heights, ordered = TRUE)
heights1
# [1] low    medium high  
# Levels: low < medium < high

heights2<- factor(heights, levels = heights)
heights2
# [1] low    medium high  
# Levels: low medium high

您有时可能想使用factor(x, levels = unique(x)),因为关卡无法复制,在这种情况下,关卡将按其首次出现进行排序。

所以现在它在两边都排序了,但是等等,一个应该是“无序的”。 该词汇表具有误导性,因为可以对无序因素进行排序,如果您想使用 ggplot2 调整布局,它甚至很有用。

但是,正如 @joran 和 @thomas 所提到的,统计模型会根据分类变量是否排序而以不同的方式考虑它们。

然而,让我来到这里的有序因子的使用是在 maxmin 函数的使用中,特别是在聚合函数内部。

请参阅此问题和接受的答案,其中必须将因子定义为有序:Aggregate with max and factors

我们有这个:

# > df1
#    id height
# 1   1    low          
# 2   1   high         
# 3   2 medium          
# 4   2    low          
# 5   3 medium          
# 6   3 medium          
# 7   4    low          
# 8   4    low          
# 9   5 medium          
# 10  5 medium

      

我们无法聚合无序因子:

# aggregate(height ~ id,df1,max)
# Error in Summary.factor(c(2L, 2L), na.rm = FALSE) : 
# ‘max’ not meaningful for factors

我们可以使用有序因子!

# aggregate(height ~ id,df1,max)
#   id height
# 1  1   high
# 2  2 medium
# 3  3 medium
# 4  4    low
# 5  5 medium

【讨论】:

    【解决方案2】:

    让我们读一读吧。

    来自?factor

    levels x 可能采用的值的可选向量。这 默认值是 as.character(x) 采用的唯一值集,已排序 成 x 的递增顺序。请注意,该集合可以指定为 小于 sort(unique(x))。

    因此,如果未指定,它将为您对唯一值进行排序并将其视为顺序。

    正如 Ben 提到的,有序因子和无序因子在实践中有何不同的问题要复杂得多,并且通常依赖于您知道合理数量的统计数据的假设。文档只说:

    有序因子与其类的因子不同,但方法不同 并且模型拟合函数非常对待这两个类 不同。

    再次,正如 Ben 提到的,许多模型拟合例程将非常不同地处理有序和无序因子,因为它们具有非常不同的统计含义和解释。统计差异的详细摘要可能超出了 StackOverflow 答案的范围。

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多