我想知道是否有一种简单的方法可以检查我的数据中的零值是否被排除在我的anova中。
我首先用
将所有零值更改为NABFL$logDecomposers[which(BFL$logDecomposers==0)] = NA
我不确定'na.action = na.exclude'是否确保我的值被忽略(就像我希望它们一样)?
standard<-lm(logDecomposers~1, data=BFL) #null model
ANOVAlnDeco.lm<-lm(logDecomposers~Species_Number,data=BFL,na.action=na.exclude)
anova(standard,ANOVAlnDeco.lm)
P.S .:我刚刚使用R几个星期了,这个网站对我有很大的帮助:))
答案 0 :(得分:1)
你没有给出一个可重复的例子,但我会做一个。
set.seed(101)
mydata <- data.frame(x=rnorm(100),y=rlnorm(100))
## add some zeros
mydata$y[1:5] <- 0
正如@Henrik所指出的,您可以使用subset
参数来排除这些值:
nullmodel <- lm(y~1,data=mydata,subset=y>0)
fullmodel <- update(nullmodel,.~x)
这有点令人困惑,但na.exclude
和na.omit
(默认值)实际上会导致相同的拟合模型 - 不同之处在于NA
当您要求剩余或预测值时,会包含值。你可以尝试一下:
mydata2 <- within(mydata,y[y==0] <- NA)
fullmodel2 <- update(fullmodel,subset=TRUE,data=mydata2)
(subset=TRUE
通过指定应包含所有数据来关闭先前的subset
参数。
您可以比较拟合(系数等)。一种捷径是使用nobs
方法,该方法计算模型中使用的观察数量:
nrow(mydata) ## 100
nobs(nullmodel) ## 95
nobs(fullmodel) ## 95
nobs(fullmodel2) ## 95
nobs(update(fullmodel,subset=TRUE)) ## 100