在逻辑回归中添加虚拟变量的向量

时间:2018-04-26 01:10:24

标签: r vector linear-regression logistic-regression dummy-variable

我目前正在尝试进行逻辑回归,其中一个变量是32个虚拟变量的向量。每个假人代表一种犯罪。例如:

narcotics <- ifelse(train$PRIMARY.DESCRIPTION == "NARCOTICS", 1,0)

然后创建矢量:

crime.type <- c(narcotics, theft, other.offense, burglary, motor.vehicle.theft, battery, robbery, assault, criminal.damage, deceptive.practice, kidnapping, etc.)

逻辑模型如下:

logit.mod.train <- lm(street1 ~ BEAT+WARD+X.COORDINATE+Y.COORDINATE+LATITUDE+LONGITUDE+crime.type, data = train, family = "binomial")

值得注意的是,street1实际上是街道上犯罪地点的虚拟变量。因此列是LOCATION.DESCRIPTION,元素是street。

street1 <- ifelse(train$LOCATION.DESCRIPTION == "STREET", 1,0). 

产生此错误:

Error in model.frame.default(formula = street1 ~ BEAT + WARD + X.COORDINATE +  : 
variable lengths differ (found for 'crime.type')

我认为这会有效,因为它们来自同一个数据集,而虚拟对象代表其中一个列的每个独特元素。当我单独输入每个虚拟变量时,它是成功的,但我想压缩回归并使其更有效。

提前谢谢

1 个答案:

答案 0 :(得分:0)

如果您打算将每种类型的犯罪作为自己的预测变量,则需要将它们绑定到train,然后在lm公式中指定变量。 (实际上对于logit它应该是glm()。)

对于更紧凑的公式,train的{​​{1}}参数中的子集data=仅包含您的响应变量和您想要的设计矩阵。然后使用glm()作为公式。

street1 ~ .

更多解释:

完成后使用train <- cbind(train, narcotics, theft)I model.vars <- c("narcotics", "theft", "street1") logit.mod.train <- glm(street1 ~ ., data = train[,model.vars], family = "binomial") 会为ifelse中的每个元素生成10
当您将train定义为crime.type(其长度为narcotics)加上任何其他元素时,train的长度会超过crime.type中的行数。
然后你要求train处理一个不平衡的设计矩阵,其中一个预测变量(lm())中的元素比其他预测变量更多。这就是你收到错误的原因。

以下是该问题的复制:

crime.type
  

model.frame.default中的错误(formula = response~PRIMARY.DESCRIPTION +:         变量长度不同(找到'crime.type')