1

我对何时使用感到很困惑

因素(教育)或因素(年龄组)
在 R 中。它用于分类有序数据吗?还是我可以只使用没有层次结构的简单分类数据?

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

4

2 回答 2

6

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

假设我们有以下数据。

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()使用levelsordered = TRUE参数创建分层类别。

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

ordered(set1, levels = c("CA", "BA", "AA", "CC", "B"))
于 2012-10-19T16:39:34.357 回答
2

您可以通过使用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
于 2012-10-19T16:42:44.353 回答