Choose Language Hide Translation Bar

Looking at the Big Picture: Equivalence Between Two Sets of Batch Data Over Time (2023-EU-30MP-1350)

Working as a manufacturer in the biopharmaceutical industry means we often need to show that we obtain similar results on different sites when transferring a manufacturing process and, notably, when scaling processes up or down. Comparison techniques such as t-tests and ANOVAs are widespread, but equivalence testing has become a standard way to show two processes behave similarly. When we look at a few parameters, those techniques are easy to apply, but when we have large numbers of variables, it becomes difficult to see the bigger picture. The challenge with equivalence testing is that it requires the scientists to provide a value for what they deem an acceptable difference between the groups of data. In addition, many processes change over time, and we are interested in capturing whether they behave similarly across the duration of the process. JMP scripting is a great way to automate the data prep, visualisations, and production of all the plots and comparison tests for those data sets. The multivariate platform in JMP helps create a holistic picture of the process for each time point. We can now use equivalence testing and relate it to the individual variable contributions.

 

 

Hello,  everyone.  Thanks  for  joining  my  JMP  talk  today.  Today,  I  would  like  to  talk  to  you  about  how  we  look  at  equivalence  between  sets  of  batch  data  over  time  at  Fujifilm.  In  particular,  I'd  like  to  speak  about  a  new  multivariate  take  on  the  two  one  sided  T-t ests.

Although  this  particular  bit  is  a  new  comparison  technique,  it  doesn't  replace,  rather  it  complements  the  usual  single  point  techniques,  and  in  the  workflow,  we  are  still  relying  heavily  on  those.  The  last  bit  here  will  describe  how  we  compare  data  sets,  from  the  time  series,  we  get  from  two  different  scales,  but  it  could  be  any  logical  group.

I'll  quickly  go  through  how  we  prepare  the  data,  or  rather  get  it  in  the  state  where  we  can  run  the  scripts,  and  we  will  look  at  the  visualizations  for  the  usual  single  time  points  in  JMP,  and  we'll  also  look  at  some  scripts  that  I  use  to  run  PCA  on  all  the  variables  and  test  equivalence.

T alking  about  TOST  or  equivalence  test.  T he  two  T-test  is  a  two  one  sided  T- test,  and  it  checks  whether  on  average,  your  two  data  sets  for  a  given  variable  are  equivalent.  Very  similarly,  a  multivariate  test  checks  whether  on  average  the  end's  principal  component  or  PC  for  a  given  day  of  a  fermentation  here,  is  equivalent  for  two  different  scales.

You  need  data  to  be  in  a  specific  format,  but  in  particular  you  need  two  different  groups  here.  It's  two  scales,  if  you  have  more  than  two,  you  will  need  to  split  them  in  sets  of  two.  It's  more  suitable  for  time  series,  because  it's  a  data  reduction  technique  that  you  wouldn't  need  if  you  hadn't  a  problem  with  having  a  lot  of  data  points.

This  was  part,  originally,  of  a  script  that  was  all  done  in  R,  but  as  I  moved  into  using  JMP  for  visualizations  more  and  more,  I  thought  that  it  was  much  easier  to  use,  especially  if  we  want  to  pass  on  those  scripts  to  staff.  R  is  not  always  that  accessible.

I  moved  a  lot  of  the  script  into  JMP  by  now.  The  only  thing  that's  still  in  R  is  the  data  imputation.  The  scripts  and  pre  work  take  care  of  outliers,  missing  data,  and  inconsistent  entries.  The  R  does  the  data  imputation.  Why  have  I  moved  to  JMP?  First  of  all,  it  was  because  I  visualized  in  JMP.

Why  is  it  good  to  visualize  data  in  JMP?  Because  JMP  is  just  made  for  that.  It's  really  good  for  looking  at  missing  data  and  outliers  and  any  graphs.  The  time  series  are  no  exception  to  this.  The  missing  data  visuals  in  JMP,  give  you  a  color  map  of  where  your  data  is  missing,  so  you  can  find  rows  where  data  is  missing.

That  means  a  day  might  not  be  the  best  to  keep  in  the  data  set.  You  can  immediately  visualize  chunks  of  data  missing,  that  it  would  be  days  in  a  row,  and  you  can  make  a  decision  on  whether  you  want  to  keep  all  those  days  or  do  the  analysis  twice,  for  example,  and  it  will  quickly  show  you  if  you  have  data  missing  from  one  group  and  not  the  other,  in  which  case  you'd  have  to  do  away  with  that  variable  altogether.

Also,  outliers  need  processing  prior  you  interpolate,  otherwise  they  will  have  a  huge  effect  on  the  PCA  and  the  comparison  test.  There  is  an  outlier  detection  platform  in  JMP,  but  this  is  used  here  in  our  workflow  combination  with  watching  the  time  series  and  the  comparisons.  But  I'll  show  all  that  in  the  demo.

Then  the  Graph  Builder  is  used  to  plot  all  the  time  series.  There  are  many  ways  to  do  that,  but  I  will  show  you  in  the  script  the  two  main  graphs  that  we  use  to  check  that  our  data  is  good  to  go.  Here  they  are,  the  time  series,  and  those  in  particular  are  wrapped  by  a batch,  so  that  you  get  an  individual  plot  for  each  time  series.

It's  a  small  plot,  but  usually  it's  enough  to  spot  missing  data  outliers  or  any  weird  or  different  behavior.  Here,  for  example,  let  me  get  the  laser  on.  There we go. Here  we  have  a  cluster  of  points  that  are  questionable.  We  need  to  check  whether  this  is  behavior  that  we  want  to  capture  or  if  it's  behavior  that's  unusual,  and  we  want  to  imputate  the  rest  of  the  data.

Or  we  could  have  single  outliers  like  here.  We  see  this  quite  often,  but  here  you  can  notice  it's  all  on  the  same  day.  So  is  it  something  that  happens  on  day  six  in  those  fermentations?  Another  way  to  plot  time  series,  and  we  do  that  as  well,  is  to  actually  overlay  them.  By  overlaying  them,  you  can  see  whether  your  data  is  consistent  for  a  given  day.

Here  we  have  individual  value  plots,  which  is  what  we  look  at.  But  I've  also  asked  JMP  to  put  a  little  box  plot  around  all  those  data  because  this  mimics  what  we  have  when  we  are  doing  our  ANOVAs  in  the  second  step  of  our  data  visualization.

This  is  very  typical  of  what  happens  in  our  processes  over  time.  In  the  first  week,  the  data  is  showing  very  low  variability.  The  box  plots  are  small  and  they  are  usually  fairly  well  aligned.  The  average  is  around  the  same  value.

When  we  reach  the  second  week  of  the  fermentation,  things  start  to  drift  apart  and  things  start  to  get  much  more  variable.  If  you  were  plotting  day  six  by  itself  in  one  batch  per  day  type  of  plot  here,  you'd  be  able  to  see  what  the  difference  is  on  average  between  the  large  scale  in  red  and  the  small  scale  in  blue.

On  day  six,  you  have  a  small  difference  and  on  day  12,  you  have  a  large  difference.  Those  differences  are  what  we  are  looking  to  test  when  we  do  single  poin T-tests  with  our  ANOVAs.  Before  we  carry  on,  I  just  want  quickly  have  a  recap  of  what  the  differences  are  between  T- test  and  TOST.

A  T- test  is  completely  statistical,  whether  the  TOST  requires  a  user  input  for  a  practical  acceptable  difference.  In  a  T- test,  you  hypothesize  that  there  is  no  difference  between  the  mean  and  if  you  get  a  small  P  value  or  significant  result,  then  you  deny  that  and  you  say  there  is  a  difference  between  your  data  sets.

A  TOST  tells  you  that  there  is  no  difference  between  your  data  sets,  if  you  have  a  significant  result.  If  you  fail  a  T- test,  the  confidence  interval  for  the  main  difference,  in  those  plots,  that's that  black  square  here.  So  the  confidence  interval  for  the  TOST,  if  you  fail,  does  not  cross  the  zero  line.

But  if  you  fail  a  TOST,  the  confidence  interval  for  the  difference  is  not  contained  by  the  practical  acceptable  difference.  You  have  two  outcomes  for  a  T- test  and  two  outcomes  for  a  TOST,  which  means  you  have  four  combinations.

Either  you  pass  or  fail  both,  or  you  pass  and  fail  one  of  them.  In  JMP,  usually,  there  are  different  platforms  that  do  TOST  and   T-test,  but  you  will  have  a  normal  distribution  for  the  difference.  If  you  pass  a  test,  then  your  mean  difference  is  in  that  little  bell  curve.  If  not,  it's  outside.

So  it  could  quickly  visualize  which  ones  passed  or  not  in  an  ANOVA.  H ere  they  are,  the  ANOVAs.  Let's  step  two of  our  visualization  and  clean  process.  We  use  a  script  to  plot  all  of  those  together  in  a  report  so  that  we  can  look  at  all  of  them.  If  you  think  about  the  data  set  here,  it  was  about  15  variables  over  12  days.  So  you  have  over  150  such  plots,  which  is  a  lot  of  data  to  look  at,  especially  if  you  change  things  and  plot  them  again.

But  here  are  some  examples  of  what  you  might  see.  You  might  pass  a   T-test  or  fail  it.  You  might  pass  a   T-test,  but  only  because  you  have  enough  layer  that's  pulling  one  of  the  data  sets  up  or  down,  for  example.  There  are  many  possible  results  that  you  would  get  here.

Not  everything  is  on  this  screenshot,  but  we're  also  looking  at  the  variance  in  that  report.  The  principal  components  comparisons,  we  don't  do  this  here  with  the  script.  I  use  the  graph  builder  to  actually  plot  those  because  they  are  like  the  plots  I  had  in  a  couple  of  slides  previous.

But  the  difference  that  you  could  see  here  is  in  the  scale.  Now,  because  we're  talking  about  principal  components,  the  scores  tend  to  be  around  zero  on  average,  and  they  vary  between  minus  three  and  three  because  we  normalize  the  data  before  carrying  out  the  PCA.

The  advantage  of  this  is  that,  now  instead  of  having  to  provide  an  acceptable  value  for  a  task,  because  the  data  is  normalized,  we  can  actually  blanket  calculate  that  acceptable  difference  by  taking  a  multiplier  of  the  standard  deviation  for  our  scores.

Here  we  have  the  first  principal  component  and  it  clearly  shows  there's  a  big  difference  between  the  large  and  the  small  scale.  Here  with  the  second  principal  component,  there  is  a  smaller  difference.  This  is  typical  of  what  we  see,  because  the  first  principal  component  tends  to  capture  the  broader  shape  of  the  fermentation  profile.

So  if  there  is  a  difference  in  that  broader  shape,  the  TOST  for  the  first  PC  tends  to  fail.  Typically,  what  I've  seen  is  that  for  our  data,  two  principal  components  could  capture  about  60 %  of  the  information  in  the  variables.  For  those  of  you  who  may  have  done  PC  on  data  before,  that  may  seem  a  low  number,  but  that's  probably  because  all  the  variables  have  a  different  story  to  tell.

Another  thing  I'd  like  to  spend  a  little  bit  of  time  on  is  the  loading' s plots.  This  is  part  of  the  PCA  platform  in  JMP,  and  it  has  this  plot  at  the  very  top  of  the  platform,  and  it's  a  good  one  to  look  at  if  you're  a  scientist  that's  more  interested  in  looking  at  what's  really  going  on.

But  the  reason  why  I  have  this  on  a  slide  here  is  because  this  is  a  good  representation  of  what  we  are  going  to  see  in  how  much  each  variable  contributes  to  the  model  that  we're  choosing  before  doing  the  equivalence  test.

Here,  for  example,  all  the  variables  related  to  viability  for  our  fermentation  are  highly  correlated  because  they  are  close  together and  the  way  they  project  onto  the  PC  one  and  PC  two  here,  they  get  high  values.  We  said  that  those  map  well  to  the  first  two  PCs.  So  that  means  that  they  are  participating  a  lot  to  the  model.

Here  we  have  some  other  variables  that  are  closely  clustered  together  here.  So  sodium,  potassium  and  Glutamine.  They  are  highly  correlated.  They  map  very  well  to  the  first  PC,  but  not  to  the  second.  So  they  don't  contribute  a  lot  to  the  model  with  the  second  PC.

Then  here  you  have  problematic  variables.  They  do  not  map  well  to  either  PCs.  That  means  that  in  a  2PC  model,  you  are  not  going  to  capture  the  behavior  for  those  variables.  When  you  see  this,  you  already  know  that  a  2PC  model  is  not  going  to  give  you  a  lot  of  equivalence  for  those  variables.

Last  step  is  to  actually  plot  the  TOST.  This  is  done  again  using  a  script.  Those  graphs  are  not  the  graphs  that  you  would  usually  find  in  JMP,  but  they're  pretty  typical  of  TOST  plots.  For  each  PC  for  each  day,  we  will  have  a  TOST  or  equivalence  test  result.  If  the  confidence  interval  is  outside  of  the  acceptable  range,  which  is  three  times  the  standard  deviation  of  the  scores  in  this  case,  then  we  fail  the  TOST.

When  we  fail  the  test,  we  give  it  a  zero  in  the  script.  To  summarize  what  happens  here,  each  PC  will  capture  a  certain  amount  of  the  variability.  Each  PC  can  pass  or  fail  a  TOST.  Furthermore,  each  variable  contributes  to  a  certain  extent  to  each  PC.

A  principal  component  is  a  linear  combination  of  all  the  variables.  Altogether,  a  variable  that  has  a  strong  contribution  to  a  principal  component  that  passes  a  TOST  will  have  a  strong  impact  on  overall  equivalence  between  the  batches.  This  is  what  we  are  trying  to  put  together.

How  do  we  put  this  together?  There  are  many  ways  we  could  put  this  together.  I  have  done  something  pretty  simple  here.  It's  just  a  sum product  of  passing  or  failing  a  PC,  times  the  contribution  of  the  variable.  Basically,  for  example,  for  two  PCs  here,  we're  failing  the  first  equivalence  test,  and  this  viable,  had  a  40 %  contribution,  so  that  gets  zero,  plus  one  passing  the  TOST,  times  the  contribution  here,  to  that  PC.

That's  the  overall  score  for  it.  In  black,  you  have  the  basic  scores  for  each  day  here.  Let's  call  the  IEQ,  you'll  see  that  in  the  tables  later.  On  average,  we're  getting  about  70 %.  It's  not  too  bad  over  the  course  of  the  fermentation.  Adding  PCs  doesn't  make  a  very  big  difference  because  this  mapped  very  well  to  the  two  PCs.

The  pH,  which  was  one  of  the  variables  that  did  not  map  very  well  to  the  first  two  PCs  gets  a  really  bad  average  score,  if  you  add  only  two  PCs  in  the  model,  around  30 %.  But  if  you  add  another  four  PCs,  there  are  going  to  tell  us  this  one,  that  number  goes  up  to  over  80 %.

There  is  no  bad  or  good  numbers  here,  but  it's  something  you  need  to  keep  in  mind  that  it  really  depends  on  the  model  that  you  choose  for  running  this.  Moving  on,  this  is  the  very  last  output  from  the  script,  and  that's  what  we're  really  interested  in,  especially  if  we  are  comparing  different  processes  or  different  ways  to  run  it.

You  have  a  bar  chart  of  all  your  individual  equivalence s.  This  shows  you  really,  by  variable,  which  ones  are  similar  from  one  scale  to  the  other.  Here  we  have  three  variables  that  are  pretty  similar  amongst  batches,  and  then  it  really  drops  down  up  to  the  last  one  here  which  has  a  very  low  equivalence.

In  the  top  right  corner  here,  JMP  will  put  an  average  if  you  ask  for  it.  T hat's  a  good  metric,  although  it's  very  reducting.  It's  a  good  metric  to  compare  the  same  processes,  if  you're  using  different  ways  to  run  the  TOST  or  different  numbers  of  PCs.

I  have  more  slides  about  this,  but  I  think  it's  better  to  run  straight  into  the  demo  in  the  interest  of  time.  I've  put  a  little  JMP  journal  together.  Not  very  good  at  this.  I  hope  it's  going  to  work.  In  JMP,  we'll  just  look  at  the  data,  the  three  scripts,  and  two  different  ways  to  run  the  last  one.

That's  the  anonymized  data  set  here.  My  computer  is  very  slow.  There  we  go.  I  think  it's  working.  It's  just  really  sluggish.  In  this  data  set  is  the  bare  minimum  that  you  need,  a  run  type  with  two  groups,  a  batch  ID,  which  is  a  categorical  variable  despite  being  a  number  here,  and  the  time  ID  in  this  case,  it's  over  one  recording  a  day,  so  it's  over  a  number  of  days.

The  first  bit  we  do  is  plot  all  the  time  series.  I've  left  this  with  a  few  bits  and  bobs  that  are  not  really  good,  so  that  I  could  point  them  out.  All  the  scripts  in  this  group  and  there  are  three  of  them,  are  basically  doing  the  same  thing  at  the  start,  a  bit  of  cleaning  up  and  prepping,  and  it's  going  to  create  a  clone  of  your  data  table  to  work  on  without  breaking  your  data  table,  and  also  a  directory  to  save  all  the  outputs  from  the  script.

Then  the  scripts  are  basically  looping  here  over  the  number  of  variables  and  plotting  them  one  at  a  time  and  putting  everything  in  a  report.  Let's  run  this.  This  is  a  very  generalized  script  and  it  works  well  on  all  the  data  sets.  Always  nervous,  things  are  not  going  to  work  because  it's  so  slow.  Here  we  go.  It's  still  thinking.  I'll just  be  patient  and  wait.

This  will  plot  this  wrapped  by  batch  time  series  and  in  overlaid  time  series  as  well.  You'll  have  one  of  each  for  each  variable.  It  will  say  variable  one,  the  actual  name  of  your  variable  here  and  plot  them.  This  is  what  we  want  to  see,  basically.

We  have  the  same  shape  for  all  the  batches  and  they  are  consistent  across  the  scales.  We'll  move  down  to  one  that  doesn't  look  as  good.  There  we  go.  For  this  variable,  we  have  the  same  shape  for  this  scale  ish,  and  then  a  very  different  shape  for  the  small  scale.  We  need  to  find  out  why  this  is  happening  and  do  we  want  to  keep  this  variable  in  the  model.

In  particular  here,  we  have  one  batch  that's  very  misbehaved.  If  you  look  at  this  in  an  overlay  plot,  it  is  very  obvious  that  this  average  curve  doesn't  represent  either  the  large  scale  or  the  small  scale.  This  is  a  variable  that  you  need  to  come  back  on.

Variable  6,  I  think  was  in  the  presentation.  This  shows  you  where  you  have  some  outliers  that  you  may  have  missed  the  time  before.  Then  another  thing  you  need  to  look  for  in  those  plots,  is  whether  your  small  and  large  scale  numbers  are  mingled  together.

If  your  red  and  blue  points  are  all  mixed  together,  then  chances  are  your  scales  are  pretty  similar.  But  in  some  cases,  like  here,  for  example,  the  small  scale  data  is  almost  always  above  the  large  scale  data.  So  you  can  expect  to  see  a  difference  here.  Here  I  have  less  than  variable  11,  which  is  really,  really  bad.

This  happens  quite  often  to  us,  when  we  have  a  difference  in  recording  the  variables.  Here  it  was  actually  a  different  unit,  and  that's  why  we  have  very  different  numbers.  Now,  when  you  put  the  data  from  graphs  in  a  report  like  this,  unfortunately,  you  lose  my  favorite  feature  in  JMP,  which  is  interactivity.

You  can't  actually  highlight  a  point  or  a  series  of  points  and  go  see  what  they  are  doing  in  the  table.  But  the  script  is  saving  all  those  individual  plots  for  you.  Here  we  were.  In  here,  it's  created  a  directory  with  all  the  plots  that  we've  just  seen,  plus  it  saved  that  clone  with  the  time  series  tagged  at  the  end.

In  here,  you  can  see...  If  I  can  actually  use  my  mouse,  you  can  see  those  time  series  one  at  a  time.  Then  you  can  select  the  points  that  you  would  normally  to  use  the  interactivity  in  JMP.  If  you  have  several  open  at  the  same  time,  all  of  them  will  be  highlighted  in  all  your  plots.

That's  it  for  time  series.  We'll  move  on  to  the  second  part  of  the  process,  and  that's  looking  at  all  your  ANOVA.  This  is  in  the  Fit Y-by-X platform,  and  like  the  other  script,  it's  doing  a  bit  of  tidying  up  at  the  start,  and  then  it  loops  over  days  and  creates  a  subset  of  the  table  for  each  day.  Then  there's  a  report  on  the  differences  between  the  groups.

If  you  have  written  script  before,  you  will  see  that  this  is  pretty  typical  of  writing  a  script  in  JMP.  Some  of  it  is  written  by  hand,  and  a  lot  of  it,  the  bulk  of  what's  happening,  I  basically  ran  in  JMP  and  copy  pasted  it  into  the  script.  We'll  run  this  on  this  dirty  data  set.  Hopefully,  it  doesn't  take  too  much  time.

If  you  have  a  fast  computer,  I  believe  that  you  would  not  even  see  those  windows  actually  open.  It  would  be  instant.  You  could  see  here  how  JMP  is  basically  going  to  a  number  day and  then  taking  a  subset  of  that  table,  running  a  script,  saving  it  to  that  little  data  table,  and  it's  doing  this  for  every day,  and  we  have  12  days  here,  so  it  takes  a  while.

This  will  also  save  everything  in  its  own  folder.  In  this  case,  we'll  just  look  at  one  of  the  saved  reports.  Here  you  have  a  subset,  all  this  is  for  day  one,  but  it's  a  much  smaller  table.  Here  you  have  the  report  that  you  and  your  scientists  would  want  to  look  at,  which  shows  you  all  the   T-tests.  Now  you  can  look  at  all  those   T-tests  just  to  see  if  they  pass.

You  could  count  how  many  pass  and  take  a  proportion  of  passing   T-test.  But  this  is  also  a  good  place  for  finding  those  more  subtle  outliers  because  each  box  plot  might  have  some  data  that  you  want  to  question.  Again,  you  would  highlight  those  points  and  check  whether  you  want  to  keep  them  in  your  final  data  set  or  not.

Moving  on  again.  We're  finally  at  the  last  bit,  which  is  probably  the  most  interesting.  That's  all  the  PCAs.  This  is  a  much  bigger  script,  because  it  has  to  fetch  information  from  the  JMP  platforms.  I  don't  have  a  lot  of  time  for  this,  but  I  can  answer  questions  at  the  end  if  you're  interested.

The  other  thing  with  this  script  is  that  I  have  hard  coded  some  bits,  so  it  needs  to  be  modified  for  every  data  set.  I  need  to  fix  that  at  some  point.  For  example  here,  it's  actually  doing  a  principal  component  analysis  on  one  of  the  days,  so  a  subset  of  the  data  table.  Then  we  switch  to  the  PCA  report,  and  this  becomes  an  object  in  your  JMP  script.

Then  from  this  object  here,  you  can  get  items.  For  example,  I  run  the  PCA  and  I  have  this  as  an  object,  and  now  I  say,  I  want  the  eigenvalues  in  there.  The  way  to  find  the  objects  that  you  need  is  to  open  the  tree  structure,  in  your  JMP  report  and  everything  is  numbered  and  aligned.  So  you  can  get  everything  that  you  need  from  the  JMP  report  as  a  value,  as  a  matrix,  as  an  array.

It  really  depends  on  what  you  want.  But  you  could  see  I've  done  this  here.  So  once  it  has  all  these  values  here,  I  extract  the  principal  components  and  I  fit  again,  Y-by-X  the  principal  components  versus  my  scales  here.  A gain,  I  switch  to  report.  I'm  doing  this  so  that  I  can  get  the  root  mean  square  error  from  that  report.

That's  because  it's  the  best  estimate  I  will  have  for  my  standard  deviation.  I'm  using  this  standard  deviation  here  to  blanket  calculate  my  acceptable  difference  for  my  TOST.  I  finally  can  actually  run  my  TOST  here.  So  again,  that's  another  group.  And  this  time  it's  feet  wide  by  X,  but  I'm  asking  for  an  equivalence  test  with  Delta  as  my  acceptable  difference.

The  rest  of  the  script  will  plot  all  the  tasks  and  it's  very  boring.  Then  at  the  end,  it  will  create  a  table  with  all  the  outputs  and  all  the  things  that  we  need  to  create  our  bar  chart  and  eventually  we  could  also  create  the  bar  chart.  We'll  run  this  for  this  data  set.  Just  checking  I  have  the  right  one.  There  we  go.  There's it.  I'll  click  on  it  now.

You  could  see  it  in  the  background  here.  It's  upsetting  the  tables  and  it's  doing  this  painfully  slowly.  For  every  day,  it  will  select  the  day,  make  a  smaller  data  table,  do  a  PCA  on  all  the  variables,  and  then  I  will  save  the  principal  components,  the  eigenvalues  and  the  cosines  for  further  calculations.

It  will  use  the  principal  components  for  first  doing  a   T-test,  because  that's  where  we're  going  to  get  our  estimate  of  the  standard  deviation  and  second,  do  an  equivalence  test  to  check  whether  it  passes  equivalence.  I  think  we're on  day  seven,  we're  going  to  get  there  eventually.

It  will  also  plot  all  our  equivalence  tests,  and  it  will  also  create  the  bar  chart  and  the  new  directory.  Bre with  my  computer. Well,  this  is  taking  longer  than  it  should,  really.  I  hope  it's  going  to  work.  Sometimes  scripts  that  are  quite  busy,  mean  that  it's  hard  for  JMP  to  catch  up  with  what's  happening  in  the  background.

I  hope  it's  not  going  to  fail  because  of  that.  No,  here  we  go.  It's  now  created  a  report,  and  for  each  day,  it's  going  to  put  each  TOST  in  a  column  of  graphs.  I  have  written  the  script  in  such  a  way  that  they're  all  the  same  size  and  that  was  suggested  by  one  of  our  scientists,  actually,  so  they're  much  easier  to  compare.

Here  we  had  data  that  really  needed  some  extra  cleaning  up,  so  it  comes  to  no  surprise  that  all  our  equivalence  tests  for  the  first  principle  component  are  failing.  That's  because  the  PCA  is  done  on  variables  that  are  not  similar  between  groups.  But  the  more  subtle  behavior  that's  captured  in  a  second  PC  is  still  passing  a  lot  of  the  equivalence  tests.

I'll  close  this  to  show  you  what's  been  saved  in  the  directory  for  this  one.  For  this,  you  have  individual  subsetted  table  with  their  PCA  and  sub  script.  Even  opening  a  small  table  like  this  is  taking  a  long  time.  There  we  go.  Here  are  the  PCAs.  Here's  the  loading  plot.

This  is  where  the  eigenvalues  come  from,  and  here  the  cosines  which  are  pulled  out  by  the  script.  It  has  the  TOST  results  that's  used  for  making  the  TOST  graphs,  but  we've  already  seen  those.  It  has  a  table  that  shows  you  which  TOST  passed with  a  zero  or  a  one  here,  and  the  explained  variance,  and  the  calculations  for  the  explained  variance  in  the  same  table.

T his  columns  here  is  what  we're  going  to  use  to  create  our  bar  chart.  The  bar  chart  gets  saved  in  the  journal  in  this  case.  There  are  many  ways  you  could  do  this,  really.  For  15  variables  and  not  the  best  of  cleanup  jobs,  let's  see  what  equivalence  we  get  here.  It  is  all  working.

It's  just  really  slow.  Sorry  about  that.  There  we  go.  I've  had,  again,  feedback  from  scientists  saying  that  they  would  prefer  to  see  the  variables  in  the  order  they  were  in  originally,  because  most  of  our  data  is  recorded  in  templates,  so  people  are  used  to  seeing  those  variables  in  order.

But  it's  also  nice  to  have  it  in  descending  order  so  that  you  can  quickly  see  which  variables  are  quite  equivalent  and  which  ones  are  not  doing  so  well.  Here  on  average,  we  have  21 %  equivalence  across  all  our  variables.  It's  not  a  very  high  number.  I  don't  have  a  criteria  for  that  number,  but  I  think  around  60 %- 75 %  would  be  quite  desirable.

I'll  close  everything  I  can  to  make  some  space.  We'll  go  back  to  see  what  happens  if  we  remove  one  offensive  variable.  I  haven't  done  enough  cleaning  up  here,  but  I'm  removing  variable  11,  which  was  really  not  an  acceptable  variable  to  have  in  our  data  set.

I  will  run  the  task  with  three  PCs  this  time,  so  that  I  can  at  least  have  a  shot  at  capturing  the  variability  in  things  like  pH  or  PO2,  which  tend  to  be  much  more  complex.  We'll  run  this  one  and  we'll  have  a  look  at  the  bar  chart  and  see  how  much  equivalence  we  can  capture.

I  suspect  this  is  going  to  be  slow  again.  This  is  going  slowly.  We're  only  on  day  two,  so  I  need  to  fill  up  the  time.  As  I  said,  we  don't  have  a  criterion  to  look  at  this  total  number.  It's  more  of  a  relative  number.

Either  you  have  a  set  of  criteria  for  cleaning  up  your  data,  or  maybe  because  you  are  running  batches  and  recording  them  in  similar  ways,  you  would  say,  we  will  always  only  look  at  those  10  variables,  and  then  you  can  compare  the  overall  equivalence  or  the  bar  charts  for  given  sets  of  variables  that  are  comparable.

The  other  way  you  could  do  it  is  using  the  same  data  sets  like  I  have  today. I  know  we  have  21 %  equivalence  for  15  variables,  but  once  we  remove  variables  11  and  five,  for  example,  and  clean  up  some  of  the  outliers,  then  that  number  starts  going  up,  or  it  could  be  we  have  only  21 %  with  two  PCs,  but  if  we  add  a  couple  because  some  of  the  variables  don't  map  very  well  to  the  first  two  PCs,  then  this  number  also  is  going  up.

It's  very  difficult  to  put  a  criterion  on  that  number,  but  it's  pretty  good  for  comparing  different  models  or  different  data  sets  that  have  been  treated  reasonably  similarly.  How  are  we  doing  here?  Almost  there.  I'm  very  sorry  about  this.  My  computer  is  particularly  slow  today.  Here  we  go.

Here  are  tasks,  and  this  time  there  are  three  PCs,  so  they're  aligned  by  three.  I  think  if  we  did  this  bigger,  it  would  start  sticking  out  of  the  window  here.  Because  we  have  removed  one  variable  already,  we  could  see  that  some  of  the  tasks  are  passing  even  for  the  first  PC.  So  that's  definitely  made  a  very  big  difference.

I  will  close  those  and  go  back  into  the  directory  it  was  created.  The  way  I've  written  this,  if  I'm  doing  two  data  sets  in  the  same  directory,  it's  going  to  get  erased  because  Save  As  in  script  in  JMP  will  save  on  top  of  existing  data  if  it  has  the  same  name.

Here  was  the  same  data,  we  just  removed  one  variable  and  added  one  PC,  and  we  got  from  21 %  to  about  47 %  on  average  across  the  variable  equivalence.  That's  showing  you  what  a  big  difference  it  can  make  from  just  a  small  cleaning  step  or  choosing  a  slightly  different  model  with  one  more  PC  in  this  case.

Now  it's  me.  I've  gone  through  all  the  scripts.  I'll  put  back  my  very  last  slide  up  here  to  conclude.  This  is  a  new  technique  to  look  at  equivalence,  this  multivariate  technique.  I  haven't  seen  it  used  somewhere  else.  It's  a  complement,  not  a  replacement.

You  should  still,  especially  if  you're  heavily  involved  with  the  data,  you  should  still  looking  at  all  the  time  points  that  you're  interested  in.  It  gives  a  holistic  picture  with  a  lot  of  detail  because  you  have  a  lot  of  output.  But  if  you're  only  interested  in  the  final  information,  really  that  bar  chart,  gives  you  a  lot  of  information  in  just  one  graph.

You  could  do  this  with  any  types  of  groups  that  you  want  to.  This  happens  to  be  scales  because  we  look  at  the  difference  between  manufacturing  and  lab  scales  a  lot  at  Fujifilm.  That's  it,  really.  It's  your  multivariate  to  one  sided   T-test.  As  a  part  of  our  process  flow  to  look  at  scale  up  and  scale  down  data.  I'd  be  happy  to  take any questions.