【问题标题】:Filtering in lm() with several variables使用多个变量在 lm() 中过滤
【发布时间】:2020-09-23 13:30:23
【问题描述】:

我正在处理一个电子表格,并想创建一个线性模型来考虑几个变量如何影响研发支出。其中一个变量(称为 CEO)指出 CEO 是否拥有博士学位。这在数据中可以识别为 CEO = 1(拥有博士学位),CEO = 0(没有博士学位)。当我为只有 CEO 的线性模型编写代码时,它会同时考虑两者,这使得很难解释每个人如何分别对研发支出产生影响。

#This is my initial code:
reg3 <- lm(RD.exp ~ NETincome*Assets..total.*CEO, 
             data = data1,
             na.action=na.omit)

我想过滤它,以便我可以运行相同的回归,但只考虑 CEO = 1。 我试过通过 dplyr 过滤它,但没有用。我也试过这行代码:

CEO1 <- data3[which(data3$CEO==1),]

但这会使数据再次变成 chr,当我尝试使用 as.numeric 时,它不会将其变回 num。

那么我们的想法是让代码看起来像这样:

reg3 <- lm(RD.exp ~ NETincome*Assets..total.*CEO1, 
             data = data1,
             na.action=na.omit)

非常感谢您对此的任何帮助!

谢谢

【问题讨论】:

  • 嗨,请向我们展示 dput(head(data1, 5)) 的输出。当您说“dplyr 但它不起作用”时,您是什么意思?
  • lm(..., data=..., subset= CEO==1)
  • lm(..., data=..., subset= CEO=="1") 如果 $CEO 是字符

标签: r filter subset lm


【解决方案1】:

跟进 cmets,三种可能的方法,假设所有三个变量都是数字,所有方法都会产生相同的结果。对于所有这三个,您可能希望从公式中删除CEO,因为它将是一个常数并产生交互NAs。

lm 中使用subset

one <- lm(RD.exp ~ NETincome * Assets..total., 
   data = data1, 
   subset = CEO == 1, 
   na.action = na.omit)

使用dplyr::filter

library(dplyr)

two <- data1 %>% 
   dplyr::filter(CEO == 1) %>% 
   lm(RD.exp ~ NETincome * Assets..total., 
      data = ., 
      na.action = na.omit)

使用基础r(不要使用which

three <- lm(RD.exp ~ NETincome * Assets..total., 
   data = data1[data1$CEO == 1,], 
   na.action = na.omit)

为所有三个产生相同的系数

all.equal(one$coefficients, two$coefficients, three$coefficients)
#> [1] TRUE

希望数据像你的

set.seed(2020)
data1 <- data.frame(
   RD.exp = sample(10000:20000, 100, replace = TRUE),
   NETincome = sample(50000:90000, 100, replace = TRUE),
   Assets..total. = sample(100000:900000, 100, replace = TRUE),
   CEO = sample(0:1, 100, replace = TRUE)
)

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    相关资源
    最近更新 更多