A maneira como você fez o teste do qui-quadrado não está correta. Existem vários problemas. Primeiro, seu quadro de dados fica assim:
variable frequency
1 0 20
2 1 10
3 2 5
4 3 3
5 4 2
6 5 1
Então, quando você corre mean(df$variable)
, recebe 2.5
, o que é exatamente o que isso significa 0:5
. Ou seja, não é ponderado. Em vez disso, crie sua variável assim:
x = rep(0:5, times=c(20, 10, 5, 3, 2, 1))
table(x)
# x
# 0 1 2 3 4 5
# 20 10 5 3 2 1
mean(x)
# [1] 1.02439
A table()
chamada mostra que o código nos dá o que queríamos e, portanto, mean()
estima lambda corretamente.
Em seguida, suas probabilidades estimadas vão apenas para 5
, mas a distribuição de Poisson vai para o infinito. Portanto, é necessário considerar as probabilidades dos valores que você não possui no seu conjunto de dados. Isso não é difícil, basta calcular o complemento:
probs = dpois(0:5, lambda=mean(x))
probs
# [1] 0.359015310 0.367771781 0.188370912 0.064321775 0.016472650 0.003374884
comp = 1-sum(probs)
# [1] 0.0006726867
Por fim, em R
's chisq.test()
função, o x=
e y=
argumentos não são exatamente para os valores esperados e observados na forma como você configurar isso. Por um lado, o que você está chamando de "esperado" são na verdade probabilidades (ou seja, a saída de dpois()
), para produzir esses valores esperados, você teria que multiplicar essas probabilidades (e não se esqueça de incluir o elogio) pela contagem total. Mas, mesmo assim, você não usaria isso para y=
. De qualquer forma, você realmente não precisa fazer isso, basta atribuir as probabilidades ao p=
argumento. Além disso, você precisará adicionar um 0
ao vetor de valores observados para representar todos os valores possíveis que não aparecem no seu conjunto de dados:
chisq.test(x=c(20, 10, 5, 3, 2, 1, 0), p=c(probs, comp))
# Chi-squared test for given probabilities
#
# data: c(20, 10, 5, 3, 2, 1, 0)
# X-squared = 12.6058, df = 6, p-value = 0.04974
#
# Warning message:
# In chisq.test(x = c(20, 10, 5, 3, 2, 1, 0), p = c(probs, comp)) :
# Chi-squared approximation may be incorrect
A mensagem de aviso sugere que podemos preferir simular, então tentamos novamente:
chisq.test(x=c(20, 10, 5, 3, 2, 1, 0), p=c(probs, comp), simulate.p.value=TRUE)
# Chi-squared test for given probabilities with simulated p-value
# (based on 2000 replicates)
#
# data: c(20, 10, 5, 3, 2, 1, 0)
# X-squared = 12.6058, df = NA, p-value = 0.07046
Esse é presumivelmente um valor p mais preciso, mas levanta uma questão sobre como deve ser interpretado. Você pergunta "Como o valor P é> 0,05, concluí abaixo que a distribuição da variável segue uma distribuição de Poisson - alguém poderia confirmar isso?" Usando a abordagem correta, notamos que o primeiro valor p foi apenas <0,05, mas o segundo valor simulado (p) foi apenas> 0,05. Embora o último valor-p seja mais preciso, não me apressaria em concluir que os dados vieram de uma distribuição de Poisson. Aqui estão alguns fatos a serem lembrados: