Jump to content


Photo

Adjusting for Unequal Variances in WNL Bioeq


  • Please log in to reply
3 replies to this topic

#1 Linda Hughes

Linda Hughes

    Advanced Member

  • Members
  • PipPipPip
  • 73 posts

Posted 01 July 2013 - 08:13 PM

The FDA Guidance “Statistical Approaches to Establishing Bioequivalence” [1], in the section on parallel designs (section VI.B.1.d, pg. 11) states that "equal variances should not be assumed", referring to equal variances between formulations. Although future releases of Phoenix will provide more support for testing for unequal variances, this document is to provide information on how to account for unequal variances in the current release, Phoenix 1.3.

 

To illustrate the method, the shipped data, Data2x2, is used, but to make an example of a parallel design, only the data from sequence TabCap will be used initially. A column with ln(AUClast) will be added to compare with SAS:

 

PHST-01    1    Tablet    0.871055    -0.13805016
PHST-01    2    Capsule    0.579635    -0.54535668
PHST-04    1    Tablet    1.24647    0.22031556
PHST-04    2    Capsule    0.994157    -0.0058601371
PHST-06    1    Tablet    0.782486    -0.24527925
PHST-06    2    Capsule    0.690144    -0.37085501
PHST-07    1    Tablet    0.65935    -0.41650078
PHST-07    2    Capsule    0.709033    -0.34385321
PHST-09    1    Tablet    0.888143    -0.11862251
PHST-09    2    Capsule    0.919958    -0.083427262
PHST-12    1    Tablet    1.22086    0.19955553
PHST-12    2    Capsule    0.97755    -0.022705838
PHST-14    1    Tablet    2.01194    0.69909943
PHST-14    2    Capsule    1.52751    0.42363896
PHST-15    1    Tablet    0.549425    -0.598883
PHST-15    2    Capsule    1.15416    0.14337281
PHST-17    1    Tablet    0.638047    -0.44934333
PHST-17    2    Capsule    0.92412    -0.078913346
PHST-18    1    Tablet    0.681393    -0.38361605
PHST-18    2    Capsule    0.705037    -0.349505


SAS says to take two steps to adjust for unequal variances when using PROC MIXED [2] – use a ‘repeated’ statement that groups on the formulation variable and use Satterthwaite Degrees of Freedom, such as in this SAS code:

 

proc mixed;

class Subject Period Formulation;

model LnAUClast = Formulation /ddfm=satterthwaite;

repeated /subject = Subject group = Formulation; /* same results as group only, no subject */

lsmeans Formulation /pdiff;

estimate "Tablet - Capsule" Formulation -1 1;

run;

 

Partial output is:

Estimates Label Estimate Standard Error DF t Value Pr > |t|

Tablet - Capsule 0.000214 0.1541 16.4 0.00 0.9989

 

Least Squares Means

Effect Formulation  Estimate Standard Error DF t Value Pr > |t|

Formulation Capsule -0.1233   0.09049       9   -1.36   0.2060

Formulation Tablet  -0.1231   0.1247        9   -0.99   0.3493

 

To perform the equivalent procedure in Phoenix, map the data to a Bioequivalence object, which will set up multiple default settings, including Satterthwaite Degrees of Freedom on the General Options tab. In addition to the default settings,

 

map AUClast as the Dependent variable,

and Subject should be mapped as a Classification variable.

Keep the Fixed Effects model, Formulation, with Ln transformation.

Set up the Repeated subtab of the Variance Structure tab as:

 

Repeated Specification: <blank>  (see below)

Variance Blocking Variables (Subject): Subject

Group: Formulation Type: Variance Components

 

However, in the current version of Phoenix, if the Repeated Specification is blank, Phoenix 1.3 will ignore the rest of this tab, so a workaround must be used. To do so, map Period as a Classification variable, and use that column for the Repeated Specification. If your data does not contain a Period column, add a column of data that contains all 1’s, map it as a Classification variable, and use that column for the Repeated Specification. After completion of these steps, execution of Bioequivalence will produce the same values as SAS. A project is attached that shows both setups.

 

This methodology can also be used for 2x2 crossover designs.

To work around the current issue in Phoenix 1.3, use Period for the Repeated Specification (or you can add a column of data that contains all 1’s, map it as a Classification variable, and use that column for the Repeated Specification). After completion of these steps, execution of Bioequivalence will produce the same values as SAS, as in the attached project.

Note that for replicated crossover designs, the model recommended in Appendix E of the FDA Guidance[1] and the default model in the Bioequivalence object already adjust for unequal variances by using Satterthwaite Degrees of Freedom and by grouping on the formulation in the repeated model:
Fixed: Sequence Formulation Period /ddfm=satterthwaite;
Random: Formulation /type=fa0(2) subject=Subject;
Repeated: Period /subject=Subject group= Formulation;

References:
[1] Guidance for Industry – Statistical Approaches to Establishing Bioequivalence, January 2001, www.fda.gov/downloads/Drugs/Guidances/ucm070244.pdf
[2] SAS Support site, support.sas.com/kb/22/526.html

Attached Files


Edited by Simon Davis, 22 October 2014 - 02:18 PM.


#2 Helmut Schütz

Helmut Schütz

    Advanced Member

  • Members
  • PipPipPip
  • 316 posts
  • LocationVienna, Austria

Posted 04 July 2013 - 01:29 AM

Hi(gh) Linda,

amazing coding skills! Is it possible that you have in the first WF also the repeated coding? I removed it (=default WNL/PHX coding for parallel without subject) and got (PE and 90% CI):
WF1: 100.0214 (76.5682, 130.6584)
WF2: 100.0214 (76.4611, 130.8415)

My standard R-code:
disply <- function(table) {
    cat("\nTest/Reference with 95% Confidence Limits (90% CI)", fill=T)
    round(table, 4) }
PK <- ("
  AUClast, treatment
  0.579635, Capsule
  0.994157, Capsule
  0.690144, Capsule
  0.709033, Capsule
  0.919958, Capsule
  0.977550, Capsule
  1.527510, Capsule
  1.154160, Capsule
  0.924120, Capsule
  0.705037, Capsule
  0.871055, Tablet
  1.246470, Tablet
  0.782486, Tablet
  0.659350, Tablet
  0.888143, Tablet
  1.220860, Tablet
  2.011940, Tablet
  0.549425, Tablet
  0.638047, Tablet
  0.681393, Tablet")
txtcon <- textConnection(PK)
PKdata <- read.table(txtcon, header=T, sep=",", strip.white=T)
close(txtcon)
PKdata$logAUC <- log(PKdata$AUC)
attach(PKdata)
relevel(treatment, ref = "Capsule")
t1 <- t.test(logAUC ~ treatment, data=PKdata,var.equal=TRUE, conf.level=0.90)
tbl1 <- matrix(
    c(as.numeric(100*exp(diff(t1$estimate))), sort(as.numeric(100*exp(-t1$conf.int)))),
    byrow=T, nrow=1)
dimnames(tbl1) <- list("t-test (equ. var.) ", c("Point Estimate", "Lower CL", "Upper CL"))
t2 <- t.test(logAUC ~ treatment, data=PKdata, var.equal=FALSE, conf.level=0.90)
tbl2 <- matrix(
    c(as.numeric(100*exp(diff(t2$estimate))), sort(as.numeric(100*exp(-t2$conf.int)))),
    byrow=T, nrow=1)
dimnames(tbl2) <- list("Welch-Satterthwaite", c("Point Estimate", "Lower CL", "Upper CL"))
disply(tbl1)
disply(tbl2)
gives:
Test/Reference with 95% Confidence Limits (90% CI)
                    Point Estimate Lower CL Upper CL
t-test (equ. var.)        100.0214  76.5682 130.6584
Test/Reference with 95% Confidence Limits (90% CI)
                    Point Estimate Lower CL Upper CL
Welch-Satterthwaite       100.0214  76.4611 130.8415
Bingo!

Will have a look at the Xover one of these days.

Posted Image

 Best regards,
Helmut

https://forum.bebac.at/


#3 Linda Hughes

Linda Hughes

    Advanced Member

  • Members
  • PipPipPip
  • 73 posts

Posted 08 July 2013 - 06:33 PM

Hi Helmut,

 

Thanks for your R-code and computations! In the first object in the project, I was just trying to make the point that if the user had a Period column in their data (which they might not for a parallel design), then that column could be used for the Repeated specification. The first two objects are really equivalent, with one using a Period column and the other using a made-up column of 1's that I called "Repeated'.

 

To address some of the questions that came up on BEBAC:

 

Yes, this model does create a covariance matrix with two squared sigmas on the diagonal and zeroes elsewhere, as confirmed by a professor of Statistics who is consulting for us. I haven’t looked into a 3-treatment parallel study yet, but that is an interesting question.

 

The Satterthwaite DF option is making the necessary correction to the DF. For two populations, this appears to be the same formula you are finding on Wikipedia.

 

About your comment that switching to the Residual DF option did not change the DF result, when there are no degrees of freedom left for the residual (because of the specification of the Repeated term), then the program is using Satterthwaite anyway (similarly to SAS which will override your DF option). But it would be better if there was a warning when that happened, so I'll make a note of that.

 

Thanks!

Linda



#4 Helmut Schütz

Helmut Schütz

    Advanced Member

  • Members
  • PipPipPip
  • 316 posts
  • LocationVienna, Austria

Posted 08 July 2013 - 06:59 PM

Hi Linda!

The first two objects are really equivalent, with one using a Period column and the other using a made-up column of 1's that I called "Repeated'.

I see.

Yes, this model does create a covariance matrix with two squared sigmas on the diagonal and zeroes elsewhere,…

Is there a method to display this matrix? When I switched on the intermediate output, I'm not sure whether I got what I want. ;-)

… as confirmed by a professor of Statistics who is consulting for us.

Ah, Mr anonymous with an IQ of 109 (Anders’ assumption). Maybe he has the balls to register here or even at the BABE-forum? I feel we are playing Chinese whispers.

I haven’t looked into a 3-treatment parallel study yet, but that is an interesting question.

Indeed.

The Satterthwaite DF option is making the necessary correction to the DF. For two populations, this appears to be the same formula you are finding on Wikipedia.

No surprise, since I edited the last version of WP’s article. ;-)

About your comment that switching to the Residual DF option did not change the DF result, when there are no degrees of freedom left for the residual (because of the specification of the Repeated term), then the program is using Satterthwaite anyway (similarly to SAS which will override your DF option).

Quoting Detlew Labes from the BEBA-forum “Zero degrees of freedom are not an awful lot.”

P.S.: Maybe somebody can edit http://www.pharsight...unena.forum.css
"font-size:small;" is a CSS-nightmare… Have to zoom three steps up in order to work here. ;-)

 Best regards,
Helmut

https://forum.bebac.at/





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users