gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:54:23 26 4
gpt4 key购买 nike

我有一个包含名称,值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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com