Logit和ClassLog():如何对更大的数据帧进行分类?

时间:2014-08-18 14:42:38

标签: r glm logistic-regression

我正在使用我的数据中的示例运行Logit模型,但是当我尝试运行ClassLog函数来对原始数据框中的案例进行分类时,我收到错误:

Error in table(predict(MOD, type = "response") > cut, resp) : 
all arguments must have the same length

这是我可重复的例子:

set.seed(25)
myData = data.frame(x = rnorm(10000), y = runif(10000), dep = c(rep(1,400),rep(0,9600)))
myData$dep = factor(myData$dep)

使用相同数量的dep ==0dep ==1创建示例:

dep.1 = subset(myData,dep==0)
dep.2 = subset(myData,dep==1)

set.seed(30)
rows = sample(nrow(dep.1),nrow(dep.2))
dep.1 = dep.1[rows,]

mySample = rbind(dep.1,dep.2)

运行logit模型:

model = glm(data=mySample, dep~x+y,family="binomial")

library(QuantPsyc)
使用用于运行模型的示例

工作

ClassLog(MOD = model, mySample$dep,cut=0.5)
使用原始数据myData

无效

ClassLog(MOD = model, myData$dep,cut=0.5)

有没有办法在原始(较大)数据帧上运行ClassLog?我知道我可以使用predict()来获取dep == 1的概率,但ClassLog根据任意cut和分类表提供直接分类,这对于我

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并且发现发生了以下错误,因为我的一个列有一个NA值。

表中的错误(预测(MOD,类型=“响应”)> cut,resp): 所有参数必须具有相同的长度

我删除了带有NA值的记录,ClassLog()给出了所需的输出。

注意:在使用glm函数执行逻辑回归时,对于回归中包含的所有列,它会自动排除包含NA的行。但是,当您将包含逻辑回归结果的变量提供给ClassLog()函数时,它不会自动排除包含NA的行并为您提供上述错误。

答案 1 :(得分:0)

一旦查看ClassLog的代码,错误就完全有道理了。该模型是使用mySample创建的,第二个参数可能是响应变量或某种新数据,这对于模型来说太长了。

但也许,....因为代码使用predict ....你可以:

ClassLog(MOD = model, myData,cut=0.5)   # nope failed.

尝试:

 mod2 <- glm(data=myData, dep~x+y,family="binomial")
 ClassLog(MOD = mod2, myData$dep,cut=0.5)

答案 2 :(得分:0)

ClassLog不处理丢失的数据。因此,您必须在执行以下操作后重写模型:

  

mydata&lt; - subset(mydata,variable_with_NA!=&#34; NA&#34;)

之后该功能应该有效!