我对何时使用感到很困惑
因素(教育)或因素(年龄组)在 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
。使用levels
加号ordered = 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.numeric
和函数一样table
。
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()
使用levels
和ordered = 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