Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error from concordancefit with strata term when nvar > 1 #249

Open
sritchie73 opened this issue Apr 9, 2024 · 1 comment
Open

Error from concordancefit with strata term when nvar > 1 #249

sritchie73 opened this issue Apr 9, 2024 · 1 comment

Comments

@sritchie73
Copy link

The concordance function currently cannot be used to compare models when also using a strata term.

Reproducible example using the mgus2 data based on the example code for the concordance function comparing multiple models:

library(survival)

# Filter mgus2 to complete data for simplicity
tdat <- mgus2[complete.cases(mgus2),]

# Fit two sex stratified models for comparison:
fit4 <- coxph(Surv(ptime, pstat) ~ strata(sex) + age + mspike, tdat)
fit5 <- coxph(Surv(ptime, pstat) ~ strata(sex) + age + hgb + creat, tdat)

# Extract linear predictors
p4 <- -predict(fit4) # invert; high risk scores predict shorter survival, equivalent to reverse=TRUE
p5 <- -predict(fit5)

# Compare condorance
cfit <- concordance(Surv(ptime, pstat) ~ strata(sex) + p4 + p5, tdat)

This gives the following error message:

Error in dimnames(rval$count) <- list(Xname, cname) : 
  length of 'dimnames' [1] not equal to array extent

Stepping through the concordance function, we can trace this error to the assembling of results in the concordancefit function on line 374 in the concordance.R file: https://github.com/therneau/survival/blob/master/R/concordance.R#L374

Here are the working states of rval and list(Xname, cname) right before the error:

Browse[2]> rval
$concordance
       p4        p5      <NA>      <NA> 
0.5146919 0.5000000 0.5256784 0.5000000 

$count
      [,1]  [,2] [,3] [,4]    [,5]
[1,] 12913 11986 6649 7610      36
[2,]     6     6    0    0 2834173
[3,] 12490 10959 6362 7931      38
[4,]     6     6    0    0 2875235

$n
[1] 1338
Browse[2]> list(Xname, cname)
[[1]]
[1] "p4" "p5"

[[2]]
[1] "concordant" "discordant" "tied.x"     "tied.y"     "tied.xy"   
@therneau
Copy link
Owner

I would do this in a much simpler way, i.e., concordance(fit4, fit5)
I had not considered the setup you used, and will have to think about this a bit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants