A notebook made by Paul Amat, amat-design.com

Context and objectives

Is there an association between two nominal variables?

Research hypothesis

Statistical hypothesis

H0:

H1:

Data preparation and exploration

Starting session

library(readr)
data <- read_csv("data.csv", show_col_types = FALSE)

Observed counts

t <- table(data$mood, data$gender)
t
       
        Man Woman
  Happy  56    56
  Sad    41    47

Proportions

round(prop.table(t, 1),2)
       
         Man Woman
  Happy 0.50  0.50
  Sad   0.47  0.53

Parametric test

Conditions

Independent observations

The independence of observations is guaranteed by the recruitment process.

Test

test <- chisq.test(data$mood, data$gender) #ok jamovi
test

    Pearson's Chi-squared test with Yates' continuity correction

data:  data$mood and data$gender
X-squared = 0.11312, df = 1, p-value = 0.7366

Post-test conditions

More than 5 observations in each combination of theoretical frequencies

all(test$expected > 5)
[1] TRUE

Effect size (nominal)

Standardized residuals

test$stdres
         data$gender
data$mood      Man    Woman
    Happy  0.47885 -0.47885
    Sad   -0.47885  0.47885

Values greater than 2 indicate over-representation, values less than -2 indicate under-representation.

Odds ratio (2x2 only)

n00 <- t[1,1]
n01 <- t[1,2]
n10 <- t[2,1]
n11 <- t[2,2]
OR <- (n00 * n11)/(n01 * n10)
OR # ok jamovi
[1] 1.146341

Ratio of proportions. When there is no effect, the OR is equal to 1. In this case, the two proportions are equal: we have the same number in the numerator and in the denominator.

Relative risk (2x2 only)

if(!require(DescTools)) install.packages("DescTools")
Le chargement a nécessité le package : DescTools
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

Attachement du package : ‘DescTools’

L'objet suivant est masqué depuis ‘package:car’:

    Recode
library(DescTools)

RelRisk(t) # ok jamovi
[1] 1.073171

Cramer’s V

if(!require(rcompanion)) install.packages("rcompanion")
Le chargement a nécessité le package : rcompanion

Attachement du package : ‘rcompanion’

L'objet suivant est masqué depuis ‘package:effectsize’:

    phi
library(rcompanion)

(cramer <- cramerV(data$mood, data$gender)) #ok jamovi
Cramer V 
 0.03386 

Cramer’s V for tables bigger than 2x2. Effect: .10 low, .30 moderate, .50 high.

Effect size (ordinal)

Gamma

data$gender <- factor(data$gender)
data$mood <- factor(data$mood, levels=c("Happy", "Sad"))

if(!require(DescTools)) install.packages("DescTools")
library(DescTools)

GoodmanKruskalGamma(table(data$mood, data$gender)) # ok jamovi
[1] 0.06818182

For ordinal variables, the Gamma if parametric. The effect is interpreted as a correlation coefficient, which ranges from -1 to +1. The closer the result is to 0, the less the variables are dependent on each other, and vice versa.

Power analysis

Finding power

if(!require(pwr)) install.packages("pwr")
library(pwr)
pwr.chisq.test(w = cramer, N = length(data$mood), df = test$parameter)

     Chi squared power calculation 

              w = 0.03386
              N = 200
             df = 1
      sig.level = 0.05
          power = 0.07665618

NOTE: N is the number of observations

Finding N

pwr.chisq.test(w = cramer, df = test$parameter, sig.level = 0.05, power = 0.8)

     Chi squared power calculation 

              w = 0.03386
              N = 6845.934
             df = 1
      sig.level = 0.05
          power = 0.8

NOTE: N is the number of observations

Non-parametric test: Continuity correction

test <- chisq.test(data$mood, data$gender, correct = T) #ok jamovi
test

    Pearson's Chi-squared test with Yates' continuity correction

data:  data$mood and data$gender
X-squared = 0.11312, df = 1, p-value = 0.7366

Interpretation: continuity p-value from Yates or Fisher’s exact test if theoretical numbers <5. Continuity correction limits the bias brought by the fact that the sampling distribution is discrete but the chi-square distribution is continuous.

Effect size (ordinal)

Kendall Tau B

data$gender <- factor(data$gender)
data$mood <- factor(data$mood, levels=c("Happy", "Sad"))

if(!require(DescTools)) install.packages("DescTools")
library(DescTools)

KendallTauB(table(data$mood, data$gender)) # ok jamovi
[1] 0.0338598

For ordinal variables, Kendall’s Tau-b if non-parametric. The effect is interpreted as a correlation coefficient, which ranges from -1 to +1. The closer the result is to 0, the less the variables are dependent on each other, and vice versa.

Non-parametric test: Fisher’s Exact Test

fisher.test(data$mood, data$gender) #ok jamovi

    Fisher's Exact Test for Count Data

data:  data$mood and data$gender
p-value = 0.6704
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.6311207 2.0838391
sample estimates:
odds ratio 
  1.145556 

Results and recommendations

LS0tDQp0aXRsZTogIkFzc29jaWF0aW9uIGJldHdlZW4gdHdvIGluZGVwZW5kZW50IG5vbWluYWwgdmFyaWFibGVzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KQSBub3RlYm9vayBtYWRlIGJ5IFBhdWwgQW1hdCwgW2FtYXQtZGVzaWduLmNvbV0oYW1hdC1kZXNpZ24uY29tKQ0KDQojIyBDb250ZXh0IGFuZCBvYmplY3RpdmVzDQoNCj4gSXMgdGhlcmUgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiB0d28gbm9taW5hbCB2YXJpYWJsZXM/DQoNCiMjIyBSZXNlYXJjaCBoeXBvdGhlc2lzDQoNCiMjIyBTdGF0aXN0aWNhbCBoeXBvdGhlc2lzDQoNCkgwOg0KDQpIMToNCg0KIyMgRGF0YSBwcmVwYXJhdGlvbiBhbmQgZXhwbG9yYXRpb24NCg0KIyMjIFN0YXJ0aW5nIHNlc3Npb24NCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWRyKQ0KZGF0YSA8LSByZWFkX2NzdigiZGF0YS5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KYGBgDQoNCiMjIyBPYnNlcnZlZCBjb3VudHMNCg0KYGBge3J9DQp0IDwtIHRhYmxlKGRhdGEkbW9vZCwgZGF0YSRnZW5kZXIpDQp0DQpgYGANCg0KIyMjIFByb3BvcnRpb25zDQoNCmBgYHtyfQ0Kcm91bmQocHJvcC50YWJsZSh0LCAxKSwyKQ0KYGBgDQoNCiMjIFBhcmFtZXRyaWMgdGVzdA0KDQojIyMgQ29uZGl0aW9ucw0KDQojIyMjIEluZGVwZW5kZW50IG9ic2VydmF0aW9ucw0KDQpUaGUgaW5kZXBlbmRlbmNlIG9mIG9ic2VydmF0aW9ucyBpcyBndWFyYW50ZWVkIGJ5IHRoZSByZWNydWl0bWVudCBwcm9jZXNzLg0KDQojIyMgVGVzdA0KDQpgYGB7cn0NCnRlc3QgPC0gY2hpc3EudGVzdChkYXRhJG1vb2QsIGRhdGEkZ2VuZGVyKSAjb2sgamFtb3ZpDQp0ZXN0DQpgYGANCg0KIyMjIFBvc3QtdGVzdCBjb25kaXRpb25zDQoNCiMjIyMgTW9yZSB0aGFuIDUgb2JzZXJ2YXRpb25zIGluIGVhY2ggY29tYmluYXRpb24gb2YgdGhlb3JldGljYWwgZnJlcXVlbmNpZXMNCg0KYGBge3J9DQphbGwodGVzdCRleHBlY3RlZCA+IDUpDQpgYGANCg0KIyMjIEVmZmVjdCBzaXplIChub21pbmFsKQ0KDQojIyMjIFN0YW5kYXJkaXplZCByZXNpZHVhbHMNCg0KYGBge3J9DQp0ZXN0JHN0ZHJlcw0KYGBgDQoNClZhbHVlcyBncmVhdGVyIHRoYW4gMiBpbmRpY2F0ZSBvdmVyLXJlcHJlc2VudGF0aW9uLCB2YWx1ZXMgbGVzcyB0aGFuIC0yIGluZGljYXRlIHVuZGVyLXJlcHJlc2VudGF0aW9uLg0KDQojIyMjIE9kZHMgcmF0aW8gKDJ4MiBvbmx5KQ0KDQpgYGB7cn0NCm4wMCA8LSB0WzEsMV0NCm4wMSA8LSB0WzEsMl0NCm4xMCA8LSB0WzIsMV0NCm4xMSA8LSB0WzIsMl0NCk9SIDwtIChuMDAgKiBuMTEpLyhuMDEgKiBuMTApDQpPUiAjIG9rIGphbW92aQ0KYGBgDQoNClJhdGlvIG9mIHByb3BvcnRpb25zLiBXaGVuIHRoZXJlIGlzIG5vIGVmZmVjdCwgdGhlIE9SIGlzIGVxdWFsIHRvIDEuIEluIHRoaXMgY2FzZSwgdGhlIHR3byBwcm9wb3J0aW9ucyBhcmUgZXF1YWw6IHdlIGhhdmUgdGhlIHNhbWUgbnVtYmVyIGluIHRoZSBudW1lcmF0b3IgYW5kIGluIHRoZSBkZW5vbWluYXRvci4NCg0KIyMjIyBSZWxhdGl2ZSByaXNrICgyeDIgb25seSkNCg0KYGBge3J9DQppZighcmVxdWlyZShEZXNjVG9vbHMpKSBpbnN0YWxsLnBhY2thZ2VzKCJEZXNjVG9vbHMiKQ0KbGlicmFyeShEZXNjVG9vbHMpDQoNClJlbFJpc2sodCkgIyBvayBqYW1vdmkNCmBgYA0KDQojIyMjIENyYW1lcidzIFYNCg0KYGBge3J9DQppZighcmVxdWlyZShyY29tcGFuaW9uKSkgaW5zdGFsbC5wYWNrYWdlcygicmNvbXBhbmlvbiIpDQpsaWJyYXJ5KHJjb21wYW5pb24pDQoNCihjcmFtZXIgPC0gY3JhbWVyVihkYXRhJG1vb2QsIGRhdGEkZ2VuZGVyKSkgI29rIGphbW92aQ0KYGBgDQoNCkNyYW1lcidzIFYgZm9yIHRhYmxlcyBiaWdnZXIgdGhhbiAyeDIuIEVmZmVjdDogLjEwIGxvdywgLjMwIG1vZGVyYXRlLCAuNTAgaGlnaC4NCg0KIyMjIEVmZmVjdCBzaXplIChvcmRpbmFsKQ0KDQojIyMjIEdhbW1hDQoNCmBgYHtyfQ0KZGF0YSRnZW5kZXIgPC0gZmFjdG9yKGRhdGEkZ2VuZGVyKQ0KZGF0YSRtb29kIDwtIGZhY3RvcihkYXRhJG1vb2QsIGxldmVscz1jKCJIYXBweSIsICJTYWQiKSkNCg0KaWYoIXJlcXVpcmUoRGVzY1Rvb2xzKSkgaW5zdGFsbC5wYWNrYWdlcygiRGVzY1Rvb2xzIikNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KDQpHb29kbWFuS3J1c2thbEdhbW1hKHRhYmxlKGRhdGEkbW9vZCwgZGF0YSRnZW5kZXIpKSAjIG9rIGphbW92aQ0KYGBgDQoNCkZvciBvcmRpbmFsIHZhcmlhYmxlcywgdGhlIEdhbW1hIGlmIHBhcmFtZXRyaWMuIFRoZSBlZmZlY3QgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCwgd2hpY2ggcmFuZ2VzIGZyb20gLTEgdG8gKzEuIFRoZSBjbG9zZXIgdGhlIHJlc3VsdCBpcyB0byAwLCB0aGUgbGVzcyB0aGUgdmFyaWFibGVzIGFyZSBkZXBlbmRlbnQgb24gZWFjaCBvdGhlciwgYW5kIHZpY2UgdmVyc2EuDQoNCiMjIyBQb3dlciBhbmFseXNpcw0KDQojIyMjIEZpbmRpbmcgcG93ZXINCg0KYGBge3J9DQppZighcmVxdWlyZShwd3IpKSBpbnN0YWxsLnBhY2thZ2VzKCJwd3IiKQ0KbGlicmFyeShwd3IpDQpwd3IuY2hpc3EudGVzdCh3ID0gY3JhbWVyLCBOID0gbGVuZ3RoKGRhdGEkbW9vZCksIGRmID0gdGVzdCRwYXJhbWV0ZXIpDQpgYGANCg0KIyMjIyBGaW5kaW5nIE4NCg0KYGBge3J9DQpwd3IuY2hpc3EudGVzdCh3ID0gY3JhbWVyLCBkZiA9IHRlc3QkcGFyYW1ldGVyLCBzaWcubGV2ZWwgPSAwLjA1LCBwb3dlciA9IDAuOCkNCmBgYA0KDQojIyBOb24tcGFyYW1ldHJpYyB0ZXN0OiBDb250aW51aXR5IGNvcnJlY3Rpb24NCg0KYGBge3J9DQp0ZXN0IDwtIGNoaXNxLnRlc3QoZGF0YSRtb29kLCBkYXRhJGdlbmRlciwgY29ycmVjdCA9IFQpICNvayBqYW1vdmkNCnRlc3QNCmBgYA0KDQpJbnRlcnByZXRhdGlvbjogY29udGludWl0eSBwLXZhbHVlIGZyb20gWWF0ZXMgb3IgRmlzaGVyJ3MgZXhhY3QgdGVzdCBpZiB0aGVvcmV0aWNhbCBudW1iZXJzIFw8NS4gQ29udGludWl0eSBjb3JyZWN0aW9uIGxpbWl0cyB0aGUgYmlhcyBicm91Z2h0IGJ5IHRoZSBmYWN0IHRoYXQgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBpcyBkaXNjcmV0ZSBidXQgdGhlIGNoaS1zcXVhcmUgZGlzdHJpYnV0aW9uIGlzIGNvbnRpbnVvdXMuDQoNCiMjIyBFZmZlY3Qgc2l6ZSAob3JkaW5hbCkNCg0KIyMjIyBLZW5kYWxsIFRhdSBCDQoNCmBgYHtyfQ0KZGF0YSRnZW5kZXIgPC0gZmFjdG9yKGRhdGEkZ2VuZGVyKQ0KZGF0YSRtb29kIDwtIGZhY3RvcihkYXRhJG1vb2QsIGxldmVscz1jKCJIYXBweSIsICJTYWQiKSkNCg0KaWYoIXJlcXVpcmUoRGVzY1Rvb2xzKSkgaW5zdGFsbC5wYWNrYWdlcygiRGVzY1Rvb2xzIikNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KDQpLZW5kYWxsVGF1Qih0YWJsZShkYXRhJG1vb2QsIGRhdGEkZ2VuZGVyKSkgIyBvayBqYW1vdmkNCmBgYA0KDQpGb3Igb3JkaW5hbCB2YXJpYWJsZXMsIEtlbmRhbGwncyBUYXUtYiBpZiBub24tcGFyYW1ldHJpYy4gVGhlIGVmZmVjdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50LCB3aGljaCByYW5nZXMgZnJvbSAtMSB0byArMS4gVGhlIGNsb3NlciB0aGUgcmVzdWx0IGlzIHRvIDAsIHRoZSBsZXNzIHRoZSB2YXJpYWJsZXMgYXJlIGRlcGVuZGVudCBvbiBlYWNoIG90aGVyLCBhbmQgdmljZSB2ZXJzYS4NCg0KIyMgTm9uLXBhcmFtZXRyaWMgdGVzdDogRmlzaGVyJ3MgRXhhY3QgVGVzdA0KDQpgYGB7cn0NCmZpc2hlci50ZXN0KGRhdGEkbW9vZCwgZGF0YSRnZW5kZXIpICNvayBqYW1vdmkNCmBgYA0KDQojIyBSZXN1bHRzIGFuZCByZWNvbW1lbmRhdGlvbnMNCg==