我需要使用循环从我的数据集中找到所有预测变量(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,因此也是如此)。但是为了排名?嗯,我想说有点奇怪。但只是说:)
我是 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,因此也是如此)。但是为了排名?嗯,我想说有点奇怪。但只是说:)