3
$\begingroup$

I have a stacked column chart comparing time spent on 3 activities (here illustrated as A, B and C) by novices and experts. The proportions will always add up to 1; the participants could not do anything else than activities A, B or C.

Stacked chart

And here's the sample data:

   Activity Group  prop
1:  A       Novice 0.51158063
2:  B       Novice 0.17284939
3:  C       Novice 0.31556998
4:  A       Expert 0.88694859
5:  B       Expert 0.03311815
6:  C       Expert 0.05220782

Looking at the chart, it appears that experts spend more time on A and less on B and C.

Is there a test that would allow me to both check for differences at group level (e.g. "novices spent more time on C than on B") and between groups (e.g. "experts spent less time on B and on C than novices") ? The solutions that I found so far seem to apply to binary outcome (success / failure) and they use counts while I use a proportion of time spent by individuals.

$\endgroup$
0
$\begingroup$

There are a few issues in your sample data, not adding up to 1.0 as stated (see bar plot below).

You can use the Pearson ChiSquare test If you know the approximate total-time spent on activities per group . See here for introductory details for the ChiSquare test.

The Pearson ChiSquare test answers: time spent on activities is independent of the participant Group (H0), or time spent on activities is dependent on participant Group (reject H0)?

In python this solution is as follows:

import pandas as pd
import numpy as np
from scipy import stats

df = pd.DataFrame(data={'Activity':['A','B','C','A','B','C'],
                        'Group':['Novice','Novice','Novice','Expert','Expert','Expert'],
                        'prop':[0.51158063,0.17284939,0.09504048,0.88694859,0.03311815,0.05220782]})

# calculate minutes from proportions - assuming 2 hours total time
df['Minutes'] = np.round(df['prop']*120)

enter image description here

cont = pd.crosstab(df.Group,df.Activity,values=df.Minutes,aggfunc=np.sum)
stat, p, dof, expected = stats.chi2_contingency(cont)

alpha = 1-0.95
if p <= alpha:
  print(f'Reject H0, dependent: X2={stat:.3f} p-value={p:.4f}')
else:
  print('Fail to Reject H0: independent: X2={stat:.3f} p-value={p:.4f}')
$\endgroup$
2
  • 1
    $\begingroup$ Thanks for spotting the error in the sample data. Fixed that. Running a X2 would demonstrate that something is different, but not that a certain pair (e.g. A vs C in the Novice group, or Novice's A vs Expert's A) is different. $\endgroup$
    – GuillaumeL
    Aug 3 '20 at 21:28
  • $\begingroup$ Well, you could run the test on those pairs too. So you would have an Overall Comparison of Experts and Novices, and then by class. And indeed all possible pairs if relevant to your questions. I don’t know enough about your use case to suggest further tests. $\endgroup$
    – BenP
    Aug 5 '20 at 16:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.