Publié le :
Statistique CREATION_INTERNE

Calcul du coefficient Kappa pour les évaluations de films

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script analyse les évaluations de films de Siskel et Ebert. Dans un premier temps, les données sont créées et formatées. Ensuite, une analyse de concordance simple est effectuée avec PROC FREQ pour obtenir le Kappa de Cohen. Dans un second temps, les données sont transformées à l'aide de PROC IML pour être utilisées dans PROC NLMIXED, qui estime le Kappa à travers un modèle de vraisemblance personnalisé. Les résultats des deux approches de NLMIXED (via l'instruction ESTIMATE et par transformation manuelle du paramètre) sont ensuite affichés et comparés.
Analyse des données

Type : CREATION_INTERNE


Le jeu de données principal 'movie_ratings' est créé directement dans le code à l'aide d'une instruction 'datalines'. Les jeux de données suivants sont dérivés de cette table initiale.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc crée le jeu de données 'movie_ratings'. Il lit 3 colonnes (x1-x3) et transforme la structure de la table pour obtenir un format long où chaque ligne représente une combinaison d'évaluation Siskel/Ebert avec un poids 'w'.
Copié !
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 Bloc de code
PROC FORMAT
Explication :
Définit un format personnalisé 'abc' pour transformer les valeurs numériques des évaluations (1, 2, 3) en libellés textuels ('Con', 'Mixed', 'Pro').
Copié !
1PROC FORMAT;
2 value abc 1 = 'Con'
3 2 = 'Mixed'
4 3 = 'Pro';
5RUN;
3 Bloc de code
PROC FREQ
Explication :
Utilise PROC FREQ pour générer une table de contingence entre les évaluations de Siskel et Ebert. L'option '/agree' demande le calcul des statistiques de concordance, y compris le coefficient Kappa. La variable 'w' est utilisée comme poids.
Copié !
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 Bloc de code
PROC IML Data
Explication :
Ce bloc PROC IML lit les données et les transforme en une matrice 't' pour la modélisation avec NLMIXED. Il prépare les données pour modéliser la distribution jointe des évaluations. Le résultat est stocké dans la table 'new'.
Copié !
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 Bloc de code
PROC NLMIXED Data
Explication :
Ajuste un modèle non linéaire en utilisant une fonction de log-vraisemblance générale (loglik) pour estimer les paramètres du modèle, y compris 'a0' qui est lié au Kappa. L'instruction 'estimate' calcule directement le Kappa et son intervalle de confiance. Les résultats sont sauvegardés dans les tables 'Parms_Estimates' et 'Estimates'.
Copié !
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 Bloc de code
DATA STEP Data
Explication :
Ces deux étapes data modifient les tables de résultats de PROC NLMIXED. La première renomme simplement une colonne. La seconde applique une transformation inverse sur le paramètre 'a0' et ses bornes de confiance pour calculer manuellement le Kappa.
Copié !
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 Bloc de code
PROC PRINT
Explication :
Affiche les deux tables finales contenant les estimations du Kappa obtenues par les deux méthodes de calcul issues de PROC NLMIXED.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« L'intérêt majeur de passer par PROC NLMIXED pour un simple coefficient de concordance est la flexibilité. Cette méthode permet, par exemple, d'ajuster le Kappa en fonction de covariables ou de gérer des structures de dépendance que la PROC FREQ classique ne pourrait ignorer sans biaiser les résultats. »