我需要使用循环从我的数据集中找到所有预测变量(p 值 < 0.05)。有什么办法吗?

I need to find all predictors(p-value < 0.05) from my dataset using loops. Is there any way to do it?

我是 R 的新手,我正在使用 glm() 函数来拟合逻辑模型。我有 5 列。我需要使用基于其 p 值(小于 0.05)的循环找到所有可能的预测变量。 我的数据集有 40,000 个条目,其中包含数值和分类变量,它看起来或多或少像这样:

  "Age"   "Sex"     "Occupation"    "Education"   "Income"       
   50       Male      Farmer         High School    False
   30      Female      Maid          High School    False
   25       Male     Engineer        Graduate       True 

目标变量“收入”表示此人的收入是多于还是少于 30K。如果为真,则他们的收入超过 30K,反之亦然。我想找到可用于使用循环预测目标的预测变量。另外,我可以根据它们的 p 值找到最好的 3 个预测变量吗?

提前致谢!

如果我理解正确你的问题,你正在研究一种方法来测试给定你的数据框的单变量模型(事实上我怀疑你是否想测试这些变量的每个组合,包括交叉变异)

我的建议是使用 purrr::map 函数并为每一列创建列表。根据您的信息检查以下示例:

library(tidyr)
library(purrr)

## Sample data
df <- data.frame(
  Age = rnorm(n = 40000, 
              mean = mean(c(50,30,25)), 
              sd(c(50,30,25))),
  
  Ocupation = sample(x = c("Farmer", "Maid", "Engineer"), 
                     size = 40000, 
                     replace = TRUE),
  Education = sample(x = c("High School", "Graduate", "UnderGraduate"), 
                     size = 40000, 
                     replace = TRUE),
  Income = as.logical(rbinom(40000, 1, 0.5))
  )


## Split dataframe into lists
list_df <- Map(cbind, split.default(df[-4], names(df)[-4]))
list_df <- lapply(list_df, cbind, "target" = df[4])

## Use map to fit a model for each list
list_models <- map(.x = list_df,
    .f = ~glm(Income ~ ., data = .x, family = binomial))

您可以使用 list_models[i] 调用每个模型。

现在解决您关于 p-values 的问题的第二部分。鉴于每个项目都是独一无二的,它们的指标也是独一无二的,我建议您仔细检查 p-values 的使用情况。诚然,它们很重要,但它们为您提供了接受特定统计测试和阈值的概率,这取决于上下文。它是统计质量和决策的基本工具(不仅关于 t-test,而且关于 f-test,因此也是如此)。但是为了排名?嗯,我想说有点奇怪。但只是说:)