Kappa starts from the agreement you observed, subtracts the agreement chance alone would have produced, and credits the codebook only with the difference.
Coders no better than chance: the numerator is zero, so kappa is zero
Perfect agreement: kappa is one
Built for the common case: two coders, nominal categories
Krippendorff’s alpha
The more general instrument, and the one to reach for when kappa will not fit
Handles any number of coders, not just two
Handles any level of measurement, nominal through ratio
Handles datasets with missing codes
For the standard two-coder nominal pilot, kappa and alpha tell much the same story, and kappa is the more familiar choice
Observed agreement was 0.74, the respectable-looking 74 percent
Chance alone, given how often each coder flagged a message, predicts about 0.66
Run that through the formula and the result is 0.236
The raw agreement was almost all coincidence
What went wrong: two rules, one name
The codebook asked coders to flag “high-energy” messages and never defined it
Coder A decided high-energy meant carrying a Twitch emote, LULW or KEKW
Coder B decided it meant shouting, so any word in all capitals
Both readings are reasonable. Both coders believed they coded one variable.
Emote messages and all-caps messages overlap enough to agree by accident
Reading the number
Landis and Koch (1977) attached labels to ranges:
Kappa
Label
0.0 to 0.2
Slight
0.2 to 0.4
Fair
0.4 to 0.6
Moderate
0.6 to 0.8
Substantial
Above 0.8
Almost perfect
By these labels 0.236 is “fair.” Published content analysis treats anything below about 0.70 as too low to proceed on, with 0.80 a comfortable floor.
When it fails: diagnose, revise, re-pilot
A kappa of 0.236 is not a result to report. It is an instruction.
The two coders finally meet and walk the messages they classified differently
The disagreements are the data: they show where the codebook ran out of guidance
Repair the rule, in writing, with the explicit decision rules Chapter 8 built
Then pilot again: fresh messages, independent coding, another coefficient
Common errors today
object 'pilot' not found: your two coders’ codes are not in one table yet
Coders’ columns of different lengths: someone skipped a message
A kappa of exactly 1 usually means you passed the same column in twice
A kappa near 0 with high raw agreement is the classic loose-definition signature
NA in the result: missing codes, which is a case for alpha rather than kappa
The package ships the ones specific to this data: run ?v2v::common_errors for the year-50,888 timestamp, the join that matches nothing, and the surprisingly low kappa.
Checkpoint
You should now have:
A hundred-message pilot subset, coded independently by two people
A v2v::reliability() call that runs and returns a number
A written note on whether that number clears 0.70
A list of the messages the coders split on, which is your revision list
If you failed: a revised rule for each disagreement, in the codebook
Before next time
Revise the codebook against your disagreement list, then re-pilot
Read Chapter 11, Wrangling the Data
Next week is R for real: unreadable timestamps, missing variables, two tables that do not talk to each other
Sampling Plan and Pilot, and Data Wrangling, are both due next week. Start the sampling plan now while the pilot is fresh.