logistic回归在R
我有这样的数据,但有更多类似类型的变量logistic回归在R,r,logistic-regression,dummy-variable,R,Logistic Regression,Dummy Variable,我有这样的数据,但有更多类似类型的变量 Company Job Month Reported Injury.Loc Age 1 Cartpenter 2 0 Leg 23 2 Mechanic 12 1 Arm 33 3 Legal 1 1 Arm 24 4 Carp
Company Job Month Reported Injury.Loc Age
1 Cartpenter 2 0 Leg 23
2 Mechanic 12 1 Arm 33
3 Legal 1 1 Arm 24
4 Carpenter 1 1 Leg 75
5 Legal 4 0 Head 23
3 Dental 6 1 Wrist 40
我不能对变量的分类性质进行下面的逻辑回归
log_m1 <- glm(Reported ~. , data = df, family = "binomial")
log\u m1您可以对vtreat
和magritt
包以及dplyr
使用下一种方法。代码如下:
library(vtreat)
library(dplyr)
library(magrittr)
#Data
df <- structure(list(Company = c(1L, 2L, 3L, 4L, 5L, 3L), Job = c("Cartpenter",
"Mechanic", "Legal", "Carpenter", "Legal", "Dental"), Month = c(2L,
12L, 1L, 1L, 4L, 6L), Reported = c(0L, 1L, 1L, 1L, 0L, 1L), Injury.Loc = c("Leg",
"Arm", "Arm", "Leg", "Head", "Wrist"), Age = c(23L, 33L, 24L,
75L, 23L, 40L)), class = "data.frame", row.names = c(NA, -6L))
完成后,我们使用designTreatmentsZ()
和use_series
处理变量并在新的数据帧中赋值:
#Code for dummy vars
treatplan <- designTreatmentsZ(df2, vars)
#Process
scoreFrame <- treatplan %>%
use_series(scoreFrame) %>%
select(varName, origName, code)
#Create new data
dframe.treat <- prepare(treatplan, df2, varRestriction = newvars)
我们在新数据帧中提取新变量:
#Code for dummy vars
treatplan <- designTreatmentsZ(df2, vars)
#Process
scoreFrame <- treatplan %>%
use_series(scoreFrame) %>%
select(varName, origName, code)
#Create new data
dframe.treat <- prepare(treatplan, df2, varRestriction = newvars)
然后你就可以创建模型了。小心奇点,否则模型会给出错误的结论
#Model
log_m1 <- glm(Reported ~. , data = newdf, family = "binomial")
#模型
log_m1您可以对数字和分类自变量的混合进行逻辑回归-这不是您得到错误消息的原因
让我们首先展示一下,我们可以毫无问题地运行这样的回归:
set.seed(69)
df
#>调用:glm(公式=outcome~,family=“二项式”,data=df)
#>
#>系数:
#>(截取)性别男性年龄
#> 0.169183 0.019774 -0.003115
#>
#>自由度:总共99个(即零);97剩余
#>零偏差:138.6
#>剩余偏差:138.5 AIC:144.5
但是,如果我们将sex
的所有值都设置为相同的值,则可以复制您的错误:
df2您不认为该错误是由其中一列中的一个因子级别引起的吗?(这当然是重现错误的最简单的方法)如果是这样的话,假设像这样创建虚拟变量,虽然是一个巧妙的技巧,但并不能解决问题,或者我没有抓住要点?@AllanCameron我也很困惑OP希望虚拟变量运行模型,但它可以生成NA
的系数。
#Bind with original df
newdf <- cbind(df,dframe.treat)
Company Month Reported Age Job_lev_x_Carpenter Job_lev_x_Cartpenter Job_lev_x_Dental
1 1 2 0 23 0 1 0
2 2 12 1 33 0 0 0
3 3 1 1 24 0 0 0
4 4 1 1 75 1 0 0
5 5 4 0 23 0 0 0
6 3 6 1 40 0 0 1
#Model
log_m1 <- glm(Reported ~. , data = newdf, family = "binomial")