订购因素与水平相关

时间:2014-04-30 19:35:30

标签: r

有人可以解释R中“有序”参数的用途是什么?

R说:

  

有序
  逻辑标志,用于确定是否应将级别视为有序(按给定顺序)。

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

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

为什么打印出来:

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

这似乎没有使用我给它的顺序。我开始用fred从Bob开始?

此外,有序参数的使用方式与使用“等级”参数的方式不同,这些参数将对因子进行排序:

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

返回

[1] fred bob  john
Levels: john fred bob

这似乎跟着我的订购。那么为什么我需要“有序”参数?

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

2 个答案:

答案 0 :(得分:5)

让我们做一些阅读。

来自?factor

  

级别 x可能采用的值的可选向量。该   default是as.character(x)采用的唯一值集,已排序   增加x的顺序。请注意,此集可以指定为   小于排序(唯一(x))。

因此,如果未指定,它将为您排序唯一值并将其视为订单。

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

  

有序因素仅与其类别中的因素不同,而是方法   模型拟合函数完全对待这两个类   不同。

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

答案 1 :(得分:4)

我觉得这可以使用更为开发的答案。

我会用更直观的因素替换你的名字矢量,以便更有意义:

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