R 在逻辑回归中添加虚拟变量向量
我目前正在尝试进行逻辑回归,其中一个变量是32个虚拟变量的向量。每个假人代表一种犯罪类型。例如:R 在逻辑回归中添加虚拟变量向量,r,vector,linear-regression,logistic-regression,dummy-variable,R,Vector,Linear Regression,Logistic Regression,Dummy Variable,我目前正在尝试进行逻辑回归,其中一个变量是32个虚拟变量的向量。每个假人代表一种犯罪类型。例如: narcotics <- ifelse(train$PRIMARY.DESCRIPTION == "NARCOTICS", 1,0) 我认为这是可行的,因为它们来自同一个数据集,并且假人代表其中一列的每个唯一元素。当我分别输入每个虚拟变量时,它是成功的,但我想压缩回归并使其更有效 提前感谢如果您希望每种类型的犯罪都成为自己的预测因素,您需要将它们绑定到训练,然后在lm公式中指定变量。(实际上
narcotics <- ifelse(train$PRIMARY.DESCRIPTION == "NARCOTICS", 1,0)
我认为这是可行的,因为它们来自同一个数据集,并且假人代表其中一列的每个唯一元素。当我分别输入每个虚拟变量时,它是成功的,但我想压缩回归并使其更有效
提前感谢如果您希望每种类型的犯罪都成为自己的预测因素,您需要将它们绑定到
训练
,然后在lm
公式中指定变量。(实际上,对于logit,它应该是glm()
)
对于更简洁的公式,请在glm()
的data=
参数中子集train
,以仅包括响应变量和预期设计矩阵。然后使用street1~。
作为公式
train <- cbind(train, narcotics, theft)I
model.vars <- c("narcotics", "theft", "street1")
logit.mod.train <- glm(street1 ~ ., data = train[,model.vars], family = "binomial")
model.frame.default中出错(公式=响应~PRIMARY.DESCRIPTION+:
可变长度不同(针对'crime.type'找到)
错误消息显示
变量长度不同
。可能与您创建crime.type
的方式有关。您的意思是crime.type谢谢我们的回答。我忘了提到street1实际上是犯罪地点的虚拟变量。因此列是location.DESCRIPTION,元素是street。因此e是:street1没关系。我算出了。谢谢!因为street1是一个虚拟变量,所以我从model.vars中排除了它,它工作了!如果这个解决方案有帮助,请单击答案旁边的复选标记将其标记为接受。
logit.mod.train <- lm(street1 ~ BEAT+WARD+X.COORDINATE+Y.COORDINATE+LATITUDE+LONGITUDE+crime.type, data = train, family = "binomial")
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')
train <- cbind(train, narcotics, theft)I
model.vars <- c("narcotics", "theft", "street1")
logit.mod.train <- glm(street1 ~ ., data = train[,model.vars], family = "binomial")
N <- 100
train <- data.frame(PRIMARY.DESCRIPTION=sample(c("A","B"), replace = T, size = N),
response = rbinom(n=N, prob=0.7, size=1))
dim(train) # 100 2
narcotics <- ifelse(train$PRIMARY.DESCRIPTION == "A", 1, 0)
length(narcotics) # 100
theft <- ifelse(train$PRIMARY.DESCRIPTION == "B", 1, 0)
length(theft) # 100
crime.type <- c(desc.A, desc.B)
length(crime.type) # 200
logit.mod.train <- glm(response ~ PRIMARY.DESCRIPTION+crime.type, data = train, family = "binomial")