### Up-and-down dose response study design

Dose response model and biased coin up-and-down design estimating EV90. A simulation study with a boundary condition and addition of auxilliary data points. PAVA estimators and 2 parameter isotonic regression.

Experimental Spreadsheet from study with reporting sheet and random numbers sheet, latter should be blinded during the course of the experiment. The study had a minimum of 25 patients.

`````` #Upper boundary of 30 (mL), steps of 2 (mL)
#Estimat for number of patients
ANTAL<-NULL
MU_1<-NULL
MU_2<-NULL
MU_3<-NULL
EV90<-NULL
library(Iso)
library(drc)
iter<-1
while(iter<=10000){
#MEV
MEV<-0.9
#Start dose
V<-20
#From previous study start dose is probably around MEV92
P<-0.92-(30-V)*0.014
#Defining vectors for simulation
succes<-0
coins<-0
kt<-1
#Increase in dose if failure
dosedeltaNeg<-2
dosedeltaPos<-2
while(V[kt]<30){
coins[kt]<-runif(1)
if(coins[kt]>P[kt]){
#If we observe a failure then increase dosis
succes[kt]<-0
V[kt+1]<-V[kt]+dosedeltaNeg
#We estimate effect a dose increase based on empirical data
P[kt+1]<-P[kt]+0.014
}
else {
#If we do not observe a failure then
#there is a (1-MEV)/MEV probability of a dose decrease
succes[kt]<-1
V[kt+1]<-V[kt]-dosedeltaPos*(runif(1)<=((1-MEV)/MEV))
#We estimate effect a dose decrease based on empirical data
P[kt+1]<-P[kt]+(V[kt+1]-V[kt])*0.014
}
kt<-kt+1
}
V<-c(V[1:(length(V)-1)],rep(30,25))
ssum<-sum(succes)
succes<-c(succes,rep(1,23),0,0)
datf<-data.frame(succes=succes,V=V)
#par(mfrow=c(2,1))
#plot(V,type="l",main=cat("Number of successes:", ssum))
tbl<-aggregate(x=datf\$succes,by=list(datf\$V),FUN=mean)
tbln<-aggregate(x=datf\$succes,by=list(datf\$V),FUN=length)
tbls<-aggregate(x=datf\$succes,by=list(datf\$V),FUN=sum)
tbl\$cnt<-tbln\$x
tbl\$sum<-tbls\$x
#Construction of PAVA estimates
#Volume
tbl\$Group.1
#Isotone regression estimate
isoreg<-pava(y=tbl\$x,w=tbl\$cnt,decreasing=FALSE)
x_mu1<-max((1:dim(tbl)[1])[isoreg<=MEV])
mu1<-tbl\$Group.1[x_mu1]
x_mu2<-which.min(abs(isoreg-MEV))
mu2<-tbl\$Group.1[x_mu2]
mu3<-((MEV-isoreg[x_mu1])/(isoreg[x_mu1+1]-isoreg[x_mu1]))*(tbl\$Group.1[x_mu1+1]-mu1)+mu1
MU_1[iter]<-mu1
MU_2[iter]<-mu2
MU_3[iter]<-mu3
tbl\$id<-rep(1,length(tbl\$cnt))
fourpar <- drm(sum/cnt ~ Group.1, id,weight=cnt,data = tbl, fct = LL2.2(names = c("Slope", "ED90")), type = "binomial")
try(EV90[iter]<-exp(ED(fourpar, c(90), interval = "delta",display="FALSE")[1]),silent="TRUE")
#plot(isoreg,xaxt="n",main=paste("PAVA, mu1:",round(mu1,2),"mu2",round(mu2,2),"mu3",round(mu3,2)),sub=paste("Number of successes:", ssum),xlab="Doses", ylab="EV")
#isoregplot<-pava(y=tbl\$x,w=tbl\$cnt,decreasing=FALSE,stepfun=TRUE)
#axis(1, labels=as.character(tbl\$Group.1), at=1:length(tbl\$Group.1))
ANTAL[iter]<-length(P)
iter<-iter+1
}
summary(ANTAL)
quantile(ANTAL,c(0.9,0.95,0.99),na.rm=TRUE)
summary(MU_3)
quantile(MU_3,c(0.025,0.975),na.rm=TRUE)
#Example plot
par(mfrow=c(2,1))
ssum<-sum(succes)
plot(V,type="l",main=paste("Number of successes:",ssum))
plot(isoreg,xaxt="n",main=paste("PAVA, mu1:",round(mu1,2),"mu2:",round(mu2,2),"mu3:",round(mu3,2)),sub=paste("Number of successes:", ssum),xlab="Doses", ylab="EV")
isoregplot<-pava(y=tbl\$x,w=tbl\$cnt,decreasing=FALSE,stepfun=TRUE)
axis(1, labels=as.character(tbl\$Group.1), at=1:length(tbl\$Group.1))
``````

### Alder/korrekt århundrede udfra cpr nummer

De fleste, der arbejder med registre eller databaser, står ofte med problemstillingen, at alder er uoplyst, medens cpr-nummer er kendt. Hvordan regner man den ud? Følgende regel er gældende: Hvis syvende ciffer er 0, 1, 2 eller 3 er man født i det 20. århunderede (1900-tallet) Ligeledes, hvis syvende ciffer er 4 eller 9, og årstallet (femte og sjette ciffer) er større end eller lig 37. Endelig er man født i det 19. århundrede (1800-tallet) hvis syvende ciffer er 5, 6, 7 eller 8 og årstallet er større end eller lig 58. Nedenfor finder du eksempel i SAS kode: En lille makro, der udover fødselsdato også udregner køn samt den præcise alder givet datovariabel. Kilde: Opbygning af CPR nummeret, cpr.dk proc format library=work; value gender 0="Female" 1="Male" ; run; %macro agefromCPR(cpr,datevar=inddto,birthvar=birth,agevar=age); dy_temp=input(substrn(&cpr,1,2),2.); mt_temp=input(substrn(&cpr,3,2),2.); yr_temp=input(substrn(&cpr,5,2),

### Comorbidity indexes in SQL

Generating Elixhauser comorbidity index from Danish National Health Register as relational database. ( ICD 10 Coding  in SAS) A lookup-table based version of Charlson comorbidity index I made in SQL. A similar approach can be applied to Elixhauser. SELECT V_CPR, MAX(EI1)+MAX(EI2)+MAX(EI3)+MAX(EI4)+MAX(EI5)+ MAX(EI6)+MAX(EI7)+MAX(EI8)+MAX(EI9)+MAX(EI10)+ MAX(EI11)+MAX(EI12)+MAX(EI13)+MAX(EI14)+MAX(EI15)+ MAX(EI16)+MAX(EI17)+MAX(EI18)+MAX(EI19)+MAX(EI20)+ MAX(EI21)+MAX(EI22)+MAX(EI23)+MAX(EI24)+MAX(EI25)+ MAX(EI26)+MAX(EI27)+MAX(EI28)+MAX(EI29)+MAX(EI30)+MAX(EI31) AS Elixhauser FROM (SELECT V_CPR, -- Congestive Heart Failure CASE WHEN DIAG LIKE 'DI099%' OR DIAG LIKE 'DI110%' OR DIAG LIKE 'DI130%' OR DIAG LIKE 'DI132%' OR DIAG LIKE 'DI255%' OR DIAG LIKE 'DI420%' OR DIAG LIKE 'DI425%' OR DIAG LIKE 'DI426%' OR DIAG LIKE 'DI427%' OR DIAG LIKE 'DI428%' OR DIAG LIKE 'DI429%' OR D