R中的子集线性回归

时间:2021-01-16 20:37:28

标签: r

我有以下公式:

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 的完美回归吗?

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包,或.. .)

相关问题