Como calcular a divergência kl em r (com exemplo)


Nas estatísticas, a divergência Kullback-Leibler (KL) é uma métrica de distância que quantifica a diferença entre duas distribuições de probabilidade.

Se tivermos duas distribuições de probabilidade, P e Q, geralmente escrevemos a divergência KL usando a notação KL(P || Q), que significa “divergência de P de Q”.

Calculamos usando a seguinte fórmula:

KL(P || Q) = ΣP(x) ln (P(x) / Q(x))

Se a divergência KL entre duas distribuições for zero, isso indica que as distribuições são idênticas.

A maneira mais simples de calcular a divergência KL entre duas distribuições de probabilidade em R é usar a função KL() do pacote filantropia .

O exemplo a seguir mostra como usar esta função na prática.

Exemplo: calculando a divergência KL em R

Suponha que temos as duas distribuições de probabilidade a seguir em R:

 #define two probability distributions
P <- c(.05, .1, .2, .05, .15, .25, .08, .12)
Q <- c(.3, .1, .2, .1, .1, .02, .08, .1)

Nota : É importante que as probabilidades de cada distribuição somam um.

Podemos usar o seguinte código para calcular a divergência KL entre as duas distribuições:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.5898852 

A divergência KL da distribuição P da distribuição Q é de aproximadamente 0,589 .

Observe que as unidades usadas neste cálculo são conhecidas como nats , que é a abreviação de unidade natural de informação .

Então diríamos que a divergência KL é de 0,589 nats .

Observe também que a divergência KL não é uma métrica simétrica. Isto significa que se calcularmos a divergência KL da distribuição Q da distribuição P, provavelmente obteremos um valor diferente:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(Q,P)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.4975493 

A divergência KL da distribuição Q da distribuição P é de aproximadamente 0,497 nats .

Observe também que algumas fórmulas usam log base 2 para calcular a divergência KL. Neste caso estamos falando de divergência em termos de bits e não de nats.

Para calcular a divergência KL em termos de bits, você pode usar log2 no argumento da unidade :

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence (in bits)
KL(x, unit=' log2 ')

Metric: 'kullback-leibler' using unit: 'log2'; comparing: 2 vectors.
kullback-leibler 
       0.7178119

A divergência KL da distribuição P da distribuição Q é de aproximadamente 0,7178 bits .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em R:

Como gerar uma distribuição normal em R
Como traçar uma distribuição normal em R

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *