[R] koq.q ---- Kent O' Quigley R2
Antonello Romani
antonello.romani at studenti.unipr.it
Tue Mar 30 11:14:48 CEST 2004
Dear R-users,
I apply to your kind attention to know if someone have used the Splus software
koq.q (Kent & O'Quigley's measure of dependence for censored data) in R and
kindly can help me.
I have tried several times to contact the authors Andrej Blejec
(andrej.blejec at uni-lj.si) or Janez Stare (janez.stare at mf.uni-lj.si) but
unfortunately no one answered me.
Following you'll see the function nlminb that i have changed with R-function
optim() and the error that came out when i try to run this software.
As attached file there is the file koq.q
Thanking in advance for what you can do about it
Yours Faithfully
Dr. Antonello Romani
Dipartimento di Medicina Sperimentale
Sezione di Patologia Molecolare e Immunologia
via Volturno 39
43100 Parma
Italy
#-----------------------------------------------------------------------------------------------
find.mu.alfa <- function(theta, theta1, x, ell, which,...)
{
#
# find theta=c(beta,mu,alfa) which maximize
# Expected Log-Likelihood given by ell
#
# Set lower and upper bounds for mu (-Inf,Inf)
# and alfa (0,Inf)
#
lower <- c(which, T, 0) * theta
lower[c(which, T, 0) == T] <- - Inf
upper <- c(which, T, T) * theta
upper[c(which, T, T) == T] <- Inf #
optim(par=theta,fn=ell,method="L-BFGS-B",lower = lower, upper = upper,
x = x,theta1 =theta1)
#nlminb(start = theta, objective = ell, x = x,lower = lower, upper = upper,
theta1 = theta1, ...)
}
#
#----------------------------------------------------------------------------------------------------------
fit<-cph(Surv(futime,fustat)~age,data=ovarian,x=T,y=T,surv=T,method="breslow",type="kaplan-meier")
> fit
Cox Proportional Hazards Model
cph(formula = Surv(futime, fustat) ~ age, data = ovarian, method = "breslow",
x = T, y = T, surv = T, type = "kaplan-meier")
Obs Events Model L.R. d.f. P Score Score P
26 12 14.29 1 2e-04 12.26 5e-04
R2
0.454
coef se(coef) z p
age 0.162 0.0497 3.25 0.00116
>koq(fit)
Beta = 0
Beta1 = 0.1616199
Error in ELL(theta = theta0, theta1 = theta1, x = x) :
only 0's may mix with negative subscripts
In addition: Warning message:
Replacement length not a multiple of the elements to replace in matrix(...)
-------------- next part --------------
"koq"<-
function(beta1, x = NULL, p = NULL, verbose = T)
{
#
#--------------------------------------------------------------------
check.parameters <- function(beta1, x, p)
{
# Check parameters and
# determine variables to be tested
#
if(data.class(beta1) == "cph") x <-
coxph.detail(beta1)$x
if(is.null(x))
stop("Independent variables (x) not set")
if(data.class(beta1) == "coxreg" || data.class(
beta1) == "cph")
beta1 <- beta1$coef
if(!(data.class(beta1) == "numeric"))
stop("Illegal parameter beta1 \n A vector of numeric coefficients or an object of class \"coxreg\" expected"
)
m <- length(beta1)
if(is.null(p)) p <- 1:m
# p is a list of vars to be tested
if(max(p) > m | (min(p) < 1 & max(p) > 1))
stop(paste("Illegal variable selected p=",
list(p)))
if(max(p) == 1 & (min(p) == 0 | max(p) == 1) &
length(p) == length(beta1)) {
which <- !p # p is indicator variable
}
else {
which <- rep(T, m)
which[p] <- F
}
beta <- beta1 * which
list(beta = beta, beta1 = beta1, x = x, p = p,
which = which)
}
#
#----------------------------------------------------------------
find.mu.alfa <- function(theta, theta1, x, ell, which,
...)
{
#
# find theta=c(beta,mu,alfa) which maximize
# Expected Log-Likelihood given by ell
#
# Set lower and upper bounds for mu (-Inf,Inf)
# and alfa (0,Inf)
#
lower <- c(which, T, 0) * theta
lower[c(which, T, 0) == T] <- - Inf
upper <- c(which, T, T) * theta
upper[c(which, T, T) == T] <- Inf #
optim(par=theta,ell,x = x,theta1 =theta1)
#nlminb(start = theta, objective = ell, x = x,
# lower = lower, upper = upper, theta1 =
# theta1, ...)
}
#
#----------------------------------------------------------------
ELL <- function(theta, theta1, x)
{
#
# Expected Log-Likelihood function for the Weibull regression model
# (see reference 1 in help file)
#
# Note: negative Log-likelihood value is returned
# to facilitate finding of extreme value of ELL in
# find.mu.alfa
#
np <- length(theta) - 2
alfa <- theta[np + 2]
mu <- theta[np + 1]
alfa1 <- theta1[np + 2]
mu1 <- theta1[np + 1]
beta <- theta[1:np]
beta1 <- theta1[1:np]
a <- alfa/alfa1
b.beta <- t(as.matrix(beta - a * beta1)) %*% t(x)
b <- (mu - a * mu1) + b.beta
ga1 <- gamma(a + 1) #
# negative value of ELL is returned !
#
- (log(alfa) - 0.57721566 * a + mean(b - exp(b) * ga1))
}
#
#
#-- koq ---------------------------------------------------------
#
params <- check.parameters(beta1 = beta1, x = x, p = p)
# are parameters OK?
beta1 <- params$beta1
beta <- params$beta
which <- params$which # which - coefficients not tested
np <- length(beta1)
x <- as.matrix(params$x)
if(length(beta1) != ncol(x))
stop("Number of coefficients in beta1 should be equal to the number of variables (columns) in x"
)
if(verbose) {
cat("Beta = ", beta, "\n")
cat("Beta1 = ", beta1, "\n")
}
theta1 <- c(beta1, 0, 1)
theta <- c(beta, 0, 1)
b0 <- find.mu.alfa(theta = theta, theta1 = theta1, x = x,
ell = ELL, which = which)
theta0 <- b0$parameters #
GAMMA <- 2 * (ELL(theta = theta0, theta1 = theta1, x = x) -
ELL(theta = theta1, theta1 = theta1, x = x))
koq <- 1 - exp( - GAMMA)
koq
}
More information about the R-help
mailing list