在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<-
(*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循环的逻辑回归[重复]的主要内容,如果未能解决你的问题,请参考以下文章