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

Problem with Wald CI in transreg with weibull model option for internal and external infection models #7

Open
yushuf opened this issue Nov 19, 2017 · 6 comments

Comments

@yushuf
Copy link

yushuf commented Nov 19, 2017

#Recently I was trying transreg with dist = "weibull", xdist = "weibull" options. I get the following errors while estimating the confidence intervals.
First one is Wald and second one is LR.

ci_unobs_tr_w <- confint(unobs_tr)
Warning message:
In sqrt(diag(treg$var)[parm]) : NaNs produced

ci_unobs_tr_lr <- confint(unobs_tr, type = "lr")#
Error in if (!is.numeric(lower) || !is.numeric(upper) || lower >= upper) stop("lower < upper is not fulfilled") :
missing value where TRUE/FALSE needed
In addition: Warning message:
In sqrt(diag(treg$var)[parm]) : NaNs produced

### **My message, this is not the only problem with LR which might happen with Wald. I tried two simulation and both of the times I get that error with Wald though in some different command line.

This is for your information. The detail code is as follows along with data**

data.zip

library(transtat)
pdata <- read.csv("pdata.csv")
xdata <- read.csv("xdata.csv")
coef <- read.csv("coef.csv", header = TRUE)

pairwise data to be combined with external data

pdat <- pdata
pdat$interval <- pdat$exit - pdat$entry
pdat$external <- 0
pdat$trace <- 1
pdat$start <- 0
pdat$stop <- pdat$interval

external data

xdat <- xdata
names(xdat)[names(xdat) == "x"] <- "susx"

xdat$external <- 1
xdat$infectious <- NA
xdat$infx <- 0
xdat$interval <- xdat$exit # entry is at time 0
xdat$start <- xdat$entry
xdat$stop <- xdat$exit

dat <- rbind(pdat, xdat)

AFT model all data

Who-infects-whom observed

obs <- transreg(
Surv(interval, infector) ~ infx + susx + ext(external),
sus = "susceptible", data = dat,
dist = "weibull", xdist = "weibull"
)

Who-infects-whom not observed

unobs <- transreg(
Surv(interval, infset) ~ infx + susx + ext(external),
sus = "susceptible", data = dat,
dist = "weibull", xdist = "weibull"
)

AFT model with contact tracing and left-truncation (delayed entry)

Who-infects-whom observed

obs_tr <- transreg(
Surv(start, stop, infector) ~ infx + susx + ext(external),
sus = "susceptible", data = dat, subset = (trace == 1),
dist = "weibull", xdist = "weibull"
)

Who-infects-whom not observed

unobs_tr <- transreg(
Surv(start, stop, infset) ~ infx + susx + ext(external),
sus = "susceptible", data = dat, subset = (trace == 1),
dist = "weibull", xdist = "weibull"
)

AFT model with no external data

Who-infects-whom observed

obs_nx <- transreg(
Surv(interval, infector) ~ infx + susx,
sus = "susceptible", data = dat, subset = (external == 0),
dist = "weibull", xdist = "weibull"
)

Who-infects-whom not observed

unobs_nx <- transreg(
Surv(interval, infset) ~ infx + susx,
sus = "susceptible", data = dat, subset = (external == 0),
dist = "weibull", xdist = "weibull"
)

AFT model with contact tracing but no left truncation

Who-infects-whom observed

obs_trx <- transreg(
Surv(interval, infector) ~ infx + susx + ext(external),
sus = "susceptible", dat = dat, subset = (trace == 1 | infector == 1),
dist = "weibull", xdist = "weibull"
)

Who-infects-whom not observed

unobs_trx <- transreg(
Surv(interval, infset) ~ infx + susx + ext(external),
sus = "susceptible", data = dat, subset = (trace == 1 | infector == 1),
dist = "weibull", xdist = "weibull"
)

ci_obs_w <-confint(obs)
ci_obs_lr <- confint(obs, type = "lr")
ci_unobs_w <-confint(unobs)
ci_unobs_lr <- confint(unobs, type = "lr")
ci_obs_tr_w <- confint(obs_tr)
ci_obs_tr_lr <- confint(obs_tr, type = 'lr')
ci_unobs_tr_w <- confint(unobs_tr)
ci_unobs_tr_lr <- confint(unobs_tr, type = "lr")#
ci_obs_nx_w <- confint(obs_nx)
ci_obs_nx_lr <- confint(obs_nx, type = "lr")
ci_unobs_nx_w <- confint(unobs_nx)
ci_unobs_nx_lr <- confint(unobs_nx, type = "lr")
ci_obs_trx_w <- confint(obs_trx)
ci_obs_trx_lr <- confint(obs_trx, type = "lr")
ci_unobs_trx_w <- confint(unobs_trx)
ci_unobs_trx_lr <- confint(unobs_trx, type = "lr")

@ekenah
Copy link
Owner

ekenah commented Nov 20, 2017

The problem is a negative variance. This seems to happen only if who-infects-whom is not observed. How often does this problem occur (e.g., per thousand simulations)?

@yushuf
Copy link
Author

yushuf commented Nov 21, 2017

The problem appears when who-infected-whom is not observed with contact tracing true for external intercept and external log(shape) parameters interval estimates. The probabilities of happening the event are

P(xintercept_unobs_tr_w) = 0.497 and P(lxshape_unobs_tr_w) = 0.454

This is based on one thousand simulation for Wald CI. I never tried LR, in these cases LR stops running the program.

@ekenah
Copy link
Owner

ekenah commented Nov 21, 2017

When there are no external infections, there should be no external intercept or shape parameters. Can you explain the second case where the problem appears again?

@yushuf
Copy link
Author

yushuf commented Nov 22, 2017

Sorry I made a mistake in description, That never happened when we ignored the external source of infection. I have updated my previous comment. Thanks for figure that out.

@yushuf
Copy link
Author

yushuf commented Nov 22, 2017

Python data generation script attached without .py extension. I guess you are looking for this one.

datsim.txt

@ekenah
Copy link
Owner

ekenah commented Nov 28, 2017

This appears to be numerical instability caused by the rapidly decreasing hazard of external infection, not an error in the code. Please re-run the simulations with exponential external contact intervals.

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