首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >偏移量(x,y,lm.fit=偏移量,singular.ok = singular.ok,...)错误:0(非NA)情况

偏移量(x,y,lm.fit=偏移量,singular.ok = singular.ok,...)错误:0(非NA)情况
EN

Stack Overflow用户
提问于 2013-04-26 17:08:21
回答 2查看 11.4K关注 0票数 0

当我将lm和loop一起使用时,我遇到了一个问题。我想用xxyy的每四个值来拟合回归线。

这是我的代码,

代码语言:javascript
复制
>xx<-c(0 , 55, 146, 457, 643, 825,1008)
>yy<-c(NA, 110, 132, 108, 124, 115, 134)
>n<-length(xx)
>slop<-rep(NA,n)
>for (i in 4:n){
   x<-xx[i-3:i]
   y<-yy[i-3:i]
   slop[i]<-lm(y~x)$coefficients[2]
   }
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

有人能告诉我为什么会这样吗?我尝试手动执行此操作,选取xxyy的每四个值,并使用lm,然后R成功运行。

EN

回答 2

Stack Overflow用户

发布于 2013-04-26 17:22:59

[i-3:i]更改为[(i-3):i]可消除错误消息。

票数 1
EN

Stack Overflow用户

发布于 2013-04-26 17:43:18

原因是由于操作符优先级(在-:之间),它没有执行您期望的操作:

对于您得到的第一次迭代:

代码语言:javascript
复制
4-3:4
[1] 1 0
xx[4-3:4]
[1] 0
yy[4-3:4]
[1] NA

因此:

代码语言:javascript
复制
lm(yy[1]~xx[1])
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

为了确保您得到想要的结果,您需要添加括号来明确说明所需运算符的顺序:

代码语言:javascript
复制
(4-3):4
[1] 1 2 3 4

for (i in 4:n){
x<-xx[(i-3):i]
y<-yy[(i-3):i]
slop[i]<-lm(y~x)$coefficients[2]
     }

slop
[1]           NA           NA           NA -0.023502847  0.001080591
[6] -0.018919254  0.037666732
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16232650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档