Erro para rodar o teste de Friedman

Ei gente… bom dia!! Estou tentando analisar um conjunto de dados usando o Friedman. Para vocês terem uma ideia de como está organizado meu banco de dados, segue um resumo:
Rows: 764
Columns: 7
$ ID EXCNT I, EXCNT II, EXCNT III, EXCNT IV, EXCNT V, EXC…
$ EXERC Exerc, Exerc, Exerc, Exerc, Exerc, Exerc, Exerc, Exe…
$ DIETA Padrao, Padrao, Padrao, Padrao, Padrao, Padrao, Padr…
$ TEMPO 6M, 6M, 6M, 6M, 6M, 6M, 6M, 6M, 6M, 6M, 6M, 6M, 6M, …
$ GRUPOS EP6M, EP6M, EP6M, EP6M, EP6M, EP6M, EP6M, EP6M, EB6M…
$ diacoleta P1, P1, P1, P1, P1, P1, P1, P1, P1, P1, P1, P1, P1, …
$ peso 81.6, 113.6, 108.5, 119.3, 133.6, 134.5, 143.0, 115.…

Fiz os ajustes do banco de dados para que ele ficasse no formato longo. Quero verificar o efeito da DIETA no peso. Escolhi o Friedman porque a variável foi medida ao longo do tempo e os dados não tiveram distribuição normal, nem foram homocedásticos. Fiz duas tentativas:
friedman.test(peso ~ DIETA | ID, data = dados2)
dados_friedman ← dados2 %>% friedman_test(peso ~ DIETA |ID)

e nas duas tentativas o output foi o seguinte:

Error in friedman.test.default(mf[[1L]], mf[[2L]], mf[[3L]]) :
não é um desenho de bloco completo sem replicação

Não sei como proceder. Ficarei feliz se alguém pudesse me ajudar!!
Obrigada!!

2 Curtidas

Olá Ivana,

O teste de Friedman é recomendado como um substituto do teste F para medidas repetidas quando procede-se comparação de k amostras relacionadas ou dependentescujas observações apresentam valores com acentuadas variações e em cada tratamento são constituídos blocos. Mas o que é isso Fer? É comparação de tratamentos em que são formados blocos com a intenção de que isto resulte em um pareamento considerável entre os diversos tratamentos.

Um exemplo é:

dados <- matrix(c(12,8,14,17,12,
                  13,9,20,16,15,
                  16,12,22,21,16,
                  7,5,6,11,10),
                  nr = 5,
                  byrow = FALSE,
                 dimnames = list(1:5,c("A","B","C","D")))
#    A  B  C  D
# 1 12 13 16  7
# 2  8  9 12  5
# 3 14 20 22  6
# 4 17 16 21 11
# 5 12 15 16 10

Daí queremos a comparação dos quatro tratamentos (A, B, C, D):

stats::friedman.test(dados)

Quem tem como resultado:

# 	Friedman rank sum test
# 
# data:  dados
# Friedman chi-squared = 14.04, df = 3, p-value = 0.002851

Talvez o seu erro seja devido a disposição do seu banco de dados ou talvez o teste que você esteja se referindo seja de outro pacote e o R esteja lendo como o teste de Friedman do pacote stats.

Dica: Se for fazer comparações múltiplas usa este pacote pgirmess

library(pgirmess)
pgirmess::friedmanmc(dados)
1 Curtida

Olá Fernanda… obrigada pelas respostas. Entendi que pode ter um erro na disposição dos dados, mas não sei como fazer para corrigir, porque não sei qual é o erro, você tem alguma sugestão?
Rodei do jeito que você sugeriu: stats::friedman.test(dados), mas continuou dando o mesmo erro. Tentei instalar o pacote pgirmess e o output foi o seguinte:

RROR: configuration failed for package ‘units’

  • removing ‘/home/ivana/R/x86_64-pc-linux-gnu-library/4.2/units’
    Warning in install.packages :
    installation of package ‘units’ had non-zero exit status
    ERROR: dependency ‘terra’ is not available for package ‘raster’
  • removing ‘/home/ivana/R/x86_64-pc-linux-gnu-library/4.2/raster’
    Warning in install.packages :
    installation of package ‘raster’ had non-zero exit status
    ERROR: dependency ‘units’ is not available for package ‘sf’
  • removing ‘/home/ivana/R/x86_64-pc-linux-gnu-library/4.2/sf’
    Warning in install.packages :
    installation of package ‘sf’ had non-zero exit status
    ERROR: dependency ‘raster’ is not available for package ‘spData’
  • removing ‘/home/ivana/R/x86_64-pc-linux-gnu-library/4.2/spData’
    Warning in install.packages :
    installation of package ‘spData’ had non-zero exit status
    ERROR: dependencies ‘spData’, ‘sf’, ‘units’ are not available for package ‘spdep’
  • removing ‘/home/ivana/R/x86_64-pc-linux-gnu-library/4.2/spdep’
    Warning in install.packages :
    installation of package ‘spdep’ had non-zero exit status
    ERROR: dependencies ‘sf’, ‘spdep’ are not available for package ‘pgirmess’
  • removing ‘/home/ivana/R/x86_64-pc-linux-gnu-library/4.2/pgirmess’
    Warning in install.packages :
    installation of package ‘pgirmess’ had non-zero exit status

Fui então no terminal para tentar instalar as dependências que estavam dando erro e o output foi o seguinte:

Alguns pacotes não puderam ser instalados. Isto pode significar que
você solicitou uma situação impossível ou, se você está usando a
distribuição instável, que alguns pacotes requeridos não foram
criados ainda ou foram retirados da “Incoming”.
A informação a seguir pode ajudar a resolver a situação:

Os pacotes a seguir têm dependências desencontradas:
r-cran-raster : Depende: r-cran-terra mas não será instalado
r-cran-sf : Depende: libgdal29 (>= 3.3.0) mas não é instalável
Depende: libgeos-c1v5 (>= 3.9.0) mas 3.8.0-1build1 está para ser instalado
Depende: libproj19 (>= 7.1.0) mas não é instalável
E: Impossível corrigir problemas, você manteve (hold) pacotes quebrados.

Acho que meu problema é maior… rsrsrs… Obrigada pela ajuda!!!

1 Curtida

Ivana,

Você consegue montar um data frame com um pequeno exemplo de como seus dados se encontram? Mostrando como seus dados estão dispostos consigo te ajudar de uma forma mais efetiva. Você pode utilizar esse código como exemplo:

banco_teste <- tibble::tribble(
  ~id, ~var1, ~var2, ~var3, ~var4,
  1L,  0.25,    0.78,    0.82,    0.25,
  2L,  0.25,    0.52,    0.43,    0.23,
  3L,  0.68,    0.58,    0.63,    0.25,
  4L,  0.68,    0.58,    0.25,    0.45,
  5L,  0.68,    0.58,    0.63,    0.45,
  6L,  0.68,    0.25,    0.63,    0.45,
  7L,  0.25,    0.78,    0.25,    0.25,
  8L,  0.25,    0.25,    0.82,    0.25,
  9L,  0.68,    0.25,    0.63,    0.45,
  10L, 0.65,    0.53,   0.25,    0.23,
  11L, 0.25,    0.25,   0.25,    0.10
)

Mas veja que você utilizou essa configuração para o teste:

friedman.test(peso ~ DIETA | ID, data = dados2)

Essa configuração está no help(friedman.test) e tem como exemplo o seguinte código:

#Banco de dados
# wb
# 
#    breaks wool tension
# 1      26    A       L
# 2      30    A       L
# 3      54    A       L
# 4      25    A       L
# 5      70    A       L
# 6      52    A       L
# 7      51    A       L
# 8      26    A       L
# 9      67    A       L
# 10     18    A       M
# 11     21    A       M
# 12     29    A       M
# 13     17    A       M
# 14     12    A       M
# 15     18    A       M
# 16     35    A       M
# 17     30    A       M
# 18     36    A       M
# 19     36    A       H
# 20     21    A       H
# 21     24    A       H
# 22     18    A       H
# 23     10    A       H
# 24     43    A       H
# 25     28    A       H
# 26     15    A       H
# 27     26    A       H
# 28     27    B       L
# 29     14    B       L
# 30     29    B       L
# 31     19    B       L
# 32     29    B       L
# 33     31    B       L
# 34     41    B       L
# 35     20    B       L
# 36     44    B       L
# 37     42    B       M
# 38     26    B       M
# 39     19    B       M
# 40     16    B       M
# 41     39    B       M
# 42     28    B       M
# 43     21    B       M
# 44     39    B       M
# 45     29    B       M
# 46     20    B       H
# 47     21    B       H
# 48     24    B       H
# 49     17    B       H
# 50     13    B       H
# 51     15    B       H
# 52     15    B       H
# 53     16    B       H
# 54     28    B       H

friedman.test(wb$x, wb$w, wb$t)

# 	Friedman rank sum test
# 
# data:  wb$x, wb$w and wb$t
# Friedman chi-squared = 0.33, df = 1, p-value = 0.6


wb <- aggregate(warpbreaks$breaks,
                by = list(w = warpbreaks$wool,
                          t = warpbreaks$tension),
                FUN = mean)

#   w t     x
# 1 A L 44.56
# 2 B L 28.22
# 3 A M 24.00
# 4 B M 28.78
# 5 A H 24.56
# 6 B H 18.78


friedman.test(x ~ w | t, data = wb)

# 	Friedman rank sum test
# 
# data:  x and w and t
# Friedman chi-squared = 0.33, df = 1, p-value = 0.6

Dá uma olhada nesse exemplo e na disposição dos dados que cada configuração precisa.

Lhe aguardo!

Olá Fernanda… bom dia… me desculpe não ter respondido antes… e obrigada pela ajuda… veja se do jeito que eu fiz você tem uma ideia da disposição dos meus dados:

A tibble: 6 × 7
ID EXERC DIETA TEMPO GRUPOS diacoleta peso

1 EXCNT I Exerc Padrao 6M EP6M P1 81.6
2 EXCNT II Exerc Padrao 6M EP6M P1 114.
3 EXCNT III Exerc Padrao 6M EP6M P1 108.
4 EXCNT IV Exerc Padrao 6M EP6M P1 119.
5 EXCNT V Exerc Padrao 6M EP6M P1 134.
6 EXCNT VI Exerc Padrao 6M EP6M P1 134.

Na coluna ID tenho 96 indivíduos. Na coluna EXERC tenho dois níveis (Exerc e Sedent). Na coluna DIETA tenho três níveis (Padrão, Cast e Banha). Na coluna TEMPO tenho dois níveis (6M e 3M). A coluna “diacoleta” se refere aos momentos que os dados de peso foram coletados, foram coletados em 17 momentos diferentes durante o experimento. A coluna peso se refere à variável dependente. Tentei analisar os dados usando a ANOVA mista, mas os pressupostos de normalidade e homocedasticidade não foram atendidos. Tentei a transformação logarítmica, mas continuou não atendendo os pressupostos. Parti então para a análise não paramétrica. Entendi que o Friedman seria mais adequado, uma vez que se refere à uma medida realizada ao longo do tempo. Neste caso, analisaria cada efeito isoladamente, ou seja, o efeito do exercício e depois o da dieta, sem usar interações, já que o teste de Friedman pode ser equiparado à ANOVA one way. Resolvi desconsiderar o efeito do TEMPO por entender que esta análise não era importante.

Agradeço a sua ajuda Fernanda e me desculpe se não consegui atender às suas dúvidas… sou uma iniciante na linguagem e algumas coisas que talvez sejam simples ainda não consigo fazer.

Abs