【发布时间】:2014-10-30 01:29:31
【问题描述】:
我正在尝试使用 R 中的 For 循环运行二元逻辑回归。 我的代码如下:
mydata5<-read.table(file.choose(),header=T,sep=",")
colnames(mydata5)
Class <- 1:16
Countries <- 1:5
Months <- 1:7
DayDiff <- 1:28
mydata5$CT <- factor(mydata5$CT)
mydata5$CC <- factor(mydata5$CC)
mydata5$C <- factor(mydata5$C)
mydata5$DD <- factor(mydata5$DD)
mydata5$UM <- factor(mydata5$UM)
for(i in seq(along=Class))
{
mydata5$C=mydata5$C[i];
for(i2 in seq(along=Countries))
{
mydata5$CC=mydata5$CC[i2];
for(i3 in seq(along=Months))
{
mydata5$UM=mydata5$UM[i3];
for(i4 in seq(along=DayDiff))
{
mydata5$DD=mydata5$DD[i4];
lrfit5 <- glm(CT ~ C+CC+UM+DD, family = binomial(link = "logit"),data=mydata5)
summary(lrfit5)
library(lattice)
in_frame<-data.frame(C="mydata5$C[i]",CC="mydata5$CC[i2]",UM="mydata5$UM[i3]",DD="mydata5$DD[i4]")
predict(lrfit5,in_frame, type="response",se.fit=FALSE)
}
}
}
}
但是,我收到以下错误:
contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) 中的错误:
对比只能应用于具有 2 个或更多级别的因素
为什么会发生错误?此外,数据集“mydata5”有大约 50000 行。请帮助。
提前致谢。
【问题讨论】:
-
我们没有您的数据集,因此我们无法运行此程序。您没有告诉我们错误发生在哪一行(猜测:
glm)。为什么不在循环中打印 i、i2、i3 和 i4 以了解它是在第一次发生还是在特定时间发生?in_frame的构造是否存在明显的问题?请改进这个问题。 -
阅读错误消息并再次猜测,如果您尝试使用只有一个类别的分类变量的数据拟合模型,您会得到的错误 - 比如尝试拟合“性”的效果“只有“男性”数据点。但这是一个猜测,因为我们没有您的数据文件或样本可供试用。
-
所有这些循环的目的是什么?!?看起来你正在用所有这些奇怪的重新分配可怕地毁坏你的数据。正如@Spacedman 所说,您应该包含reproducible example 否则我们无法测试可能的解决方案,甚至无法查看错误到底发生在哪里。我猜到最后,由于矢量回收,
mydata在所有这些循环之后具有所有相同的协变量值。 -
@Spacedman:是的,错误发生在 glm 行。分类变量具有所需的级别数。我使用函数 lapply(mydata5[c("C", "CC", "UM", "DD")], unique) 进行了检查。基本上,我使用 4 个 For 循环的意图是我想从 4 个分类变量中运行各种排列和组合并确定它们各自的概率。
标签: r logistic-regression