不同数据集上相同值的一致因子水平

时间:2016-02-24 07:08:30

标签: r categorical-data factors

我不确定我是否完全理解因素是如何运作的。如果我错了,请以一种易于理解的方式纠正我。

我一直认为,在做回归时,有什么不做,R在幕后将分类变量概括为整数,但这部分超出了我的思路。

它将使用训练集中的分类值,并在构建模型后,检查测试数据集中的相同分类值。无论潜在的“水平”是什么 - 对我来说都无关紧要。

然而,我一直在考虑更多...并且需要澄清 - 特别是如果我在如何修复它时做错了。

     train= c("March","April","January","November","January")
     train=as.factor(train)
     str(train)
     Factor w/ 4 levels "April","January",..: 3 1 2 4 2

     test= c(c("March","April"))
     test=as.factor(test)
      str(test)
     # Factor w/ 2 levels "April","March",..:  1 2

问题

如果您看到上述内容,则会创建因子级别,我相信每个月都会调用它们。但是,这些级别必然不匹配。

例如,在测试中“APRIL”在两者中都是“1”,但在列车中“JANUARY”是2,而“MARCH”在2中是2。

如果我要将其合并到模型中,我认为我不会得到错误,因为TEST集中的所有分类值都已经在训练集中......但是会使用适当的系数/值?

请帮助我很困惑

1 个答案:

答案 0 :(得分:4)

当您使用as.factor将某个向量转换/强制转换为一个因子时,R会获取向量的所有唯一值,并将数字ID与每个值相关联;它还有一个默认的排序方法来决定哪个值得到1,2等。

如果你有不同的向量,它们存在于一个共同的“宇宙”值中,并且你想将它们转换成一致的因子(即出现在不同向量/ dfs中的值与相同的数字id相关联),请执行以下操作: / p>

x <- letters[1:5]
y <- letters[3:8]
allvalues <- unique(union(x,y))  # superfluous but I think it adds clarity
x <- factor(x, levels = allvalues)
y <- factor(y, levels = allvalues)
str(x)   # Factor w/ 8 levels "a","b","c","d",..: 1 2 3 4 5
str(y)   # Factor w/ 8 levels "a","b","c","d",..: 3 4 5 6 7 8

修改

一个小实验,表明R足够智能识别不同向量中的因子值,即使它们被分配了不一致的数字ID:

y <- sample(1:2, size = 20, replace = T)
x <- factor(letters[y], levels = c("b","a"))  # so a~2 and b~1
y <- y + rnorm(0, 0.2, n = 20)
Set <- data.frame(x = x, y = y)
fit <- lm(data = Set, y ~ x)

获取所有内容的说明:str(x)str(y)summary(fit)

因此,fit经过培训,可以将x = a(其因素的数字标记为2)与值y ~= 1y = b相关联,其值为{{1} }}

现在让我们制作一个“令人困惑”的测试集:

x ~= 2

让我们使用x2 <- factor(c("a","b"), levels = c("c","d","a","b")) str(x2) # Factor w/ 4 levels "c","d","a","b": 3 4 来查看R对它的影响:

predict

这是我们对R ...的期望。