我正在使用我的数据中的示例运行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 ==0
和dep ==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
和分类表提供直接分类,这对于我
答案 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;)
之后该功能应该有效!