gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:44:43 25 4
gpt4 key购买 nike

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

我总是假设在进行回归时,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”在 2nd 中是 2。

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

请帮助我很困惑

最佳答案

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

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

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 = bx ~= 2 .

现在让我们制作一个“令人困惑”的测试集:
x2 <- factor(c("a","b"), levels = c("c","d","a","b"))
str(x2) # Factor w/ 4 levels "c","d","a","b": 3 4

让我们使用 predict看看 R 是怎么做的:
predict(fit, newdata = data.frame(x = x2))
# 1 2
# 1.060569 1.961109

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

关于r - 不同数据集上相同值的一致因子水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35595499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com