2014-01-05 40 views
0

我想知道是否有簡單的方法檢查我的數據中的零值是否排除在我的anova中。如何檢查anova測試是否排除零值

我第一次改變了我所有的零個值NA與

BFL$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) 

PS:我剛剛被使用的R用幾周的時間,而這個網站一直是巨大的幫助我:)

+0

如果我理解正確的話,在'lm'的'subset'說法可能是與你有關的。例如。 'subset = logDecomposers!= 0' – Henrik

回答

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.excludena.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