代码之家  ›  专栏  ›  技术社区  ›  Arvind Sharma

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

  •  0
  • Arvind Sharma  · 技术社区  · 2 年前

    我想在R中运行一个简单的logit回归,其中我的因变量是一家公司是否收取正价格,关键的自变量是该公司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个回归。如果您能帮我纠正错误,我将不胜感激。

    1 回复  |  直到 2 年前
        1
  •  1
  •   jpsmith    2 年前

    您必须稍微更改代码-首先,使用 get() 使用您试图从中调用的内容 radius_[i] 成为模型中的协变量-尽管这需要更改为 get(paste0("radius_",i)) (假设您有一个名为 radius_1 ,则, radius_5 ,等等 data1 数据框。此外,您可能希望删除 seq_along(circle_radius) 就这么做吧 circle_radius 自从 seq_along 将定义 i 将其定义为“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]])
    }  
    

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