r - 使用subset()删除列和直接在R中的公式中删除变量有什么区别?

标签 r dataframe subset radix

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

data(airquality)

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

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

我最初的想法是,两者通过从 lm 中删除变量 Solar.R 来完成相同的操作,但它们似乎产生不同的结果。这两种方法有什么区别?为什么他们会产生不同的回归结果?

最佳答案

在您的公式中,. 指的是所有其他变量(Ozone 除外)。然后从 . 中减去 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)

请注意,此结果与您的第二个模型相同。

所以,简而言之,这两种方法(您的第二个模型和我写出的它的版本)只是与您的第一个模型执行相同的操作,但导致更多的行丢失..因为还有五个额外的数据集中缺少 Solar.R 的行(但没有缺少 Ozone),通过从 Wind 到 Day 中减去 Solar.R,这 5 行将被删除,从而使删除的总数从 37 行增加到 42 行。

请注意,如果 Solar.R 没有任何缺失值(假设我用非缺失 Solar.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 - 使用subset()删除列和直接在R中的公式中删除变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72997527/

相关文章:

r - 如何通过 R 中一个变量的变化以不同的次数复制每个观察值?

r - igraph 对象的顶点/节点属性

r - 在数据帧间隔内查找最大值

r - 当所有列都大于一个值时过滤行

r - 有效地查找r中数据帧中不同行的列值计数

r - 将 VLMC 拟合到很长的序列

R blogdown : figures generated in . Rmd 文件在 R-bloggers 上显示博客时不显示

python - Pandas 对每个唯一服务器的结果进行计数

r - 嵌套列表 : Ordering it into a dataframe

算法:从集合中删除尽可能少的元素,以强制没有子集