我正在阅读这article篇文章,他们使用以下代码从数据中删除变量/列:

data(airquality)

# using subset()
summary(lm(Ozone ~., data = subset(airquality, select = -Solar.R)))

# direct manipulation
summary(lm(Ozone ~. -Solar.R, data = airquality))

我最初的 idea 是,两者通过从lm中删除变量Solar.R来做相同的事情,但它们似乎产生了不同的结果.这两种方法的区别是什么?为什么它们会产生不同的回归结果?

推荐答案

在您的公式中,.表示所有其他变量(Ozone除外).然后从.中减go Solar.R(即Ozone~.-Solar.R),实际上就是这样:

lm(Ozone~Wind-Solar.R+Temp-Solar.R+Month-Solar.R + Day-Solar.R + Solar.R-Solar.R, data=airquality)

请注意,其结果与第二个模型相同.

因此,简而言之,这两种方法(您的第二个模型和我写出来的版本)都只是与第一个模型做相同的事情,但会导致更多的行丢失..因为数据集中有五行额外的数据.通过减go 太阳辐射,R缺失(但臭氧并没有缺失).R从一整天的风中,这五行下降,总数从37下降到42.

注意,如果是太阳能.R没有任何缺失值(假设我用非缺失太阳能的平均值填充缺失值.R值,如下所示,或任何值),那么您的第一个和第二个模型将是相同的;明确地:

lm(Ozone~., data=select(airquality,-Solar.R))

Call:
lm(formula = Ozone ~ ., data = select(airquality, -Solar.R))

Coefficients:
(Intercept)         Wind         Temp        Month          Day  
   -70.1051      -3.0516       2.0984      -3.5209       0.2747 

与:

lm(Ozone~.-Solar.R, data=
     airquality %>% 
     mutate(Solar.R = if_else(is.na(Solar.R), mean(Solar.R, na.rm=T), as.double(Solar.R)))
   )

Call:
lm(formula = Ozone ~ . - Solar.R, data = airquality %>% mutate(Solar.R = if_else(is.na(Solar.R), 
    mean(Solar.R, na.rm = T), as.double(Solar.R))))

Coefficients:
(Intercept)         Wind         Temp        Month          Day  
   -70.1051      -3.0516       2.0984      -3.5209       0.2747

R相关问答推荐

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

编码变量a、b、c以匹配来自另一个数据点的变量x

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

编辑文件后编辑RhandsonTable

derrr mutate case_when grepl不能在R中正确返回值

迭代通过1个长度的字符串长字符R

未识别时区

将文件保存到新文件夹时,切换r设置以不必创建目录

如何同时从多个列表中获取名字?

根据现有列的名称和字符串的存在进行变异以创建多个新列

R Select()可以测试不存在的子集列

将二进制数据库转换为频率表

在列表中排列R数据框中的列顺序

从多个可选列中选取一个值到一个新列中

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

计算多变量的加权和

在不重复主题的情况下重新排列组

使用同一行中的前一个值填充R矩阵中的缺失值