4 votos

¿Cómo se comparan las colecciones de muestras para detectar las diferencias?

Tengo datos de la distribución de la longitud del discurso (número de palabras por discurso) de un orador en una serie de televisión por episodio en mi tabla.

Por ejemplo:

Length Episode1 Episode2 Episode3 | Episode4 Episode5...
1      14       12       68       | 10       8
2      7        61       58       | 22       23
3      14       42       6        | 13       39
4      54       12       14       | 2        12
5      14       18       38       | 41       11
....

Quiero comparar un grupo de episodios, digamos en este ejemplo 1-3 con los episodios 4-5 y averiguar si hay una diferencia significativa en la forma en que el hablante habla después de una determinada pausa de la trama.

¿Qué tipo de prueba tengo que hacer para descubrir tal diferencia?

FYI: En particular, quiero ver si el personaje Raj utiliza un tipo diferente de hablar después de superar su mutismo selectivo después de la temporada 6 episodio 24 de la teoría del big bang.

EDIT: He probado con el Kullback Leibler en R como sugiere Hossein. No consigo que funcione con el vector normalizado:

> a
 [1] 271 297 315 332 352 321 309 313 265 212 255 198 192 178 160 150 139 105 107  94  89  81  88  84  59  66  48  53  38  46  28  25  17  34  36  26  27  13  14  16  11  15  13  13   9   6   7   5   2   5   4   4   2   3   7   3   2   1
[59]   3   2   2   2   2   2   1   2   2   2

> b
 [1] 46 49 52 51 54 63 59 58 43 33 40 32 42 34 21 27 24 22 17 18 13 10 20 18  8  9  8  9  8  7  6  5  1  7  8  9  6  2  2  3  2  3  1  1  2  1  2  1  1  2  0  0  1  0  1  0  2  1  1  0  0  0  2  0  1  0  0  0

> KL.plugin(normalize(a),normalize(b))
[1] Inf
Warnmeldung:
In KL.plugin(normalize(a), normalize(b)) :
  Vanishing value(s) in argument freqs2!

> KL.shrink(a,b)
Estimating optimal shrinkage intensity lambda.freq (frequencies): 0.0069 
Estimating optimal shrinkage intensity lambda.freq (frequencies): 0.0409 
[1] 0.01888402
attr(,"lambda.freqs1")
[1] 0.006945795
attr(,"lambda.freqs2")
[1] 0.04085443

No creo que el resultado del KL deba ser Inf para mis dos vectores. ¿O es realmente la respuesta correcta?

¿Puede alguien explicarme qué hace exactamente KL.shrink del paquete entropía y cómo interpretar los 3 valores resultantes?

0 votos

No entiendo la pregunta. ¿Quieres comparar (10,8) contra (13,39)?

0 votos

Aquí cada discurso es una frase?

0 votos

No, quiero comparar el grupo A (datos completos del episodio 1-x) con el grupo B (datos completos del episodio x+1-último episodio)

1voto

jgtumusiime Puntos 63

¡Una buena pregunta! Esta es mi idea para resolverla:

Considera que quieres comparar los hábitos de habla de una persona en los episodios 1-3 con sus hábitos en los episodios 4-5. Para cada longitud de discurso, calcule la frecuencia media en los diferentes episodios de cada categoría. Por ejemplo, para tu tabla, obtienes

Length Episodes1-3 | Episodes4-5
    1      31.3    | 9
    2      42      | 22.5
    ....

Al normalizar cada columna (dividiendo cada número por la suma de los números de esa columna) tendrá una distribución de probabilidad para cada grupo de episodios (una para los episodios1-3 y otra para los episodios4-5). A continuación, para comparar dos distribuciones diferentes, puede utilizar métodos estándar como el Divergencia de Kullback-Leibler .

0 votos

Se trata de un enfoque de tabla de contingencia.

0 votos

Bien, la idea parece adecuada pero no consigo que funcione en r. ¿Podrías echar un vistazo a mi código que adjunto a mi pregunta?

1voto

ambigram_maker Puntos 188

prueba con esto:

ejemplo con dos variables: recuentos observados para dos variables aleatorias;

y1 = c(4, 2, 3, 1, 10, 4)

y2 = c(2, 3, 7, 1, 4, 3)

A continuación, aplique la divergencia empírica de Kullback-Leibler

KL.empírico(y1, y2)

obtendrás:[1] 0.2232368

documentación: https://cran.r-project.org/web/packages/entropy/entropy.pdf

Por lo que entiendo del código fuente: https://rdrr.io/cran/entropy/src/R/KL.plugin.R

obtiene el error de "valor de fuga" porque uno de sus valores no es >0. Si este es el caso, debe aplicar el suavizado ( https://en.wikipedia.org/wiki/Smoothing )

Por ejemplo, podría convertir todos los 0 en 0,00000000001. Pero antes de elegir un valor de suavizado, intente comprender por qué es necesario el suavizado, si es que es necesario en su caso.

Salud, Marina

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X