我有以下公式:
Reg_Total<- In_Bigdata2 %>%
lm(log(This_6) ~ This_1+This_2+This_3+This_4+
This_5+This_7+This_8+
This_12+This_13+This_14+This_15+This_16+This_17,This_18,data = .)
有了那个data
只有变量 This_18 作为一个子集,你知道为什么它给我一个 r2 为 1 的完美回归吗?
答案 0 :(得分:0)
好的,这是一个很好的谜题。
您必须深入了解 subset=
参数的作用,因为它被传递给 model.frame()
内的 lm()
函数。来自?model.frame()
:
subset:要使用的行的规范:默认为所有行。 这可以是任何有效的索引向量(参见‘[.data.frame’) 对于“数据”行,或者如果未提供,则数据 框架由‘公式’中使用的变量组成。
(强调)。通常人们会为 subset=
(例如 This_5>2
)指定一个逻辑表达式来限制回归到特定情况。如果您输入一个整数向量,lm()
/model.frame()
将选择与这些整数对应的行。
所以……lm()
/model.frame()
所做的是为线性模型构建一个数据集,该数据集由原始数据集的行组成由 This_18
索引。换句话说,由于 This_18
的前几个元素是 (2,3,4,3,3,2, ...),新数据集的第一行将是原始数据的第 2 行放;第二行将是第 3 行;第三行将是第 4 行;第四行将是第三行的另一个副本;等等……
head(model.frame(This_6~.-This_18, data=dd, subset=This_18))
## This_6 This_1 This_2 This_3 This_4 This_5 This_7 This_8 This_9 This_10 ...
## 2 2 5 3 3 3 3 3 2 3 1 ...
## 3 3 3 3 3 3 3 3 4 4 4 ...
## 4 1 3 3 3 3 3 3 2 1 2 ...
## 3.1 3 3 3 3 3 3 3 4 4 4 ...
## 3.2 3 3 3 3 3 3 3 4 4 4 ...
## 2.1 2 5 3 3 3 3 3 2 3 1 ...
(您也可以通过运行 model.frame(fitted_model)
来获取此对象)。
因此,由于 This_18
的唯一值是整数 1-6,因此您只能在 原始数据集的第 1-6 行的多个副本上运行回归。因此,您得到完美拟合并不奇怪,因为只有 6 个独特的响应/预测变量集。
剩下的问题是……您打算使用 subset=This_18
... 做什么? “子集”是指观察的子集,而不是预测器的子集。
如果您想做最佳子集回归(即找到最大化某些标准的预测变量的子集),没有一个简单的答案(事实上,如果您是对推理而不是预测感兴趣)。谷歌搜索“R 最佳子集回归”应该对你有帮助,或者 searching for those keywords on Stack Overflow。 (或查看glmulti
包,或leaps
包,或stepAIC
包中的MASS
函数,或MuMIn
包,或.. .)