r - 值为0时线性模型中的错误

标签 r error-handling lm

我有一个包含名称,值1和值2的数据集。我需要进行回归并获取每个名称的t统计量。我在构建线性模型方面获得了StackOverflow的帮助。我注意到有时我得到的数据为0。没关系,我希望模型继续运行而不是炸弹。但是,当其中有0时,线性模型就会炸弹。

    v1<-rnorm(1:50)
    v2<-rnorm(1:50)
    data<-data.frame(v1,v2)
    data[1:50,"nm"]<-"A"
    data[50:100,"nm"]<-"B"
    data[50:100,"v1"]<-0
    data[50:100,"v2"]<-0
    data<-data[c("nm","v1","v2")]

    ## run regression and generate universe
    plyrFunc <- function(x){
      mod <- lm(v1~v2, data = x)
      return(summary(mod)$coefficients[2,3])
    }

    lm <- ddply(data, .(nm), plyrFunc)

如您所见,对于名称B,由于所有内容均为0,因此模型爆炸。我不能只删除所有0,因为通常情况下,这些值的确为0。

我不知道如何编辑上面的代码,以便它继续前进。

谁能告诉我?谢谢!

最佳答案

该模型实际上工作正常,它是summary(mod)$coefficients的子集,会引发错误,因为在全零情况下它仅包含一行:

> summary(lm(v1~v2,data[data$nm=="A",]))$coefficients
              Estimate Std. Error    t value  Pr(>|t|)
(Intercept) -0.1462766  0.1591779 -0.9189503 0.3628138
v2          -0.1315238  0.1465024 -0.8977590 0.3738900

> summary(lm(v1~v2,data[data$nm=="B",]))$coefficients
            Estimate Std. Error t value Pr(>|t|)
(Intercept)        0          0     NaN      NaN

因此,您需要修改功能以考虑这种情况:
plyrFunc <- function(x){
  mod <- lm(v1~v2, data = x)
  res <- summary(mod)$coefficients
  if (nrow(res)>1) res[2,3] else NA
}

library(plyr)
result <- ddply(data, .(nm), plyrFunc)

您的样本数据集的输出:
  nm         V1
1  A -0.1825896
2  B         NA

关于r - 值为0时线性模型中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753329/

相关文章:

r - 是否有一个简单的命令可以使用 lm() 函数进行留一法交叉验证?

renderUI 在渲染之前不会被评估

r - 在 Rprofile 中设置 `width`

python - model.fit()生成错误: ValueError: All input arrays (x) should have the same number of samples

android - 如何使用 BitmapFactory.decodeByteArray() 捕获 "png error"?

r - 尝试从简单线性回归进行预测时出错

r - 对于高基数分组,为什么使用 dplyr 管道 (%>%) 比等效的非管道表达式慢?

R - 如何在特定轮廓内找到点

reactjs - 一个组件正在将类型复选框的不受控制的输入更改为在 React JS 中受控

r - 当预测值没有变化时,为什么 lm 会返回值?