在 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_1
、radius_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]])
}
模型不会与我的样本数据收敛,但它们尝试到运行。如果这不起作用,请提供样本数据,我会更新我的答案。
我想 运行 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_1
、radius_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]])
}
模型不会与我的样本数据收敛,但它们尝试到运行。如果这不起作用,请提供样本数据,我会更新我的答案。