在R中使用for循环的逻辑回归[重复]

Posted

技术标签:

【中文标题】在R中使用for循环的逻辑回归[重复]【英文标题】:Logistic Regression using for loops in R [duplicate] 【发布时间】: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&lt;-(*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 个分类变量中运行各种排列和组合并确定它们各自的概率。 【参考方案1】:

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

> 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

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

【讨论】:

以上是关于在R中使用for循环的逻辑回归[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R语言在逻辑回归中求R square R方

逻辑回归 - 在 R 中定义参考水平

逻辑回归算法实现_基于R语言

在 R 中绘制逻辑回归曲线

在 R 中绘制多元逻辑回归模型的结果

R中逻辑回归的confusionMatrix