user3161323
user3161323

Reputation: 1

How to check if an anova test excludes zero values

I was wondering if there is an simply way check if my zero values in my data are excluded in my anova.

I first changed all my zero values to NA with

BFL$logDecomposers[which(BFL$logDecomposers==0)] = NA

I'm not sure if 'na.action=na.exclude' makes sure my values are being ignored(like I want them to be)??

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.:I've just been using R for a few weeks, and this website has been of tremendous help to me :)

Upvotes: 0

Views: 687

Answers (1)

Ben Bolker
Ben Bolker

Reputation: 226761

You haven't given a reproducible example, but I'll make one up.

set.seed(101)
mydata <- data.frame(x=rnorm(100),y=rlnorm(100))
## add some zeros
mydata$y[1:5] <- 0

As pointed out by @Henrik you can use the subset argument to exclude these values:

nullmodel <- lm(y~1,data=mydata,subset=y>0)
fullmodel <- update(nullmodel,.~x)

It's a little confusing, but na.exclude and na.omit (the default) actually lead to the same fitted model -- the difference is in whether NA values are included when you ask for residual or predicted values. You can try it out:

mydata2 <- within(mydata,y[y==0] <- NA)
fullmodel2 <- update(fullmodel,subset=TRUE,data=mydata2)

(subset=TRUE turns off the previous subset argument, by specifying that all the data should be included).

You can compare the fits (coefficients etc.). One shortcut is to use the nobs method, which counts the number of observations used in the model:

nrow(mydata)  ## 100
nobs(nullmodel)  ## 95
nobs(fullmodel)  ## 95
nobs(fullmodel2)  ## 95
nobs(update(fullmodel,subset=TRUE))  ## 100

Upvotes: 1

Related Questions