Как скрыть уровни значимости анова внизу таблицы

Предположим, я сравнил две модели вложенных случайных эффектов, используя anova(), и результат ниже:

new.model: new
current.model: new 
              Df    AIC    BIC  logLik  Chisq Chi Df Pr(>Chisq)    
new.model      8 299196 299259 -149590                             
current.model  9 299083 299154 -149533 115.19      1  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Я хотел бы использовать только табличную часть (см. ниже):

              Df    AIC    BIC  logLik  Chisq Chi Df Pr(>Chisq)    
new.model      8 299196 299259 -149590                             
current.model  9 299083 299154 -149533 115.19      1  < 2.2e-16 ***

Я знаю, что могу избавиться от части заголовка (см. удар), установив для заголовка значение null, используя атрибуты (anova.object)$heading = NULL, но я не знаю, как избавиться от нижней части: Signif . коды: .....

new.model: new
current.model: new

Я принципиально не хочу использовать data.frame (см. ниже), поскольку он изменяет пустые ячейки на NA.

data.frame(anova(new.model, current.model))
              Df      AIC      BIC    logLik    Chisq Chi.Df   Pr..Chisq.
new.model      8 299196.4 299258.9 -149590.2       NA     NA           NA
current.model  9 299083.2 299153.6 -149532.6 115.1851      1 7.168247e-27

Интересно, знаете ли вы, ребята, способ справиться с этой ситуацией.

[ОБНОВЛЕНИЕ]: в итоге я написал обертку, используя print.anova:

anova.print = function(object, signif.stars = TRUE, heading = TRUE){
    if(!heading)
         attributes(object)$heading = NULL
    print.anova(object, signif.stars = signif.stars)
}

Пример:

dv = c(rnorm(20), rnorm(20, mean=2), rnorm(20))
iv = factor(rep(letters[1:3], each=20))
anova.object = anova(lm(dv~iv))

Analysis of Variance Table
Response: dv 
          Df Sum Sq Mean Sq F value    Pr(>F)    
iv         2 46.360 23.1798  29.534 1.578e-09 ***
Residuals 57 44.737  0.7849                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 


anova.print(anova.object, F, F)
          Df Sum Sq Mean Sq F value    Pr(>F)
iv         2 46.360 23.1798  29.534 1.578e-09
Residuals 57 44.737  0.7849             

person Alex    schedule 17.05.2012    source источник
comment
options(show.signif.stars=FALSE) помогает? (Было бы неплохо, если бы вы могли привести воспроизводимый пример...)   -  person Ben Bolker    schedule 17.05.2012
comment
@Ben Это работает, но требует глобальных изменений. Если вы не хотите звездочек, это путь.   -  person Tyler Rinker    schedule 17.05.2012


Ответы (2)


На днях у нас был похожий пост о том, что NA не отображаются. Вы можете сделать:

x <- as.matrix(anova(new.model, current.model))
print(x, na.print="", quote=FALSE)

Более воспроизводимый пример с использованием набора данных mtcars:

x <- as.matrix(anova(lm(hp~mpg+am, data=mtcars)))
print(x, na.print="", quote=FALSE)
person Tyler Rinker    schedule 17.05.2012
comment
Спасибо! Я на самом деле разместил другой вопрос! Я приношу извинения за этот дублирующийся пост, поскольку я думал, что использование фактического вывода ANOVA потребует другого подхода. Должен был попробовать решения в другом посте, прежде чем публиковать этот. Еще раз спасибо! - person Alex; 17.05.2012
comment
X. Посмотрите на решение DWin. Это намного лучше; встроенный и меньше работы. хотя я предполагаю, что этот метод позаботится о заголовках и знаках звезд одним махом. - person Tyler Rinker; 17.05.2012

РЕДАКТИРОВАТЬ: anova имеет метод печати с signif.stars в качестве параметра

anova(new.model, current.model, signif.stars=FALSE)

> x <- anova(lm(hp~mpg+am, data=mtcars))
> print(x, signif.stars=F)
Analysis of Variance Table

Response: hp
          Df Sum Sq Mean Sq F value    Pr(>F)
mpg        1  87791   87791 54.5403 3.888e-08
am         1  11255   11255  6.9924   0.01307
Residuals 29  46680    1610       
person IRTFM    schedule 17.05.2012
comment
Вы также можете просто удалить легенду: print(x, signif.legend=FALSE) - person Aaron left Stack Overflow; 17.05.2012
comment
Не знал этого. Это лучше, чем мой ответ точно. +1 - person Tyler Rinker; 17.05.2012
comment
@ Аарон, это действительно просто. Я пытался упростить скрипт, который планирую использовать для обработки своих данных. Так что эти советы будут очень кстати. - person Alex; 17.05.2012
comment
@X.He: Вам также может быть полезно прочитать код print.anova и printCoefmat; может случиться так, что вы просто захотите вытащить из этих функций только те функции, которые вам нужны. - person Aaron left Stack Overflow; 17.05.2012
comment
Мне кажется, что следует также рекомендовать страницу справки для printCoefmat. - person IRTFM; 17.05.2012
comment
очень плохо, что print.anova не имеет опции print.heading -- иначе вы могли бы сделать все это одной командой. Вы можете скопировать функцию print.anova и легко добавить эту функциональность ... Я бы хотел, чтобы была функция setAttributes(), такая как setNames(), поэтому вы могли бы сделать print(setAttributes(x,heading=NULL),signif.stars=FALSE) - person Ben Bolker; 17.05.2012
comment
@BenBolker Да, в итоге я написал оболочку, используя print.anova, которую я поместил в основную часть своего поста. - person Alex; 18.05.2012
comment
Кстати, в чем разница между переносом aov() в anova() и в summary()? Я могу сказать, что anova() не подавляет предупреждения, но есть ли другие отличия? - person Waldir Leoncio; 24.04.2014