订购因素与水平

use*_*875 8 r

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

R说:

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

所以如果我有一个名为names的因子并且设置ordered = TRUE

names<- factor(c("fred","bob","john"), ordered = TRUE)
names
Run Code Online (Sandbox Code Playgroud)

为什么打印出来:

[1] fred bob  john
Levels: bob < fred < john
Run Code Online (Sandbox Code Playgroud)

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

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

names<- factor(c("fred","bob","john"), levels= c("john","fred","bob"))
names
Run Code Online (Sandbox Code Playgroud)

这回来了

[1] fred bob  john
Levels: john fred bob
Run Code Online (Sandbox Code Playgroud)

这似乎遵循我的订购.那为什么我需要"有序"参数?

我对如何使用"有序"和"等级"感到困惑.

Moo*_*per 6

我认为这可以使用更完善的答案。

我将用更直观的因素替换您的名称向量,从这些因素来看,顺序更有意义:

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
Run Code Online (Sandbox Code Playgroud)

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

要设置明确的顺序,我们可以执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

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

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

但是,如@joran和@thomas所述,统计模型将根据分类变量是否有序来不同地考虑分类变量。

但是,导致我在这里使用的有序因素是maxmin函数的使用,特别是在聚合函数内部。

请参阅此问题以及在有必要将因子定义为有序的情况下接受的答案:与max和factor汇总

我们有这个:

# > 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
Run Code Online (Sandbox Code Playgroud)

由于无序因素,我们无法汇总:

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

有了有序的因素,我们可以!

# aggregate(height ~ id,df1,max)
#   id height
# 1  1   high
# 2  2 medium
# 3  3 medium
# 4  4    low
# 5  5 medium
Run Code Online (Sandbox Code Playgroud)


jor*_*ran 5

让我们来阅读。

来自?factor

水平 值的一个可选的向量X可能采取。默认值是as.character(x)所采用的唯一值集,并按x的升序排序。请注意,可以将此集合指定为小于sort(unique(x))。

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

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

有序因子仅在其类中与因子不同,但是方法和模型拟合函数对这两个类的处理却大不相同。

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