在 R 中编写一个循环用于回归替换自变量以进行稳健性检查

Writing a loop in R for regression replacing independent variable for robustness check

我想 运行 R 中的简单逻辑回归,其中我的因变量是公司是否收取正价,关键自变量是 x 英里半径内的竞争对手数量该公司。为了实施竞争变量,我正在查看 1、5、10 和 50 英里半径。

我不确定如何编写循环,以及 Error in eval(predvars, data, env) : object 'radius_i' not found 当我 运行 下面的循环时。

circle_radius = list("1", "5", "10", "15", "50")

for (i in seq_along(circle_radius)){
    my_logit_4_r[i]  <-  glm(price_b1 ~   radius_i , 
                            data=data1,
                            family = binomial(link='logit'))
    summary(my_logit_4_r[i])
   }    

所以我不确定如何指定循环,因为我不想使用蛮力并分别编写 4 个回归。希望对我犯的错误提供帮助。

您必须稍微更改您的代码 - 首先,使用 get() 将您尝试从 radius_[i] 调用的内容用作模型中的协变量 - 尽管这需要更改为 get(paste0("radius_",i))(假设您在 data1 数据框中有一个名为 radius_1radius_5 等的协变量。另外,您可能想要删除 seq_along(circle_radius) 并执行 circle_radius 因为 seq_along 会将 i 定义为 1, 2, 3, 4 并且删除它会将其定义为“1”,“5”,“10”,和“50”。您还需要将 my_logit_4_r 定义为列表,并在循环中分配给列表时使用双括号 [[i]]

下面我进行了一些更改以使其更清楚。

由于您没有提供示例数据,我假设您的数据如下所示:

circle_radius <- list("1", "5", "10", "50")
data1 <- data.frame(price_b1 = runif(100),
                    radius_1 = runif(100),
                    radius_5 = runif(100),
                    radius_10 = runif(100),
                    radius_50 = runif(100))

试试下面的代码:

my_logit_4_r <- vector(mode = "list", length = length(circle_radius))
for (i in circle_radius){
  my_logit_4_r[[i]]  <-  glm(price_b1 ~  get(paste0("radius_",i)) , 
                         data=data1,
                         family = binomial(link='logit'))
  
  summary(my_logit_4_r[[i]])
}  

模型不会与我的样本数据收敛,但它们尝试到运行。如果这不起作用,请提供样本数据,我会更新我的答案。