Se você deseja manter a aov()função, pode usar o emmeanspacote que pode manipular aovlist(e muitos outros ) objetos.
library("emmeans")
# set orthogonal contrasts
options(contrasts = c("contr.sum", "contr.poly"))
aov_velocity <- aov(Velocity ~ Material + Error(Subject / Material), data = scrd)
Depois de criar um emmGridobjeto da seguinte maneira
emm <- emmeans(aov_velocity, ~ Material)
é muito fácil obter todas as comparações (post hoc) aos pares usando a pairs()função ou qualquer contraste desejado usando a contrast()função do emmeanspacote. Ajustes de teste múltiplo podem ser alcançados através do adjustargumento destas funções:
pairs(emm) # adjust argument not specified -> default p-value adjustment in this case is "tukey"
Para obter mais informações, achei as vinhetas emmeans detalhadas e a documentação muito úteis.
Além disso, você pode encontrar um exemplo completo (reproduzível), incluindo uma descrição de como obter os pesos de contraste corretos na minha resposta aqui .
Observe, no entanto, que o uso de um modelo univariado para os testes post hoc pode resultar em valores p anti-conservadores se a esfericidade for violada.