Nothing
lynden <-
function(X, U=NA, V=NA, error=NA, nmaxit=NA,
boot=TRUE, B=NA, alpha=NA, display.F=FALSE,
display.S=FALSE){
# set truncation both side by default
trunc <- "double"
# analize if we have a NA and remove then
if (all(is.na(U)) == TRUE & !all(is.na(V)) == TRUE) {
trunc <- "right"
cat("case U=NA","\n")
cat("warning: data on one truncation limit are missing; the result is based on an iterative algorithm, but an explicit-form NPMLE (Lynden-Bell estimator) exists","\n")
if (any(is.na(V)) == TRUE | any(is.na(X)) == TRUE) {
navec <- c(which(is.na(X)), which(is.na(V)))
X <- X[-navec]
V <- V[-navec]
}
}
# check for NA in the resulting vector
if (all(is.na(V)) == TRUE & !all(is.na(U)) == TRUE) {
trunc <- "left"
cat("case V=NA","\n")
cat("warning: data on one truncation limit are missing; the result is based on an iterative algorithm, but an explicit-form NPMLE (Lynden-Bell estimator) exists","\n")
if (any(is.na(U)) == TRUE | any(is.na(X)) == TRUE) {
navec <- c(which(is.na(X)), which(is.na(U)))
X <- X[-navec]
U <- U[-navec]
}
}
if (all(is.na(V)) == TRUE & all(is.na(U)) == TRUE) {
cat("case U=NA and V=NA","\n")
stop("warning: data on at least one truncation limit (left or right) is required","\n")
}
# if trunccation is set both sides prepare the arrays
if (trunc == "both") {
if (any(is.na(U)) == TRUE |
any(is.na(V)) == TRUE | any(is.na(X)) == TRUE) {
navec <- c(which(is.na(X)), which(is.na(U)), which(is.na(V)))
X <- X[-navec]
U <- U[-navec]
V <- V[-navec]
}
}
D <- cbind(X, U, V) # concatenate them into D
if (all(is.na(V)) == TRUE)
D[, 3] <- rep(max(D[, 1]) + 1, length(X))
if (all(is.na(U)) == TRUE) {
D[, 2] <- rep(min(D[, 1]) - 1, length(X))
D[, 1] <- D[, 1]
D[, 3] <- D[, 3]
}
# preallocation
C <- matrix(0, nrow = nrow(D), ncol = ncol(D))
EE <- matrix(0, nrow = nrow(D), ncol = ncol(D))
########################################
# ordenaƧao or ordering zone
########################################
ord <- order(D[, 1], method = "auto")
C[, 1] <- sort(D[, 1], method = "auto")
C[, 2:ncol(D)] <-
D[ord, 2:ncol(D)] # use the ordered indeces for ordering
T<-table(C[,2]<= C[,1]&C[,1]<=C[,3])
if(sum(T[names(T)=="TRUE"])!=length(X) |sum(T[names(T)=="TRUE"]==0)){
stop("Condition of double truncation is violated","\n")
}
NJ<-matrix(data=0,ncol=1,nrow=nrow(C))
K<-NJ
#for(j in 1:nrow(C)){
#for(k in 1:nrow(C)){
#if (C[k,2]<=C[j,1]& C[k,1]>=C[j,1]) {NJ[j,1]<-NJ[j,1]+1}
#}}
ar1<-outer(C[, 2], C[, 1], "<=")
ar2<-outer(C[, 1], C[, 1], ">=")
AZ<-ar1*ar2
NJ<-as.matrix(colSums(AZ))
K[,1]<-rep(1,length=nrow(C))
mNJ<-min(NJ[1:nrow(C)-1,1])
if (mNJ!=1) K[,1]<-NJ[,1]
if (mNJ==1){
istar<-max(which(NJ[1:nrow(C)-1,1]==1))
K[1:istar,1]<-2
if(istar<nrow(C)){K[(istar+1):nrow(C),1]<-NJ[(istar+1):nrow(C),1]}
}
NJ<-as.matrix(apply(cbind(NJ,K),1,max),ncol=1)
#J<-matrix(data=0,ncol=nrow(C),nrow=nrow(C))
#for (k in 1:nrow(C)){
#for(j in 1:nrow(C)) {
#a1<-min(C[j,2],C[j,3])
#b1<-max(C[j,2],C[j,3])
#if(C[k,1]>=a1 & C[k,1]<=b1) J[k,j]<-1
#}}
UN<-unique(C)
aun <- outer(UN[, 1], UN[, 2], ">=")
avn <- outer(UN[, 1], UN[, 3], "<=")
au <- outer(C[, 1], C[, 2], ">=")
av <- outer(C[, 1], C[, 3], "<=")
auu <- outer(C[, 2], C[, 2], "<=") * 1L
NI <- rep(0, length(UN[,1]))
DI <- NI
for (j in 1:length(UN[,1])){
NI[j]=sum(as.numeric(C[,2]<=UN[j,1]&UN[j,1]<=C[,1]))} #size of risk sets, left-trunc only
for (j in 1:length(UN[,1])){
DI[j]=sum(as.numeric(UN[j,1]==C[,1]))}
ZI<-length(which(DI/NI==1))
J<-au*av
JUN <- aun * avn
SC <- colSums(JUN)
SC2<-rowSums(JUN)
ad <- length(which(SC == 1))
add <- length(which(SC2 == 1))
if (ad != 0 | add!=0 | ZI !=1){
#if (my_debug)
cat("Warning. Non-uniqueness or no existence of the NPMLE", "\n")
}
NN<-as.vector(rep(table(C[,1]), table(C[,1])))#####
h0<-NN/NJ#####
multh <- tabulate(match(C[,1],unique(C[,1]))) #### NOVO
if(sum(multh)==length(unique(C[,1]))){
hh0 <- (h0)}
if(sum(multh)>length(unique(C[,1]))){
weigthh<-h0[!duplicated(C[,1])]
hh0<- (weigthh)} ###NOVO
L<-length(unique(C[,1]))
#G0<-matrix(data=0,ncol=1,nrow=nrow(C))
#G0[1,1]<-1
#for(j in 2:nrow(C)){
#G0[j,1]<-exp(sum(log(1-h0[1:(j-1),1])))
#}
g0<-matrix(data=0,ncol=1,nrow=L)
g0[1,1]<-1
for(j in 2:L){
g0[j,1]<-exp(sum(log(1-hh0[1:(j-1)])))
}
multh <- tabulate(match(C[,1],unique(C[,1])))
weigtgg<-rep(g0,multh)
G0<- (weigtgg)
f0<-matrix(data=G0[nrow(C)],ncol=1,nrow=nrow(C))
for(j in 1:nrow(C)-1){
f0[j,1]<-(G0[j]-G0[j+1])
}
Gvi0<-matrix(data=0,ncol=1, nrow=nrow(C))
for(j in 1:nrow(C)){
auxi<-0
for (k in 1:nrow(C)){
if (C[j,3]< C[k,1]) {auxi<-sum(f0[k,])+ auxi}
}
Gvi0[j,]<-auxi
}
F0<-t(J)%*%f0
Q0<-Gvi0/F0
NN<-as.vector(rep(table(C[,1]), table(C[,1])))
h<-h0
for(i in 1:length(h0)){
h[i,]<-NN[i]/(NJ[i,]+(J[i,])%*%Q0)
}
#for(i in 1:nrow(h0)){
#h[i,]<- 1/(NJ[i,]+(J[i,])%*%Q0)
#}
multh <- tabulate(match(C[,1],unique(C[,1])))
if(sum(multh)==length(unique(C[,1]))){
hh1 <- (h)}
if(sum(multh)>length(unique(C[,1]))){
weigthhh<-h[!duplicated(C[,1])]
hh1<- (weigthhh)}
L<-length(unique(C[,1]))
hh1<-as.matrix(hh1)
S0<-1
if(is.na(error)==TRUE) error<-1e-6
if(is.na(nmaxit)==TRUE)nmaxit<-1000000
iter<-0
while(S0>error|iter>nmaxit){
iter<-iter+1
if (iter>nmaxit) stop("Default number of iterations not enough for convergence")
#G1<-matrix(data=0,ncol=1,nrow=nrow(C))
#G1[1,1]<-1
#for(j in 2:nrow(C)){
#G1[j,1]<-exp(sum(log(1-h[1:(j-1),1])))
#}
g1<-matrix(data=0,ncol=1,nrow=L)
g1[1,1]<-1
for(j in 2:L){
g1[j,1]<-exp(sum(log(1-hh1[1:(j-1),1])))
}
multh <- tabulate(match(C[,1],unique(C[,1])))
weigtggg<-rep(g1,multh)
G1<- as.matrix(weigtggg)
f<-matrix(data=G1[nrow(C),1],ncol=1,nrow=nrow(C))
for(j in 1:nrow(C)-1){
f[j,1]<-(G1[j,1]-G1[j+1,1])
f[nrow(C),1]<-1-sum(f[1:nrow(C)-1,1])
}
Gvi1<-matrix(data=0,ncol=1, nrow=nrow(C))
for(j in 1:nrow(C)){
auxi<-0
for (k in 1:nrow(C)){
if (C[j,3]< C[k,1]) {auxi<-sum(f[k,])+ auxi}
}
Gvi1[j,]<-auxi
}
F0<-t(J)%*%f
Q0<-Gvi1/F0
for(i in 1:nrow(h)){
h[i,]<- NN[i]/(NJ[i,]+(J[i,])%*%Q0)
}
multh <- tabulate(match(C[,1],unique(C[,1])))
if(sum(multh)==length(unique(C[,1]))){
hh1 <- (h)}
if(sum(multh)>length(unique(C[,1]))){
weigthhh<-h[!duplicated(C[,1])]
hh1<- (weigthhh)}
hh1<-as.matrix(hh1)
S0<-max(abs(f-f0))
f0<-f
}
indbb<-seq(1,nrow(C),by=1)
indbb9<-seq(1,nrow(C),by=1)
kk0b<-numeric(nrow(C))
for(i in 1:nrow(C)){
indbb9<-(C[,1]==C[i,1])
pos9<-min(which(indbb9==TRUE))
if(pos9==1){
kk0b[indbb9]<-sum(f[indbb9])}
if(pos9>1){
kk0b[indbb9]<-sum(f[indbb9])
}
}
mult4 <- tabulate(match(C[,1],unique(C[,1])))
if(sum(mult4)==length(unique(C[,1]))){
Fval <- (kk0b)}
if(sum(mult4)>length(unique(C[,1]))){
weigth4<-kk0b[!duplicated(C[,1])]
Fval<- (weigth4)}
hh0b<-numeric(nrow(C))
for(i in 1:nrow(C)){
indbb<-(C[,1]==C[i,1])
pos<-min(which(indbb==TRUE))
if(pos==1){
hh0b[indbb]<-sum(h[indbb])}
if(pos>1){
hh0b[indbb]<-sum(h[indbb])
}
}
mult5 <- tabulate(match(C[,1],unique(C[,1])))
if(sum(mult5)==length(unique(C[,1]))){
hval <- (hh0b)}
if(sum(mult5)>length(unique(C[,1]))){
weigth5<-hh0b[!duplicated(C[,1])]
hval<- (weigth5)}
x<-unique(C[,1])
events<-sum(mult4)
n.event<-mult4
#f<-Fval
#h<-hval
FF<-cumsum(Fval)
FFF<-cumsum(f) # do cumsum without ties
Sob <- 1 - FF + Fval
Sob[Sob < 1e-12] <- 0
Sob0<-1-FFF
Sob00<-1-FF
Sob[Sob<1e-12]<-0
Sob0[Sob0<1e-12]<-0
Sob00[Sob00<1e-12]<-0
if (boot==TRUE){
if (is.na(B)==TRUE) B<-500
if(B<40){
cat("Warning. Number of replicates less than 40","\n")
cat("Confidence bands cannot be computed","\n")
}
if(trunc=="double"|trunc=="left"){
########################################
# PARALELL BOOTSTARP BOTH
########################################
if(!requireNamespace("foreach")){
install.packages("foreach")
}
if(!requireNamespace("doParallel")){
install.packages("doParallel")
}
cores=detectCores()
if (cores[1] > 1) cl <- makeCluster(cores[1]-1, type = "PSOCK")
else cl <- makeCluster(cores[1], type = "PSOCK")
registerDoParallel(cl)
########################################
# Start of parallel state both 500 iteractions B = 500
final_boot <- foreach(i=1:B, .combine='rbind') %dopar% {
# dont forget to put code repeat
## Preallocation Local to the core (no B indexing)
#preallocate out internal matrices and variables (each core must have its own copy) no B
n_sampling_tries <- 0
# container for bootstrap operations
M1b <- matrix(0, nrow = nrow(C), ncol = ncol(C)) # usado dentro do loop
M2b <- matrix(0, nrow = nrow(C), ncol = ncol(C)) # usado dentro do loop
# container for bootstrap operations
M_IF0<-matrix(0,nrow=nrow(C))
M_IF01<-matrix(0,nrow=nrow(C))
M_IF0Sob<-matrix(0,nrow=nrow(C))
ind<-seq(1,nrow(C),by=1)
indbb<-seq(1,nrow(C),by=1)
indbb1<-seq(1,nrow(C),by=1)
# repeat sample if condition not met
repeat{
# get the sample
indb <- sample(ind, nrow(C), replace = TRUE)
M1b <- C[indb,]
########################################
# ordenaƧao or ordering zone
########################################
ord <- order(M1b[, 1], method = "auto")
M2b[, 1] <- sort(M1b[, 1], method = "auto")
M2b[, 2:ncol(M1b)] <- M1b[ord, 2:ncol(M1b)]
NJb<-matrix(data=0,ncol=1,nrow=nrow(C))
Kb<-NJb
#for(j in 1:nrow(C)){
#for(k in 1:nrow(C)){
#if (M2b[k,2]<=M2b[j,1]& M2b[k,1]>=M2b[j,1]) {NJb[j,1]<-NJb[j,1]+1}
#}}
ar1b<-outer(M2b[, 2], M2b[, 1], "<=")
ar2b<-outer(M2b[, 1], M2b[, 1], ">=")
AZb<-ar1b*ar2b
NJb<-as.matrix(colSums(AZb))
Kb[,1]<-rep(1,length=nrow(C))
mNJb<-min(NJb[1:nrow(C)-1,1])
if (mNJb!=1) {Kb[,1]<-NJb[,1]}
if (mNJb==1){
istarb<-max(which(NJb[1:nrow(C)-1,1]==1))
Kb[1:istarb,1]<-2
if(istarb<nrow(M2b)){Kb[(istarb+1):nrow(M2b),1]<-NJb[(istarb+1):nrow(M2b),1]}
}
NJb<-as.matrix(apply(cbind(NJb,Kb),1,max),ncol=1)
# preallocate
Aun<-unique(M2b)
Jb <- matrix(data = 0,ncol = nrow(M2b), nrow = nrow(M2b))
aub <- outer(M2b[, 1], M2b[, 2], ">=")
aubun <- outer(Aun[, 1], Aun[, 2], ">=")
avb <- outer(M2b[, 1], M2b[, 3], "<=")
avbun<-outer(Aun[, 1], Aun[, 3], "<=")
auub <- outer(M2b[, 2], M2b[, 2], "<=") * 1L
NIb <- rep(0, length(Aun[,1]))
DIb <- NIb
for (j in 1:length(Aun[,1])){
NIb[j]=sum(as.numeric(M2b[,2]<=Aun[j,1]&Aun[j,1]<=M2b[,1]))} #size of risk sets, left-trunc only
for (j in 1:length(Aun[,1])){
DIb[j]=sum(as.numeric(Aun[j,1]==M2b[,1]))}
ZIb<-length(which(DIb/NIb==1))
Jb <- aub * avb
Jbun<-aubun*avbun
#SCb <- apply(Jbun, 2, "sum")
SCb <-colSums(Jbun)
SCb2<-rowSums(Jbun)
adb <- length(which(SCb == 1))
adbb <- length(which(SCb2 == 1))
n_sampling_tries <- n_sampling_tries + 1 # counter for number of tries
# if the condition is set, we break the repat, otherwise repeat sampling process
if (adb == 0 & adbb==0 & ZIb ==1)
break
else
cat("Warning. Non-uniqueness or no existence of the NPMLE - New Round","\n")
}
## End os sample repeat
#Jb<-matrix(data=0,ncol=nrow(M2b),nrow=nrow(M2b))
#for (k in 1:nrow(M2b)){
#for(j in 1:nrow(M2b)) {
#a2<-min(M2b[j,2],M2b[j,3])
# b2<-max(M2b[j,2],M2b[j,3])
#if(M2b[k,1]>=a2 & M2b[k,1]<=b2) Jb[k,j]<-1
#}}
NNb<-as.vector(rep(table(M2b[,1]), table(M2b[,1])))#####
h0b<-NNb/NJb#####
multhb <- tabulate(match(M2b[,1],unique(M2b[,1]))) #### NOVO
if(sum(multhb)==length(unique(M2b[,1]))){
hh0b <- (h0b)}
if(sum(multhb)>length(unique(M2b[,1]))){
weigthhb<-h0b[!duplicated(M2b[,1])]
hh0b<- (weigthhb)} ###NOVO
Lb<-length(unique(M2b[,1]))
#G0b<-matrix(data=0,ncol=1,nrow=nrow(C))
#G0b[1,1]<-1
#for(j in 2:nrow(C)){
#G0b[j,1]<-exp(sum(log(1-h0b[1:(j-1),1])))
#}
g0b<-matrix(data=0,ncol=1,nrow=Lb)
g0b[1,1]<-1
for(j in 2:Lb){
g0b[j,1]<-exp(sum(log(1-hh0b[1:(j-1)])))
}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
weigtggb<-rep(g0b,multhb)
G0b<- as.matrix(weigtggb)
f0b<-matrix(data=G0b[nrow(C),1],ncol=1,nrow=nrow(C))
for(j in 1:nrow(C)-1){
#f0[j,1]<-(G0b[j,1]-G0b[j+1,1])
f0b[j,1]<-(G0b[j,1]-G0b[j+1,1])
}
Gvi0b<-matrix(data=0,ncol=1, nrow=nrow(C))
for(j in 1:nrow(C)){
auxib<-0
for (k in 1:nrow(C)){
if (M2b[j,3]< M2b[k,1]) {auxib<-sum(f0b[k,])+ auxib}
}
Gvi0b[j,]<-auxib
}
F0b<-t(Jb)%*%f0b
Q0b<-Gvi0b/F0b
NNb<-as.vector(rep(table(M2b[,1]), table(M2b[,1])))
h1b<-h0b
for(i in 1:length(h0b)){
h1b[i,]<-NNb[i]/(NJb[i,]+(Jb[i,])%*%Q0b)
}
#h1b<-h0b
#for(i in 1:nrow(h0b)){
#h1b[i,]<- 1/(NJb[i,]+(Jb[i,])%*%Q0b)
#}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
if(sum(multhb)==length(unique(M2b[,1]))){
hh1b <- (h1b)}
if(sum(multhb)>length(unique(M2b[,1]))){
weigthhhb<-h1b[!duplicated(M2b[,1])]
hh1b<- (weigthhhb)}
Lb<-length(unique(M2b[,1]))
hh1b<-as.matrix(hh1b)
S0b<-1
if(is.na(error)==TRUE) error<-1e-6
if(is.na(nmaxit)==TRUE)nmaxit<-1000000000000000000000
iterb<-0
while(S0b>error|iterb>nmaxit){
iterb<-iterb+1
if (iterb>nmaxit) stop("Default number of iterations not enough for convergence")
#G1b<-matrix(data=0,ncol=1,nrow=nrow(C))
#G1b[1,1]<-1
#for(j in 2:nrow(C)){
#G1b[j,1]<-exp(sum(log(1-h1b[1:(j-1),1])))
#}
g1b<-matrix(data=0,ncol=1,nrow=Lb)
g1b[1,1]<-1
for(j in 2:Lb){
g1b[j,1]<-exp(sum(log(1-hh1b[1:(j-1),1])))
}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
weigtgggb<-rep(g1b,multhb)
G1b<- as.matrix(weigtgggb)
f1b<-matrix(data=G1b[nrow(C),1],ncol=1,nrow=nrow(C))
for(j in 1:nrow(C)-1){
f1b[j,1]<-(G1b[j,1]-G1b[j+1,1])
f1b[nrow(C),1]<-1-sum(f1b[1:nrow(C)-1,1])
}
Gvi1b<-matrix(data=0,ncol=1, nrow=nrow(C))
for(j in 1:nrow(C)){
auxib<-0
for (k in 1:nrow(C)){
if (M2b[j,3]< M2b[k,1]) {auxib<-sum(f1b[k,])+ auxib}
}
Gvi1b[j,]<-auxib
}
F0b<-t(Jb)%*%f1b
Q0b<-Gvi1b/F0b
for(i in 1:length(h1b)){
h1b[i,]<- NNb[i]/(NJb[i,]+(Jb[i,])%*%Q0b)
}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
if(sum(multhb)==length(unique(M2b[,1]))){
hh1b <- (h1b)}
if(sum(multhb)>length(unique(M2b[,1]))){
weigthhhb<-h1b[!duplicated(M2b[,1])]
hh1b<- (weigthhhb)}
hh1b<-as.matrix(hh1b)
S0b<-max(abs(f1b-f0b))
f0b<-f1b
}
####return(list( f0b, f1b, hh1b, F0b))
###}
ff0b<-numeric(nrow(C))
for(i in 1:nrow(C)){
indbb1<-(C[,1]==C[i,1])
pos1<-min(which(indbb1==TRUE))
if(pos1==1){
ff0b[indbb1]<-sum(f1b[indbb1])}
if(pos1>1){
ff0b[indbb1]<-sum(f1b[indbb1])
}
}
FF0b<-numeric(nrow(C))
for(i in 1:nrow(C)){
indbb<-(C[,1]== C[i,1])
pos<-min(which(indbb==TRUE))
if(pos==1){
FF0b[indbb]<-sum(f1b[indbb])}
if(pos>1){
FF0b[indbb]<-sum(f1b[indbb])+FF0b[pos-1]
}
}
Sobb<-1-FF0b+ff0b
Sobb[Sobb<1e-12]<-0
Sobb <- 1 - FF0b + ff0b
Sobb[Sobb < 1e-12] <- 0
# SAVE start saving stufs (before indexed to b index)
M_IF0 <- as.vector(FF0b)
M_IF01 <- as.vector(ff0b)
M_IF0Sob <- as.vector(Sobb)
return(list( M_IF0, M_IF01, M_IF0Sob, n_sampling_tries))
# End of parallel state both
########################################
}
#stop cluster
stopCluster(cl)
# computation of the B aggegated results r comes as a list concatenated as row (thsi enables any size lists)
# preallocate the original ones as matrix a,d put the list indexing
############################################
n_sampling_tries <- 0
M_IF0 <- matrix(0, nrow = nrow(C), ncol = B)
M_IF01 <- matrix(0, nrow = nrow(C), ncol = B)
M_IF0Sob <- matrix(0, nrow = nrow(C), ncol = B)
stderror<-matrix(0, nrow = nrow(C), ncol = 1)
BootRepeat<-matrix(0,ncol=B)
###########################################
###########################################
# Now convert back to the indices from the array list of
# TODO
###########################################
for(b in 1:B){
M_IF0[,b]<-as.numeric(unlist(final_boot[b,1]))
M_IF01[,b]<-as.numeric(unlist(final_boot[b,2]))
M_IF0Sob[,b]<-as.numeric(unlist(final_boot[b,3]))
BootRepeat[,b]<-as.numeric((unlist(final_boot[b,4])))
}
stderror<-apply(M_IF0,1,sd)
}
if(trunc=="right"){
########################################
# PARALELL BOOTSTARP BOTH
########################################
if(!requireNamespace("foreach")){
install.packages("foreach")
}
if(!requireNamespace("doParallel")){
install.packages("doParallel")
}
cores=detectCores()
if (cores[1] > 1) cl <- makeCluster(cores[1]-1, type = "PSOCK")
else cl <- makeCluster(cores[1], type = "PSOCK")
registerDoParallel(cl)
########################################
# Start of parallel state both 500 iteractions B = 500
final_boot <- foreach(i=1:B, .combine='rbind') %dopar% {
# dont forget to put code repeat
## Preallocation Local to the core (no B indexing)
#preallocate out internal matrices and variables (each core must have its own copy) no B
n_sampling_tries <- 0
# container for bootstrap operations
M1b <- matrix(0, nrow = nrow(C), ncol = ncol(C)) # usado dentro do loop
M2b <- matrix(0, nrow = nrow(C), ncol = ncol(C)) # usado dentro do loop
# container for bootstrap operations
M_IF0<-matrix(0,nrow=nrow(C))
M_IF01<-matrix(0,nrow=nrow(C))
M_IF0Sob<-matrix(0,nrow=nrow(C))
ind<-seq(1,nrow(C),by=1)
indbb2<-seq(1,nrow(C),by=1)
indbbb<-seq(1,nrow(C),by=1)
# repeat sample if condition not met
repeat{
# get the sample
indb <- sample(ind, nrow(C), replace = TRUE)
M1b <- C[indb,]
########################################
# ordenaƧao or ordering zone
########################################
ord <- order(M1b[, 1], method = "auto")
M2b[, 1] <- sort(M1b[, 1], method = "auto")
M2b[, 2:ncol(M1b)] <- M1b[ord, 2:ncol(M1b)]
NJb<-matrix(data=0,ncol=1,nrow=nrow(C))
Kb<-NJb
#for(j in 1:nrow(C)){
#for(k in 1:nrow(C)){
#if (M2b[k,2]<=M2b[j,1]& M2b[k,1]>=M2b[j,1]) {NJb[j,1]<-NJb[j,1]+1}
#}}
ar1b<-outer(M2b[, 2], M2b[, 1], "<=")
ar2b<-outer(M2b[, 1], M2b[, 1], ">=")
AZb<-ar1b*ar2b
NJb<-as.matrix(colSums(AZb))
Kb[,1]<-rep(1,length=nrow(C))
mNJb<-min(NJb[1:nrow(C)-1,1])
if (mNJb!=1) {Kb[,1]<-NJb[,1]}
if (mNJb==1){
istarb<-max(which(NJb[1:nrow(C)-1,1]==1))
Kb[1:istarb,1]<-2
if(istarb<nrow(M2b)){Kb[(istarb+1):nrow(M2b),1]<-NJb[(istarb+1):nrow(M2b),1]}
}
NJb<-as.matrix(apply(cbind(NJb,Kb),1,max),ncol=1)
# preallocate
Aun<-unique(M2b)
Jb <- matrix(data = 0,ncol = nrow(M2b), nrow = nrow(M2b))
aub <- outer(M2b[, 1], M2b[, 2], ">=")
aubun <- outer(Aun[, 1], Aun[, 2], ">=")
avb <- outer(M2b[, 1], M2b[, 3], "<=")
avbun<-outer(Aun[, 1], Aun[, 3], "<=")
auub <- outer(M2b[, 2], M2b[, 2], "<=") * 1L
NIb <- rep(0, length(Aun[,1]))
DIb <- NIb
for (j in 1:length(Aun[,1])){
NIb[j]=sum(as.numeric(M2b[,2]<=Aun[j,1]&Aun[j,1]<=M2b[,1]))} #size of risk sets, left-trunc only
for (j in 1:length(Aun[,1])){
DIb[j]=sum(as.numeric(Aun[j,1]==M2b[,1]))}
ZIb<-length(which(DIb/NIb==1))
Jb <- aub * avb
Jbun<-aubun*avbun
#SCb <- apply(Jbun, 2, "sum")
SCb <-colSums(Jbun)
SCb2<-rowSums(Jbun)
adb <- length(which(SCb == 1))
adbb <- length(which(SCb2 == 1))
n_sampling_tries <- n_sampling_tries + 1 # counter for number of tries
# if the condition is set, we break the repat, otherwise repeat sampling process
if (adb == 0 & adbb==0 & ZIb ==1)
break
else
cat("Warning. Non-uniqueness or no existence of the NPMLE - New Round","\n")
}
## End os sample repeat
#Jb<-matrix(data=0,ncol=nrow(M2b),nrow=nrow(M2b))
#for (k in 1:nrow(M2b)){
#for(j in 1:nrow(M2b)) {
#a2<-min(M2b[j,2],M2b[j,3])
# b2<-max(M2b[j,2],M2b[j,3])
#if(M2b[k,1]>=a2 & M2b[k,1]<=b2) Jb[k,j]<-1
#}}
NNb<-as.vector(rep(table(M2b[,1]), table(M2b[,1])))#####
h0b<-NNb/NJb#####
multhb <- tabulate(match(M2b[,1],unique(M2b[,1]))) #### NOVO
if(sum(multhb)==length(unique(M2b[,1]))){
hh0b <- (h0b)}
if(sum(multhb)>length(unique(M2b[,1]))){
weigthhb<-h0b[!duplicated(M2b[,1])]
hh0b<- (weigthhb)} ###NOVO
Lb<-length(unique(M2b[,1]))
#G0b<-matrix(data=0,ncol=1,nrow=nrow(C))
#G0b[1,1]<-1
#for(j in 2:nrow(C)){
#G0b[j,1]<-exp(sum(log(1-h0b[1:(j-1),1])))
#}
g0b<-matrix(data=0,ncol=1,nrow=Lb)
g0b[1,1]<-1
for(j in 2:Lb){
g0b[j,1]<-exp(sum(log(1-hh0b[1:(j-1)])))
}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
weigtggb<-rep(g0b,multhb)
G0b<- as.matrix(weigtggb)
f0b<-matrix(data=G0b[nrow(C),1],ncol=1,nrow=nrow(C))
for(j in 1:nrow(C)-1){
#f0[j,1]<-(G0b[j,1]-G0b[j+1,1])
f0b[j,1]<-(G0b[j,1]-G0b[j+1,1])
}
Gvi0b<-matrix(data=0,ncol=1, nrow=nrow(C))
for(j in 1:nrow(C)){
auxib<-0
for (k in 1:nrow(C)){
if (M2b[j,3]< M2b[k,1]) {auxib<-sum(f0b[k,])+ auxib}
}
Gvi0b[j,]<-auxib
}
F0b<-t(Jb)%*%f0b
Q0b<-Gvi0b/F0b
NNb<-as.vector(rep(table(M2b[,1]), table(M2b[,1])))
h1b<-h0b
for(i in 1:length(h0)){
h1b[i,]<-NNb[i]/(NJb[i,]+(Jb[i,])%*%Q0b)
}
#h1b<-h0b
#for(i in 1:nrow(h0b)){
#h1b[i,]<- 1/(NJb[i,]+(Jb[i,])%*%Q0b)
#}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
if(sum(multhb)==length(unique(M2b[,1]))){
hh1b <- (h1b)}
if(sum(multhb)>length(unique(M2b[,1]))){
weigthhhb<-h1b[!duplicated(M2b[,1])]
hh1b<- (weigthhhb)}
Lb<-length(unique(M2b[,1]))
hh1b<-as.matrix(hh1b)
S0b<-1
if(is.na(error)==TRUE) error<-1e-6
if(is.na(nmaxit)==TRUE)nmaxit<-100
iterb<-0
while(S0b>error|iterb>nmaxit){
iterb<-iterb+1
if (iterb>nmaxit) stop("Default number of iterations not enough for convergence")
#G1b<-matrix(data=0,ncol=1,nrow=nrow(C))
#G1b[1,1]<-1
#for(j in 2:nrow(C)){
#G1b[j,1]<-exp(sum(log(1-h1b[1:(j-1),1])))
#}
g1b<-matrix(data=0,ncol=1,nrow=Lb)
g1b[1,1]<-1
for(j in 2:Lb){
g1b[j,1]<-exp(sum(log(1-hh1b[1:(j-1),1])))
}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
weigtgggb<-rep(g1b,multhb)
G1b<- as.matrix(weigtgggb)
f1b<-matrix(data=G1b[nrow(C),1],ncol=1,nrow=nrow(C))
for(j in 1:nrow(C)-1){
f1b[j,1]<-(G1b[j,1]-G1b[j+1,1])
f1b[nrow(C),1]<-1-sum(f1b[1:nrow(C)-1,1])
}
Gvi1b<-matrix(data=0,ncol=1, nrow=nrow(C))
for(j in 1:nrow(C)){
auxib<-0
for (k in 1:nrow(C)){
if (M2b[j,3]< M2b[k,1]) {auxib<-sum(f1b[k,])+ auxib}
}
Gvi1b[j,]<-auxib
}
F0b<-t(Jb)%*%f1b
Q0b<-Gvi1b/F0b
for(i in 1:nrow(h1b)){
h1b[i,]<- NNb[i]/(NJb[i,]+(Jb[i,])%*%Q0b)
}
multhb <- tabulate(match(M2b[,1],unique(M2b[,1])))
if(sum(multhb)==length(unique(M2b[,1]))){
hh1b <- (h1b)}
if(sum(multhb)>length(unique(M2b[,1]))){
weigthhhb<-h1b[!duplicated(M2b[,1])]
hh1b<- (weigthhhb)}
hh1b<-as.matrix(hh1b)
#for(i in 1:nrow(h1b)){
#h1b[i,]<- 1/(NJb[i,]+(Jb[i,])%*%Q0b)
#}
S0b<-max(abs(f1b-f0b))
f0b<-f1b
}
M2b[,1]<--M2b[,1]
ord2<-order(M2b[,1])
M2b[,1]<-sort(M2b[,1])
E<--C
ord7<-order(E[,1])
E[,1]<-sort(E[,1])
f1b<-f1b[ord2]
FF0b<-numeric(nrow(C))
for(i in 1:nrow(C)){
indbbb<-(E[,1]==E[i,1])
pos1<-min(which(indbbb==TRUE))
if(pos1==1){
FF0b[indbbb]<-sum(f1b[indbbb])}
if(pos1>1){
FF0b[indbbb]<-sum(f1b[indbbb])+FF0b[pos1-1]
}
}
fb<-numeric(nrow(C))
for(i in 1:nrow(C)){
indbb2<-(E[,1]==E[i,1])
pos2<-min(which(indbb2==TRUE))
if(pos2==1){
fb[indbb2]<-sum(f1b[indbb2])}
if(pos2>1){
fb[indbb2]<-sum(f1b[indbb2])
}
}
Sobb<-1-FF0b+fb
Sobb[Sobb<1e-12]<-0
FF0b[FF0b<1e-12]<-0
#Sobb <- 1 - FF0b + ff0b
# SAVE start saving stufs (before indexed to b index)
M_IF0 <- as.vector(FF0b)
M_IF01 <- as.vector(fb)
M_IF0Sob <- as.vector(Sobb)
return(list( M_IF0, M_IF01, M_IF0Sob, n_sampling_tries))
# End of parallel state both
########################################
}
#stop cluster
stopCluster(cl)
# computation of the B aggegated results r comes as a list concatenated as row (thsi enables any size lists)
# preallocate the original ones as matrix a,d put the list indexing
############################################
n_sampling_tries <- 0
M_IF0 <- matrix(0, nrow = nrow(C), ncol = B)
M_IF01 <- matrix(0, nrow = nrow(C), ncol = B)
M_IF0Sob <- matrix(0, nrow = nrow(C), ncol = B)
stderror<-matrix(0, nrow = nrow(C), ncol = 1)
BootRepeat<-matrix(0,ncol=B)
###########################################
###########################################
# Now convert back to the indices from the array list of
# TODO
###########################################
for(b in 1:B){
M_IF0[,b]<-as.numeric(unlist(final_boot[b,1]))
M_IF01[,b]<-as.numeric(unlist(final_boot[b,2]))
M_IF0Sob[,b]<-as.numeric(unlist(final_boot[b,3]))
BootRepeat[,b]<-as.numeric((unlist(final_boot[b,4])))
}
stderror<-apply(M_IF0,1,sd)
}
# this is same as before
M_IF0_sort <- matrix(0, nrow = nrow(C), ncol = B)
for (i in 1:nrow(M_IF0_sort)) {
M_IF0_sort[i,] <- sort(M_IF0[i,])
}
if (is.na(alpha) == TRUE)
alpha <- 0.05
lowerF <- M_IF0_sort[, floor(alpha * B / 2)]
upperF <- M_IF0_sort[, floor((1 - alpha / 2) *
B)]
M_IF0_sort1 <- matrix(0, nrow = nrow(C), ncol = B)
for (i in 1:nrow(M_IF0_sort1)) {
M_IF0_sort1[i,] <- sort(M_IF0Sob[i,])
}
lowerS <- M_IF0_sort1[, floor(alpha * B / 2)]
upperS <- M_IF0_sort1[, floor((1 - alpha / 2) * B)]
} ##############################
# end of bootstrap trucn BOTH
##############################
if(boot==TRUE){
if(trunc=="double"|trunc=="left"){
if((display.F==TRUE)&(display.S==TRUE)){
#x<-C[,1]
dev.new()
par(mfrow=c(1,2))
plot(x,FF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FF[i],x[i+1],FF[i])
segments(x[i+1],FF[i],x[i+1],FF[i+1])
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),0,C[,1][1],0,lty=3)
segments(max(C[,1]),1,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),1,lty=3)
segments(C[,1][1],0,C[,1][1],upperF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],upperF[i],C[i+1,1],upperF[i], lty=3)
segments(C[i+1,1],upperF[i],C[i+1,1],upperF[i+1],lty=3)
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),0,C[,1][1],0,lty=3)
segments(max(C[,1]),1,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),1,lty=3)
segments(C[,1][1],0,C[,1][1],lowerF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],lowerF[i],C[i+1,1],lowerF[i], lty=3)
segments(C[i+1,1],lowerF[i],C[i+1,1],lowerF[i+1],lty=3)
}
plot(x,Sob,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
for(i in 1:(length(x)-1)){
segments(x[i],Sob[i],x[i+1],Sob[i])
segments(x[i+1],Sob[i],x[i+1],Sob[i+1])
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),1,C[,1][1],1,lty=3)
segments(max(C[,1]),0,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),0,lty=3)
segments(max(C[,1]),0,max(C[,1]),min(upperS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],upperS[i],C[i+1,1],upperS[i], lty=3)
segments(C[i+1,1],upperS[i],C[i+1,1],upperS[i+1],lty=3)
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),1,C[,1][1],1,lty=3)
segments(max(C[,1]),0,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),0,lty=3)
segments(max(C[,1]),0,max(C[,1]),min(lowerS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],lowerS[i],C[i+1,1],lowerS[i], lty=3)
segments(C[i+1,1],lowerS[i],C[i+1,1],lowerS[i+1],lty=3)
}
}
if((display.S==FALSE)&(display.F==TRUE)){
dev.new()
plot(x,FF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FF[i],x[i+1],FF[i])
segments(x[i+1],FF[i],x[i+1],FF[i+1])
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),0,C[,1][1],0,lty=3)
segments(max(C[,1]),1,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),1,lty=3)
segments(C[,1][1],0,C[,1][1],upperF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],upperF[i],C[i+1,1],upperF[i], lty=3)
segments(C[i+1,1],upperF[i],C[i+1,1],upperF[i+1],lty=3)
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),0,C[,1][1],0,lty=3)
segments(max(C[,1]),1,max(C[,1])+(max(C[,1])-min(C[,1]))/length(x),1,lty=3)
segments(C[,1][1],0,C[,1][1],lowerF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],lowerF[i],C[i+1,1],lowerF[i], lty=3)
segments(C[i+1,1],lowerF[i],C[i+1,1],lowerF[i+1],lty=3)
}
}
if((display.F==FALSE)&(display.S==TRUE)){
dev.new()
plot(x,Sob,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
for(i in 1:(length(x)-1)){
segments(x[i],Sob[i],x[i+1],Sob[i])
segments(x[i+1],Sob[i],x[i+1],Sob[i+1])
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),1,C[,1][1],1,lty=3)
segments(max(C[,1]),0,max(C[,1])+(max(C[,1])-min(C[,1]))/length(x),0,lty=3)
segments(max(C[,1]),0,max(C[,1]),min(upperS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],upperS[i],C[i+1,1],upperS[i], lty=3)
segments(C[i+1,1],upperS[i],C[i+1,1],upperS[i+1],lty=3)
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(x),1,C[,1][1],1,lty=3)
segments(max(C[,1]),0,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),0,lty=3)
segments(max(C[,1]),0,max(C[,1]),min(lowerS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[i,1],lowerS[i],C[i+1,1],lowerS[i], lty=3)
segments(C[i+1,1],lowerS[i],C[i+1,1],lowerS[i+1],lty=3)
}
}}
if(trunc=="right"){
#x<--unique(C[,1])
x<--C[,1]
#f<-Fval
ord1<-order(x)
x<-sort(x)
mult4<-mult4[ord1]
n.event<-mult4
f<-f[ord1]
FF<-cumsum(Fval)
FFF<-cumsum(f)
FFF[FFF<1e-12]<-0
Sob<-1-FF+Fval
Sob0<-1-FFF+f
h<-f/Sob0
if((display.F==TRUE)&(display.S==TRUE)){
dev.new()
par(mfrow=c(1,2))
C[,1]<--C[order(-C[,1])]
plot(x,FFF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FFF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FFF[i],x[i+1],FFF[i])
segments(x[i+1],FFF[i],x[i+1],FFF[i+1])
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(C[,1]),0,C[,1][1],0,lty=3)
segments(max(C[,1]),1,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),1,lty=3)
segments(min(C[,1]),0,min(C[,1]),upperF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[,1][i],upperF[i],C[,1][i+1],upperF[i], lty=3)
segments(C[,1][i+1],upperF[i],C[,1][i+1],upperF[i+1],lty=3)
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(C[,1]),0,C[,1][1],0,lty=3)
segments(max(C[,1]),1,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),1,lty=3)
segments(min(C[,1]),0,min(C[,1]),lowerF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[,1][i],lowerF[i],C[,1][i+1],lowerF[i], lty=3)
segments(C[,1][i+1],lowerF[i],C[,1][i+1],lowerF[i+1],lty=3)
}
plot(x,Sob0,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
for(i in 1:(length(x)-1)){
segments(x[i],Sob0[i],x[i+1],Sob0[i])
segments(x[i+1],Sob0[i],x[i+1],Sob0[i+1])
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(C[,1]),1,C[,1][1],1,lty=3)
segments(max(C[,1]),0,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),0,lty=3)
segments(max(C[,1]),0,max(C[,1]),min(upperS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[,1][i],upperS[i],C[,1][i+1],upperS[i], lty=3)
segments(C[,1][i+1],upperS[i],C[,1][i+1],upperS[i+1],lty=3)
}
segments(min(C[,1])-(max(C[,1])-min(C[,1]))/length(C[,1]),1,C[,1][1],1,lty=3)
segments(max(C[,1]),0,max(C[,1])+(max(C[,1])-min(C[,1]))/length(C[,1]),0,lty=3)
segments(max(C[,1]),0,max(C[,1]),min(lowerS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(C[,1][i],lowerS[i],C[,1][i+1],lowerS[i], lty=3)
segments(C[,1][i+1],lowerS[i],C[,1][i+1],lowerS[i+1],lty=3)
}
}
if((display.F==FALSE)&(display.S==TRUE)){
dev.new()
par(mfrow=c(1,1))
plot(x,Sob0,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
for(i in 1:(length(x)-1)){
segments(x[i],Sob0[i],x[i+1],Sob0[i])
segments(x[i+1],Sob0[i],x[i+1],Sob0[i+1])
}
segments(min(-C[order(-C[,1])])-(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),1,-C[order(-C[,1])][1],1,lty=3)
segments(max(-C[order(-C[,1])]),0,max(-C[order(-C[,1])])+(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),0,lty=3)
segments(max(-C[order(-C[,1])]),0,max(-C[order(-C[,1])]),min(upperS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(-C[order(-C[,1])][i],upperS[i],-C[order(-C[,1])][i+1],upperS[i], lty=3)
segments(-C[order(-C[,1])][i+1],upperS[i],-C[order(-C[,1])][i+1],upperS[i+1],lty=3)
}
segments(min(-C[order(-C[,1])])-(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),1,-C[order(-C[,1])][1],1,lty=3)
segments(max(-C[order(-C[,1])]),0,max(-C[order(-C[,1])])+(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(x),0,lty=3)
segments(max(-C[order(-C[,1])]),0,max(-C[order(-C[,1])]),min(lowerS), lty=3)
for(i in 1:(length(C[,1])-1)){
segments(-C[order(-C[,1])][i],lowerS[i],-C[order(-C[,1])][i+1],lowerS[i], lty=3)
segments(-C[order(-C[,1])][i+1],lowerS[i],-C[order(-C[,1])][i+1],lowerS[i+1],lty=3)
}
}
if((display.F==TRUE)&(display.S==FALSE)){
dev.new()
par(mfrow=c(1,1))
plot(x,FFF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FFF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FFF[i],x[i+1],FFF[i])
segments(x[i+1],FFF[i],x[i+1],FFF[i+1])
}
segments(min(-C[order(-C[,1])])-(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),0,-C[order(-C[,1])][1],0,lty=3)
segments(max(-C[order(-C[,1])]),1,max(-C[order(-C[,1])])+(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),1,lty=3)
segments(-C[order(-C[,1])][1],0,-C[order(-C[,1])][1],upperF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(-C[order(-C[,1])][i],upperF[i],-C[order(-C[,1])][i+1],upperF[i], lty=3)
segments(-C[order(-C[,1])][i+1],upperF[i],-C[order(-C[,1])][i+1],upperF[i+1],lty=3)
}
segments(min(-C[order(-C[,1])])-(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),0,-C[order(-C[,1])][1],0,lty=3)
segments(max(-C[order(-C[,1])]),1,max(-C[order(-C[,1])])+(max(-C[order(-C[,1])])-min(-C[order(-C[,1])]))/length(C[,1]),1,lty=3)
segments(-C[order(-C[,1])][1],0,-C[order(-C[,1])][1],lowerF[1], lty=3)
for(i in 1:(length(C[,1])-1)){
segments(-C[order(-C[,1])][i],lowerF[i],-C[order(-C[,1])][i+1],lowerF[i], lty=3)
segments(-C[order(-C[,1])][i+1],lowerF[i],-C[order(-C[,1])][i+1],lowerF[i+1],lty=3)
}
}
}
}
if (boot==FALSE|B<40){
x<-C[,1]
if(trunc=="double"|trunc=="left"){
if((display.F==TRUE)&(display.S==TRUE)){
dev.new()
par(mfrow=c(1,2))
plot(x,FFF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FFF[i],x[i+1],FFF[i])
segments(x[i+1],FFF[i],x[i+1],FFF[i+1])
}
plot(x,Sob0,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
segments(x0 = min(x),
x1 = min(x),
y0 = Sob0[1],
y1 = 1)
for(i in 1:(length(x)-1)){
segments(x[i],Sob0[i],x[i+1],Sob0[i])
segments(x[i+1],Sob0[i],x[i+1],Sob0[i+1])
}
}
if((display.S==FALSE)&(display.F==TRUE)){
dev.new()
plot(x,FFF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FFF[i],x[i+1],FFF[i])
segments(x[i+1],FFF[i],x[i+1],FFF[i+1])
}
}
if((display.F==FALSE)&(display.S==TRUE)){
dev.new()
plot(x,Sob0,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
segments(x0 = min(x),
x1 = min(x),
y0 = Sob0[1],
y1 = 1)
for(i in 1:(length(x)-1)){
segments(x[i],Sob0[i],x[i+1],Sob0[i])
segments(x[i+1],Sob0[i],x[i+1],Sob0[i+1])
}
}}
if(trunc=="right"){
#x<--unique(C[,1])
#x<--C[,1]
x<-C[,1]
events<-sum(mult4)
n.event<-mult4
#f<-Fval
if((display.F==TRUE)&(display.S==TRUE)){
dev.new()
par(mfrow=c(1,2))
plot(x,FFF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FFF[i],x[i+1],FFF[i])
segments(x[i+1],FFF[i],x[i+1],FFF[i+1])
}
plot(x,Sob0,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
segments(x0 = min(x),
x1 = min(x),
y0 = Sob0[1],
y1 = 1)
for(i in 1:(length(x)-1)){
segments(x[i],Sob0[i],x[i+1],Sob0[i])
segments(x[i+1],Sob0[i],x[i+1],Sob0[i+1])
}
}
if((display.F==FALSE)&(display.S==TRUE)){
dev.new()
par(mfrow=c(1,1))
plot(x,Sob0,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="Survival", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),1,x[1],1)
segments(max(x),0,max(x)+(max(x)-min(x))/length(x),0)
segments(max(x),0,max(x),min(Sob0))
segments(x0 = min(x),
x1 = min(x),
y0 = Sob0[1],
y1 = 1)
for(i in 1:(length(x)-1)){
segments(x[i],Sob0[i],x[i+1],Sob0[i])
segments(x[i+1],Sob0[i],x[i+1],Sob0[i+1])
}
}
if((display.F==TRUE)&(display.S==FALSE)){
dev.new()
par(mfrow=c(1,1))
plot(x,FFF,ylim=c(0,1),xlim=c(min(x)-(max(x)-min(x))/length(x),max(x)+(max(x)-min(x))/length(x)),type="n",main="CDF", xlab="X",ylab="")
segments(min(x)-(max(x)-min(x))/length(x),0,x[1],0)
segments(max(x),1,max(x)+(max(x)-min(x))/length(x),1)
segments(x[1],0,x[1],FF[1])
for(i in 1:(length(x)-1)){
segments(x[i],FFF[i],x[i+1],FFF[i])
segments(x[i+1],FFF[i],x[i+1],FFF[i+1])
}
}
}
}
cat("n.iterations",iter,"\n")
cat("S0",S0,"\n")
cat("events",events,"\n")
if(boot==TRUE){
cat("B",B,"\n")
cat("alpha",alpha,"\n")
return(invisible(list(n.iterations=iter, events=events, B=B, alpha=alpha,time=C[,1], n.event=mult4, density=round(as.vector(f),5), cumulative.df=round(FFF,5), survival=
round(as.vector(Sob0),5), truncation.probs=round(as.vector(F0),5), hazard=round(as.vector(h),5), NJ=as.vector(NJ), upper.df=round(upperF,5),lower.df=round(lowerF,5),upper.Sob=round(upperS,5),
lower.Sob=round(lowerS,5),sd.boot=round(stderror,5),boot.repeat=as.vector(BootRepeat))))
}
if(boot==FALSE){
return(invisible(list(n.iterations=iter, events=events, time=C[,1], n.event=mult4, density=round(as.vector(f),5), cumulative.df=round(FFF,5), survival=
round(as.vector(Sob0),5), truncation.probs=round(as.vector(F0),5), hazard=round(as.vector(h),5), NJ=as.vector(NJ))))
}
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.