我正在尝试根据调查数据集构建逻辑回归模型。我有兴趣查看激励类型(例如,礼品卡)和学生的年级水平(新生,大二等)的影响,以预测他/她是否完成了调查。数据框具有数百个变量,所以我的第一步是仅使用所需的东西,在tidyverse中使用管道运算符执行以下操作:
1)选择四个感兴趣的变量:如果学生完成了调查(完成),校园位置(校园),奖励类型(激励)和每位学生的等级(水平) )。
2)过滤器仅来自一个感兴趣的校园(“史密斯”)和过滤器的响应仅查看三种激励类型,因为“其他”不是很有意义在这种情况下。
我尝试运行模型,但是直到我将字符串重新编码为数字变量(0、1、2 ...)并指定它们为因子后,该模型才起作用。我已经在其他论坛上广泛阅读过,您可以为每个变量使用“ as.factor”和“ recode”。但是对每个变量执行此操作似乎很麻烦,将其分配给新变量,然后将其设置为as.factor。
我是否可以将管道运算符中的字符串重新编码为数字变量(例如,新生= 0,二年级= 1,初中= 2,等等),然后使用as.factor()设置为因子?我尝试在管道操作员中执行此操作,但返回错误消息。还是需要在过滤之前执行这些操作?
有人可以提供任何指针吗?下面是我正在使用的代码:
survey <- read.csv("SURVEY2017.csv")
survey1 <- survey %>%
select(FINISHED, CAMPUS, INCENTIVE, LEVEL) %>%
filter(CAMPUS == "smith") %>%
filter(INCENTIVE %in% c("A chance to win one of ten $100 Visa
gift cards",
"A chance to win one of three $500 Visa gift cards",
"I wanted my opinions to be heard by faculty, staff, and
the administration"))
model <- glm(FINISHED ~ INCENTIVE + LEVEL, family = "binomial",
data = survey1)
谢谢!
答案 0 :(得分:0)
首先,通常最好为您的问题提供一个最小的工作示例(mwe),其中应包括一个玩具数据集。
根据您的问题,您必须先将变量重新编码为数字,然后再分配为因子。使用dplyr
可以有很多方法,但是当要重新编码的类别超过2个时,我真的很喜欢dplyr::case_when()
。然后,我用factor()
包装它,并指定levels
和labels
。
library(magrittr)
library(dplyr)
data <- data.frame(FINISHED = sample(c('Y', 'N'), 1000, replace = T),
CAMPUS = sample(c("smith", "campus A", "campus B"), 1000, replace = T),
INCENTIVE = sample(c("Gift cards", "Heard by faculty"), 1000, replace = T),
LEVEL = sample(c("freshman", "sophomore", "junior"), 1000, replace =T),
stringsAsFactors = F)
data <- data %>%
mutate(LEVEL = factor(dplyr::case_when(
LEVEL == "freshman" ~ 0,
LEVEL == "sophomore" ~ 1,
LEVEL == "junior" ~ 2
), levels = c(0:2), labels = c('freshman', "sophomore", "junior")))
data
结构:
> str(data)
'data.frame': 1000 obs. of 4 variables:
$ FINISHED : chr "Y" "N" "Y" "N" ...
$ CAMPUS : chr "campus B" "campus A" "smith" "campus B" ...
$ INCENTIVE: chr "Gift cards" "Heard by faculty" "Gift cards" "Gift cards" ...
$ LEVEL : Factor w/ 3 levels "freshman","sophomore",..: 3 3 2 2 2 1 1 2 2 2 ...