#

# An R function [two.stage.ssize] for computing the two-state sample size given by

# equation (5) in Choudhary and Nagaraja (2005, Sequential Analysis, 24, 237-257).

#

# Input required:

# k [the # instruments under comparison]

# alpha [the level of the test of hypotheses (1) in Choudhary and Nagaraja (2005)]

# delta [the indifference zone threshold]

# gamma [the desired probability of correct decision]

# diag.psi [the vector of diagonal elements of the matrix ]

# corr [the correlation matrix associated with ]

#

# Uses:

#  “pmvnorm” function available in the package “mvtnorm”. This package can be

# “uniroot” function available in the “base” package.

#  “mvncdf” function available below.

#

two.stage.ssize <- function (k, m, diag.psi, corr, alpha=0.05, gamma=0.20, delta=log(1.2), interval=c(15, 1000))

{

root <- uniroot(function(x) mvncdf(x, k=k, diag.psi=diag.psi, corr=corr, alpha=alpha, gamma=gamma, delta=delta), interval=interval)\$root

ssize <- max(ceiling(root), m)

return(ssize)

}

#

# The “mvncdf” function

#

mvncdf <- function (l.m, k,  diag.psi, corr, alpha, gamma, delta)

{

upper <- numeric(k)

upper[1] <- (sqrt(l.m)*delta/sqrt(diag.psi[1]))-qnorm(1-alpha)

for (i in 2:k)

{ upper[i] <- sqrt(l.m)*delta/sqrt(diag.psi[i]) }

integral <- pmvnorm(upper=upper, corr=corr) - (1-gamma)

return(integral)

}

#

# Example used for illustration in Choudhary and Nagaraja (2005)

#

diag.psi <- c(2.0, 1.17)

corr <- matrix(nrow=2, ncol=2)

corr[1,] <- c(1.0, 0.386)

corr[2,] <- c(0.386, 1.0)

two.stage.ssize (k=2, m=15, diag.psi=diag.psi, corr=corr, alpha=0.05, gamma=0.20, delta=log(1.2), interval=c(15, 1000))

#