R не удаляя термины при выполнении MAM - PullRequest
1 голос
/ 20 июля 2011

Я хочу сделать MAM, но мне трудно удалить некоторые термины:

 full.model<-glm(SSB_sq~Veg_height+Bare+Common+Birds_Foot+Average_March+Average_April+
Average_May+Average_June15+Average_June20+Average_June25+Average_July15
+Average_July20+Average_July25,family="poisson") 
summary(full.model)

Я считаю, что я должен удалить эти термины, чтобы начать MAM следующим образом:

  model1<-update(full.model,~.-Veg_height:Bare:Common:Birds_Foot:Average_March
:Average_April:Average_May:Average_June15:Average_June20:Average_June25:
Average_July15:Average_July20:Average_July25,family="poisson")
summary(model1)
anova(model1,full.model,test="Chi")

Но я получаю этот вывод:

anova(model1,full.model,test="Chi")
Analysis of Deviance Table

Model 1: SSB_sq ~ Veg_height + Bare + Common + Birds_Foot + Average_March + 
    Average_April + Average_May + Average_June15 + Average_June20 + 
    Average_June25 + Average_July15 + Average_July20 + Average_July25
Model 2: SSB_sq ~ Veg_height + Bare + Common + Birds_Foot + Average_March + 
    Average_April + Average_May + Average_June15 + Average_June20 + 
    Average_June25 + Average_July15 + Average_July20 + Average_July25
  Resid. Df Resid. Dev Df Deviance P(>|Chi|)
1       213     237.87                      
2       213     237.87  0        0 

Я попытался поместить знаки плюс в модель1 вместо двоеточий, так как я цеплялся за соломинку, когда читал свои заметки, но происходит то же самое.

Почему обе мои модели одинаковы? Я пытался выполнить поиск в Google, но не очень хорошо разбираюсь в терминологии, поэтому мои поиски не вызывают большого интереса.

1 Ответ

2 голосов
/ 20 июля 2011

Если я правильно прочитал ваше намерение, вы пытаетесь подобрать нулевую модель без терминов?Если это так, то более простой способ - просто использовать SSB_sq ~ 1 в качестве формулы, то есть модель только с перехватом.

fit <- lm(sr ~ ., data = LifeCycleSavings)
fit0 <- lm(sr ~ 1, data = LifeCycleSavings)
## or via an update:
fit01 <- update(fit, . ~ 1)

Что дает, например:

> anova(fit)
Analysis of Variance Table

Response: sr
          Df Sum Sq Mean Sq F value    Pr(>F)    
pop15      1 204.12 204.118 14.1157 0.0004922 ***
pop75      1  53.34  53.343  3.6889 0.0611255 .  
dpi        1  12.40  12.401  0.8576 0.3593551    
ddpi       1  63.05  63.054  4.3605 0.0424711 *  
Residuals 45 650.71  14.460                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
> anova(fit, fit0)
Analysis of Variance Table

Model 1: sr ~ pop15 + pop75 + dpi + ddpi
Model 2: sr ~ 1
  Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
1     45 650.71                                  
2     49 983.63 -4   -332.92 5.7557 0.0007904 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Объяснение формул, которые я использую:

  • Первая модель использовала ярлык ., что означает все остальные переменные в аргументе data (в моей модели это означало все переменные в LifeCycleSavings наRHS формулы, за исключением sr, который уже находится в LHS).
  • Во второй модели (fit0) мы включаем 1 только в RHS формулы.В R 1 означает перехват, поэтому sr ~ 1 означает соответствие модели только для перехвата.По умолчанию используется перехват, следовательно, нам не нужно 1 при указании первой модели fit.
  • Если вы хотите подавить перехват, добавьте - 1 или + 0 в формулу.

Для ваших данных первой моделью будет:

full.model <- glm(SSB_sq ~ ., data = FOO, family = "poisson")

, где FOO - это фрейм данных, содержащий ваши переменные - вы используете фрейм данных, не так ли?ты?Нулевая модель только для перехвата будет указана с использованием одного из:

null.model <- glm(SSB_sq ~ 1, data = FOO, family = "poisson")

или

null.model <- update(full.model, . ~ 1)
...