Veröffentlicht am :
Statistik CREATION_INTERNE

Berechnung des Kappa-Koeffizienten für Filmbewertungen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript analysiert die Filmbewertungen von Siskel und Ebert. Zunächst werden die Daten erstellt und formatiert. Anschließend wird eine einfache Konkordananalyse mit PROC FREQ durchgeführt, um Cohens Kappa zu erhalten. Im zweiten Schritt werden die Daten mit PROC IML transformiert, um sie in PROC NLMIXED zu verwenden, das Kappa durch ein benutzerdefiniertes Likelihood-Modell schätzt. Die Ergebnisse beider NLMIXED-Ansätze (über die ESTIMATE-Anweisung und durch manuelle Transformation des Parameters) werden anschließend angezeigt und verglichen.
Datenanalyse

Type : CREATION_INTERNE


Der Hauptdatensatz 'movie_ratings' wird direkt im Code mit einer 'datalines'-Anweisung erstellt. Die folgenden Datensätze werden von dieser initialen Tabelle abgeleitet.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser Block erstellt den Datensatz 'movie_ratings'. Er liest 3 Spalten (x1-x3) und transformiert die Tabellenstruktur, um ein langes Format zu erhalten, bei dem jede Zeile eine Siskel/Ebert-Bewertungskombination mit einem Gewicht 'w' darstellt.
Kopiert!
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 Codeblock
PROC FORMAT
Erklärung :
Definiert ein benutzerdefiniertes Format 'abc', um die numerischen Bewertungswerte (1, 2, 3) in Textbezeichnungen ('Con', 'Mixed', 'Pro') umzuwandeln.
Kopiert!
1PROC FORMAT;
2 value abc 1 = 'Con'
3 2 = 'Mixed'
4 3 = 'Pro';
5RUN;
3 Codeblock
PROC FREQ
Erklärung :
Verwendet PROC FREQ, um eine Kontingenztafel zwischen den Bewertungen von Siskel und Ebert zu erstellen. Die Option '/agree' fordert die Berechnung von Konkordanzstatistiken an, einschließlich des Kappa-Koeffizienten. Die Variable 'w' wird als Gewicht verwendet.
Kopiert!
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 Codeblock
PROC IML Data
Erklärung :
Dieser PROC IML-Block liest die Daten und transformiert sie in eine Matrix 't' für die Modellierung mit NLMIXED. Er bereitet die Daten vor, um die gemeinsame Verteilung der Bewertungen zu modellieren. Das Ergebnis wird in der Tabelle 'new' gespeichert.
Kopiert!
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 Codeblock
PROC NLMIXED Data
Erklärung :
Passt ein nichtlineares Modell unter Verwendung einer allgemeinen Log-Likelihood-Funktion (loglik) an, um die Modellparameter zu schätzen, einschließlich 'a0', das mit Kappa zusammenhängt. Die 'estimate'-Anweisung berechnet Kappa und sein Konfidenzintervall direkt. Die Ergebnisse werden in den Tabellen 'Parms_Estimates' und 'Estimates' gespeichert.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Diese beiden Datenschritte ändern die Ergebnistabellen von PROC NLMIXED. Der erste benennt lediglich eine Spalte um. Der zweite wendet eine inverse Transformation auf den Parameter 'a0' und seine Konfidenzgrenzen an, um Kappa manuell zu berechnen.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung :
Zeigt die beiden finalen Tabellen an, die die Kappa-Schätzungen enthalten, die mit den beiden Berechnungsmethoden aus PROC NLMIXED erhalten wurden.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.