绘制线性回归时遇integerOneIndex错误,回归线仅显示一条
问题排查与修正
错误原因
你的代码报错及仅显示一条回归线的核心问题出在第二个for循环的迭代条件上:
nlevels(No_of_parrots)是错误用法:No_of_parrots是数值型向量,而nlevels()函数仅对因子类型生效,对数值向量调用该函数会返回NULL,导致循环的迭代范围1:nlevels(No_of_parrots)异常。- 由于迭代范围错误,循环无法正确遍历按因子
A拆分后的两组数据(SY和SA各有2个元素),进而出现索引越界错误,且仅绘制了部分回归线。
修正后的代码
将第二个for循环的迭代条件从nlevels(No_of_parrots)改为nlevels(A),与第一个循环保持一致:
A <- as.factor(Fire) X <- as.numeric(Length_in_meter) No_of_parrots <- as.numeric(No_of_parrots) model <- aov(No_of_parrots ~ X*A) summary(model) par(cex=1.5) plot(X, No_of_parrots, type = "n" , las=1, xlab = "Length in meter" , ylab = "No_of_parrots") SA <- split(X , A) SY <- split(No_of_parrots , A) for (i in 1:nlevels(A)) points(SA[[i]], SY[[i]], pch = i-1) # 修正此处的迭代条件 for (i in 1:nlevels(A)) abline(lm(SY[[i]] ~ SA[[i]]), lty=1 )
额外说明
- 拆分后的
SA和SY的元素数量等于因子A的水平数(你的场景中是2),因此用nlevels(A)作为循环次数才是正确的。 - 若要区分两条回归线,可给
abline添加不同颜色参数,比如col = i,方便观察分组差异。
内容的提问来源于stack exchange,提问作者Spybuster
相关产品推荐
相关产品推荐

