使用R中的for循环的Logistic回归

时间:2014-09-05 06:45:54

标签: r logistic-regression

我正在尝试使用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*,值= contr.funs [1 + isOF [nn]]):   对比只能适用于具有2级或更多级别的因素

为什么会发生错误?此外,数据集“mydata5”有大约50000行。请帮助。

先谢谢。

1 个答案:

答案 0 :(得分:0)

您尝试使用只有一个级别的因子进行回归。由于您没有向我们提供您的数据,我们无法重现您的分析,但我可以简单地重现您的错误消息:

> d = data.frame(x=runif(10),y=factor("M",levels=c("M","F")))
> d
            x y
1  0.07104688 M
2  0.11948466 M
3  0.20807068 M
4  0.24049508 M
5  0.44251492 M
6  0.69775646 M
7  0.44479983 M
8  0.64814971 M
9  0.75151207 M
10 0.38810621 M
> glm(x~y,data=d)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

通过将其中一个因子值设置为“F”,我没有收到错误消息:

> d$y[5]="F"
> glm(x~y,data=d)

Call:  glm(formula = x ~ y, data = d)

Coefficients:
(Intercept)           yF  
    0.39660      0.04591  

Degrees of Freedom: 9 Total (i.e. Null);  8 Residual
Null Deviance:      0.5269 
Residual Deviance: 0.525    AIC: 4.91

所以你的循环中的某个地方(我们无法运行,因为我们没有你的数据)你正在这样做。