Publicado el :
Estadística CREATION_INTERNE

Cálculo del coeficiente Kappa para las evaluaciones de películas

Este código también está disponible en: Deutsch English Français
En espera de validación
El script analiza las evaluaciones de películas de Siskel y Ebert. En un primer momento, los datos se crean y se formatean. A continuación, se realiza un análisis de concordancia simple con PROC FREQ para obtener el Kappa de Cohen. En un segundo momento, los datos se transforman utilizando PROC IML para ser utilizados en PROC NLMIXED, que estima el Kappa a través de un modelo de verosimilitud personalizado. Los resultados de ambos enfoques de NLMIXED (mediante la instrucción ESTIMATE y por transformación manual del parámetro) se muestran y se comparan.
Análisis de datos

Type : CREATION_INTERNE


El conjunto de datos principal 'movie_ratings' se crea directamente en el código utilizando una instrucción 'datalines'. Los conjuntos de datos siguientes se derivan de esta tabla inicial.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea el conjunto de datos 'movie_ratings'. Lee 3 columnas (x1-x3) y transforma la estructura de la tabla para obtener un formato largo donde cada fila representa una combinación de evaluación Siskel/Ebert con un peso 'w'.
¡Copiado!
1DATA movie_ratings;
2 INPUT x1-x3;
3 Siskel = _n_;
4 Ebert = 1; w=x1; OUTPUT;
5 Ebert = 2; w=x2; OUTPUT;
6 Ebert = 3; w=x3; OUTPUT;
7 keep Siskel Ebert w;
8 DATALINES;
9 24 8 13
10 8 13 11
11 10 9 64
12;
13RUN;
2 Bloque de código
PROC FORMAT
Explicación :
Define un formato personalizado 'abc' para transformar los valores numéricos de las evaluaciones (1, 2, 3) en etiquetas textuales ('Con', 'Mixed', 'Pro').
¡Copiado!
1PROC FORMAT;
2 value abc 1 = 'Con'
3 2 = 'Mixed'
4 3 = 'Pro';
5RUN;
3 Bloque de código
PROC FREQ
Explicación :
Utiliza PROC FREQ para generar una tabla de contingencia entre las evaluaciones de Siskel y Ebert. La opción '/agree' solicita el cálculo de las estadísticas de concordancia, incluido el coeficiente Kappa. La variable 'w' se utiliza como peso.
¡Copiado!
1ods html;
2title1 "Siskel's and Ebert's Movie Ratings -- Agresti and Winner (1997)";
3title2 "Kappa Results using PROC FREQ";
4PROC FREQ DATA=movie_ratings;
5 tables Siskel * Ebert / agree;
6 weight w;
7 FORMAT Siskel Ebert abc.;
8RUN;
9ods graphics off;
10ods html close;
4 Bloque de código
PROC IML Data
Explicación :
Este bloque PROC IML lee los datos y los transforma en una matriz 't' para el modelado con NLMIXED. Prepara los datos para modelar la distribución conjunta de las evaluaciones. El resultado se almacena en la tabla 'new'.
¡Copiado!
1ods html;
2ods graphics on;
3PROC IML;
4 use movie_ratings;
5 read all into x;
6 
7 n0 = nrow(x);
8 n1 = sum(x[,3]);
9 t1 = j(n1,3,0);
10 t2 = j(n1,3,0);
11 
12 row = 0;
13 DO j=1 to n0;
14 DO t=1 to x[j,3];
15 row = row + 1;
16 t1[row,x[j,1]] = 1;
17 t2[row,x[j,2]] = 1;
18 END;
19 END;
20 
21 t = t1 + t2;
22 create new var{t1 t2 t3};
23 append from t;
24QUIT;
5 Bloque de código
PROC NLMIXED Data
Explicación :
Ajusta un modelo no lineal utilizando una función de log-verosimilitud general (loglik) para estimar los parámetros del modelo, incluyendo 'a0' que está relacionado con Kappa. La instrucción 'estimate' calcula directamente Kappa y su intervalo de confianza. Los resultados se guardan en las tablas 'Parms_Estimates' y 'Estimates'.
¡Copiado!
1ods OUTPUT ParameterEstimates=Parms_Estimates
2 AdditionalEstimates=Estimates;
3PROC NLMIXED DATA=new;
4 parms a0=0, b01=0, b02=0;
5 rho = 1 / (1 + exp(-a0));
6 eta1 = exp(b01);
7 eta2 = exp(b02);
8 p1 = eta1/(1+eta1+eta2);
9 p2 = eta2/(1+eta1+eta2);
10 p3 = 1-p1-p2;
11 m = t1+t2+t3;
12 c = (1-rho**2)/(rho**2);
13 const = lgamma(m+1)-lgamma(t1+1)-lgamma(t2+1)-lgamma(t3+1);
14 loglik = lgamma(c)-lgamma(m+c)+lgamma(t1+c*p1)+lgamma(t2+c*p2)
15 +lgamma(t3+c*p3)-lgamma(c*p1)-lgamma(c*p2)-lgamma(c*p3)
16 +const;
17 model t1 ~ general(loglik);
18 estimate 'Kappa' 1 / (1 + exp(-a0)) / (1 + exp(-a0));
19RUN;
6 Bloque de código
DATA STEP Data
Explicación :
Estos dos pasos de datos modifican las tablas de resultados de PROC NLMIXED. El primero simplemente renombra una columna. El segundo aplica una transformación inversa sobre el parámetro 'a0' y sus límites de confianza para calcular manualmente Kappa.
¡Copiado!
1DATA Estimates;
2 SET Estimates;
3 rename Estimate = Kappa;
4 keep Estimate Lower Upper;
5RUN;
6 
7DATA Parms_Estimates;
8 SET Parms_Estimates;
9 IF Parameter = 'a0';
10 Estimate = 1 / (1 + exp(-Estimate)) / (1 + exp(-Estimate));
11 Lower = 1 / (1 + exp(-Lower)) / (1 + exp(-Lower));
12 Upper = 1 / (1 + exp(-Upper)) / (1 + exp(-Upper));
13 rename Estimate = Kappa;
14 keep Estimate Lower Upper;
15RUN;
7 Bloque de código
PROC PRINT
Explicación :
Muestra las dos tablas finales que contienen las estimaciones de Kappa obtenidas por los dos métodos de cálculo derivados de PROC NLMIXED.
¡Copiado!
1title2 "Kappa Results using the Estimate Statement in NLMIXED";
2PROC PRINT DATA=Estimates noobs;
3RUN;
4 
5title2 "Kappa Results using the Inverse Method in NLMIXED";
6PROC PRINT DATA=Parms_Estimates noobs;
7RUN;
8ods html close;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.