R 中的 factor() 命令仅适用于层次结构级别的分类变量?



我对何时在R中使用

因子(教育)或因子(年龄组)
感到非常困惑。它是否用于分类有序数据?或者我可以只使用没有层次结构的简单分类数据吗?

我知道这是非常基本的。我真的需要一些澄清。

我在这里并没有看到一个明确的问题,所以也许一个简单的例子就足够了。

假设我们有以下数据。

set1 <- c("AA", "B", "BA", "CC", "CA", "AA", "BA", "CC", "CC")

我们想考虑这些数据。

f.set1 <- factor(set1)

让我们看一下输出。请注意,R 只是按字母顺序排列了级别,但并没有说这意味着层次结构(请参阅"级别"行)。

f.set1
# [1] AA B  BA CC CA AA BA CC CC
# Levels: AA B BA CA CC
is.ordered(f.set1)
# [1] FALSE

但是,对分解数据使用as.numeric可能会欺骗您认为它是分层的。请注意,在下面的输出中,"5"在"4"之前,还要注意table(f.set1)的字母顺序输出(如果您只是table(set1),也会发生这种情况。

as.numeric(f.set1)
# [1] 1 2 3 5 4 1 3 5 5
table(f.set1)
# f.set1
# AA  B BA CA CC 
#  2  1  2  1  3 

现在让我们将其与使用ordered参数和levels参数时发生的情况进行比较。使用levelsordered = TRUE告诉我们,此分类数据是分层的,按照levels指定的顺序(而不是按字母顺序或我们输入数据的顺序)。

o.set1 <- factor(set1, 
levels = c("CA", "BA", "AA", "CC", "B"), 
ordered = TRUE)

即使查看输出,现在也向我们显示了层次结构。

o.set1
# [1] AA B  BA CC CA AA BA CC CC
# Levels: CA < BA < AA < CC < B
is.ordered(o.set1)
# [1] TRUE

功能也是如此as.numerictable.

as.numeric(o.set1)
# [1] 3 5 2 4 1 3 2 4 4
table(o.set1)
# o.set1
# CA BA AA CC  B 
#  1  2  2  3  1

因此,总而言之,factor()本身本质上只是创建分类数据的非分层排序因子;factor()levelsordered = TRUE参数将创建分层类别。

或者,如果您直接想要创建有序因子,请使用ordered()。仍然需要指定类别的顺序:

ordered(set1, levels = c("CA", "BA", "AA", "CC", "B"))

您可以通过使用ordered(x)factor(x, ordered=TRUE)创建因子来按顺序标记因子。?factor的"详细信息"部分解释说:

有序因子仅与其类中的因子不同,但 方法和模型拟合函数处理这两个类 完全不同。

您可以通过比较这两个对象的属性来确认该报价的第一部分(它们仅在类上有所不同):

f  <- factor(letters[3:1], levels=letters[3:1])
of <- ordered(letters[3:1], levels=letters[3:1])
attributes(f)
# $levels
# [1] "c" "b" "a"
# 
# $class
# [1] "factor"
attributes(of)
# $levels
# [1] "c" "b" "a"
# 
# $class
# [1] "ordered" "factor" 

然后,各种因子处理 R 函数(该报价第二部分的"方法和模型拟合函数")将使用is.ordered()来测试该"ordered"类指标是否存在,将其视为以不同于无序因子的方式处理有序因子的指令。 以下是几个示例:

## The print method for factors. (Type 'print.factor' to see the function's code)
print(f)
# [1] c b a
# Levels: c b a
print(of)
# [1] c b a
# Levels: c < b < a
## The contrasts function. (Type 'contrasts' to see the function's code.)
contrasts(of)
#                 .L         .Q
# [1,] -7.071068e-01  0.4082483
# [2,]  4.350720e-18 -0.8164966
# [3,]  7.071068e-01  0.4082483
contrasts(f)
#   b a
# c 0 0
# b 1 0
# a 0 1

最新更新