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")