0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

adaptive design methods in clinical trials

Last updated at Posted at 2020-02-08

著書:https://www.amazon.co.jp/Adaptive-Methods-Clinical-Chapman-Biostatistics/dp/1584887761/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=adaptive+design+methods+in+clinical+trials&qid=1581212255&sr=8-1


# adaptive design methods in clinical trials

# p.28

# m;the kinds of protocol amendment

# ns;number of patients

ns=30;m=50;m=m-1

x=matrix(sample(0:1,ns*m,replace=T),ncol=ns)

n=prod(dim(x))

mu_j=apply(x,1,mean)

mu_mu=mean(mu_j)

sigma_mu=mean((mu_j-mu_mu)^2)

sigma=sum((x-c(mu_j))^2)/n

# compatible1

sigma_mu*apply(x,1,sum)

sigma*mu_mu

# compatible2

sigma

sigma_mu*ns

x1=x;m1=m;mu_mu1=mu_mu;sigma1=sigma;sigma_mu1=sigma_mu;ns1=ns;n1=n





ns=30;m=5;m=m-1

x=matrix(sample(0:1,ns*m,replace=T),ncol=ns)

n=prod(dim(x))

mu_j=apply(x,1,mean)

mu_mu=mean(mu_j)

sigma_mu=mean((mu_j-mu_mu)^2)

sigma=sum((x-c(mu_j))^2)/n

# compatible1

sigma_mu*apply(x,1,sum)

sigma*mu_mu

# compatible2

sigma

sigma_mu*ns

x2=x;m2=m;mu_mu2=mu_mu;sigma2=sigma;sigma_mu2=sigma_mu;ns2=ns;n2=n


sigma_p=sigma1*sum(m/ns1)/((m1+1)^2)+sigma_mu1/(m1+1)+sigma2*sum(m/ns2)/((m2+1)^2)+sigma_mu2/(m2+1)

# H0:mu_mu1=mu_mu2~N(0,1)

abs(mu_mu1-mu_mu2)/sigma_p

# H0:mu_mu1-mu_mu2<=delta

delta=0.01

(mu_mu1-mu_mu2-delta)/sigma_p


# 2.4 sample size Adjustment

ns=30;m=50;m=m-1

x=matrix(sample(0:1,ns*m,replace=T),ncol=ns)

n=prod(dim(x))

mu_j=apply(x,1,mean)

mu_mu=mean(mu_j)

sigma_mu=mean((mu_j-mu_mu)^2)

sigma=sum((x-c(mu_j))^2)/n


alpha=0.05;beta=0.05;ep=0.1

fun=function(s){
  
s=abs(s)  
  
return((ep-(qnorm(alpha/2)+qnorm(beta))*(sqrt(2/s)*(sigma+s*sigma_mu/(m+1))))^2)
  
}


value=0.1

h=0.01

ite=100

for(j in 1:ite){
  
f<-fun(value)

df<-(fun(value+h)-fun(value))/h

value=value-1/((df)/f)

print(f)  
  
}

value=abs(value)

# R=4*(sigma+sigma_mu)*(qnorm(1-alpha/2)+qnorm(1-beta))^2/(value*ep^2)

R=(1+sigma_mu/sigma)*(1-4*sigma_mu*(qnorm(1-alpha/2)+qnorm(1-beta))^2/((m+1)*ep^2))


# 2.4.2

ns=30;m=50;m=m-1

x=matrix(sample(0:1,ns*m,replace=T),ncol=ns)

n=prod(dim(x))

mu_j=apply(x,1,mean)

mu_mu=mean(mu_j)

sigma_mu=mean((mu_j-mu_mu)^2)

sigma=sum((x-c(mu_j))^2)/n


alpha=0.05;beta=0.05;ep=1;delta=0.5

fun=function(s){
  
s=abs(s)  
  
return((ep-delta-(qnorm(alpha/2)+qnorm(beta))*(sqrt(2/s)*(sigma+s*sigma_mu/(m+1))))^2)
  
}


value=0.1

eta=0.01

h=0.01

ite=100

for(j in 1:ite){
  
f<-fun(value)

df<-(fun(value+h)-fun(value))/h

value=value-1/((df)/f)

print(f)  
  
}

sigma_mu/((ep-delta)^2)

R=1-sigma_mu*(qnorm(1-alpha)+qnorm(1-beta))^2/((m+1)*(ep-delta)^2)


# 2.4.3

ns=30;m=50;m=m-1

x=matrix(sample(0:1,ns*m,replace=T),ncol=ns)

n=prod(dim(x))

mu_j=apply(x,1,mean)

mu_mu=mean(mu_j)

sigma_mu=mean((mu_j-mu_mu)^2)

sigma=sum((x-c(mu_j))^2)/n


alpha=0.05;beta=0.05;ep=1;delta=0.5

fun=function(s){
  
s=abs(s)  
  
return((delta-ep-(qnorm(alpha/2)+qnorm(beta))*(sqrt(2/s)*(sigma+s*sigma_mu/(m+1))))^2)
  
}


value=0.1

eta=0.01

h=0.01

ite=100

for(j in 1:ite){
  
f<-fun(value)

df<-(fun(value+h)-fun(value))/h

value=value-1/((df)/f)

print(f)  
  
}

sigma_mu/((ep-delta)^2)

R=1-sigma_mu*(qnorm(1-alpha)+qnorm(1-beta))^2/((m+1)*(ep-delta)^2)


# p.38 2.5.1

# m;the kinds of protocol amendment

# ns;number of patients

ns=30;m=50;

x=matrix(sample(0:1,ns*m,replace=T),ncol=ns)

n=prod(dim(x))

mu_j=apply(x,1,mean)

mu_mu=mean(mu_j)

sigma_mu=mean((mu_j-mu_mu)^2)

sigma=sum((x-c(mu_j))^2)/n

# let y_k_bar be the sample mean based on nk clinical data

y_k_bar=c(1)

s_k=c(1)

for(j in 1:(m)){
  
val=rnorm(ns,mu_j[j])

y_k_bar=c(y_k_bar,mean(val))

s_k=c(s_k,var(val))
  
}


X=t(cbind(rep(1,ncol(x)),t(x)))

W=diag(rep(ns,m+1))

beta=solve(t(X)%*%W%*%X)%*%t(X)%*%W%*%y_k_bar

# chisquare-test

s2=sum(ns*s_k)/(sum((m+1)*ns)-(m+1))

qchisq(1-0.05,df=sum((m+1)*ns)-(m+1))

cs=c()

for(j in 1:dim(X)[1]){
  
vec=X[j,]

cs=c(cs,t(vec)%*%solve(t(X)%*%W%*%X)%*%t(t(vec)))
  
}

(c(1,mu_j)-rnorm(length(mu_j)+1,c(1,mu_j)))/as.numeric(sqrt(cs*s2))


# construction of utility function p.94

library(dplyr)
library(stringr)

data(Indometh)

tau=rnorm(nrow(Indometh))

Indometh=data.frame(Indometh,y=rnorm(nrow(Indometh),0.05))

summary=Indometh%>%group_by(Subject)%>%summarise(n=n())

N=max(summary$n)

m=max(as.numeric(Indometh$Subject))

a_mat=array(0,dim=c(m,N))



for(j in 1:m){

sub=Indometh%>%filter(Subject==j)%>%select(-Subject)

r=ifelse(sub$y>tau[j],1,0)

a=rep(1,nrow(sub));x=sub$conc

fun=function(A){

return(sum(r*log(x*A/sum(x*A))+(1-r)*log(1-x*A/sum(x*A))))

}


h=0.01;eta=0.001

pre_val=-100;val=-97

while(abs(pre_val-val)>0.0001){

vec=a;pre_val=fun(a)

for(i in 1:length(a)){

vec_sub=vec;vec_sub[i]=vec_sub[i]+h

if(vec[i]+eta*(fun(vec_sub)-fun(vec))/h>0){

a[i]=vec[i]+eta*(fun(vec_sub)-fun(vec))/h

}}

val=fun(a)

print(fun(a))

}

a_mat[j,c(1:length(a))]=a

}








# p.112

library(dplyr)

data(Indometh)

subjects=sort(unique(Indometh$Subject))

lam=c()

for(i in 1:length(subjects)){

sub=Indometh%>%filter(Subject==subjects[i])

times=sub$time;conc=sub$conc

kai2=function(s){

return(sum((conc-s*exp(-s*times))^2/conc))

}


# 連続値における適合度検定統計量をもとに推定

ite=1000

eta=0.001

h=0.01

lambda=0.1

val_pre=0.11;val=0.1

while(abs(val_pre-val)>10^(-8))({

val_pre=val

lambda=lambda-eta*(kai2(lambda+h)-kai2(lambda))/h

val=kai2(lambda)

print(kai2(lambda))

})

lam=c(lam,lambda)

}

t0=1;ts=1.1

sigma_vec=lam^2/(1-(exp(lam*t0)-1)/(t0*lam*exp(lam*ts)))


stage=5

# number of patients

Nik=matrix(sample(10:30,length(subjects)*stage,replace=T),ncol=stage)

dik=Nik*c((t0-(exp(lam*t0)-1)/(lam*exp(lam*ts)))/t0)

# 2-pairs

delta_mat=array(0,dim=c(length(subjects),length(subjects)))

N_fixed_mat=array(0,dim=c(length(subjects),length(subjects)))

rij=array(0,dim=c(length(subjects),length(subjects)))

alpha=0.05;beta=0.9

for(i in 1:length(subjects)){
for(j in 1:length(subjects)){

delta_mat[i,j]=(lam[i]-lam[j])/sqrt(sigma_vec[i]+sigma_vec[j])

N_fixed_mat[i,j]=(sigma_vec[i]+sigma_vec[j])*(qnorm(1-alpha/2)+qnorm(beta))^2/((lam[i]-lam[j])^2)

}}

# two-samples

N1k=30;N2k=20

d1k=10;d2k=5

r=N2k/N1k

sigma=(N1k+N2k)/(d1k+d2k)

Ik=r*(N1k+N2k)/(sigma*(1+r)^2)

sita=0.1

rnorm(100,sita*Ik,1)

# O'Brien-Fleming

alpha=0.05;s=1;guzai=0.1

a1=2*(1-pnorm(qnorm(alpha)/sqrt(2)))

# Pocock

a2=alpha*log(1+(exp(1)-1)*s)

# Lan-DeMets-Kim

a3=alpha*s^sita

# Hwang-Shih

a4=alpha*(1-exp(guzai*s))/(1-exp(-guzai))



# p.176

library(dplyr)


n=100

ki=sample(0:1,n,replace=T)

Si=sample(c(c(10:100),Inf),n,replace=T)

Yi=sample(10:100,n,replace=T)

delta=sample(0:1,n,replace=T)



dat=data.frame(ki=ki,Si=Si,Yi=Yi,delta=delta)


log_lik=function(param){

sita=param[1];beta=param[2];et=param[3]

value=0

for(j in 1:nrow(dat)){

if(dat$Si[j]==Inf){

value=value+dat$delta[j]*(beta*dat$ki[j]+log(dnorm(exp(beta*dat$ki[j]*dat$Yi[j]))))+(1-dat$delta[j])*log(1-pnorm(exp(beta*dat$ki[j]*dat$Yi[j])))

}else{

val1=dnorm(exp(beta*dat$ki[j])*dat$Si[j]+exp(beta*(1-dat$ki[j]))*exp(et*dat$Si[j])*(dat$Yi[j]-dat$Si[j]))

value=value+dat$delta[j]*(beta*(1-dat$ki[j])+log(ifelse(val1>0,(val1),1)))

val2=1-pnorm(exp(beta*dat$ki[j])*dat$Si[j]+exp(beta*(1-dat$ki[j]))*exp(et*dat$Si[j])*(dat$Yi[j]-dat$Si[j]))

value=value+dat$delta[j]*log(ifelse(val2>0,val2,1))

}

}

return(value)

}


ite=1000

eta=0.00001

h=0.01

parameters=rep(0.0001,3)

for(l in 1:ite){

vec=parameters

for(i in 1:length(vec)){

vec_sub=vec;vec_sub[i]=vec_sub[i]+h

parameters[i]=parameters[i]+eta*(log_lik(vec_sub)-log_lik(vec))/h

}

print(log_lik(parameters))

}


# p.164

n=10;m=5

x=matrix(sample(1:100,n*m,replace=T),ncol=n)

u_hat=apply(x,1,mean)

c=rpois(n,5);c=c-mean(c)

sigma=var(u_hat)

sum(c*u_hat)/sqrt(sigma*sum(c^2/n))



# p.176

n=100

treatment_time=c()

delta=c()

class=5

for(i in 1:class){

time=sample(10:100,1)

treatment_time=c(treatment_time,rpois(n,time))

delta=c(delta,sample(0:1,n,replace=T,prob=c(1/2,1/2)))

}

treat=matrix(treatment_time,ncol=class)

delta=matrix(delta,ncol=class)


log_lik=function(x){

exps=exp(x*treat);exps=t(t(exps)/apply(exps,2,sum))

return(sum(delta*log(exps)))

}


ite=100

eta=0.0001

h=0.01

b=1

for(l in 1:ite){

b=b+eta*(log_lik(b+h)-log_lik(b))/h

print(log_lik(b))

}


# p.177


class=5;n=5

S=sample(10:20,class*n,replace=T)

S_mat=matrix(S,ncol=class)



treatment_time=c()

for(i in 1:class){

time=sample(10:100,1)

treatment_time=c(treatment_time,rpois(n,time))

}

treat=matrix(treatment_time,ncol=class)

delta=matrix(sample(0:1,n*class*class,replace=T),ncol=class)



log_lik=function(x){

beta=x[1];params=x[-1]

params_mat=matrix(params,ncol=class)

w=exp(cbind(S,S^2)%*%params_mat)

exps=w

for(j in 1:class){

exps[(1+n*(j-1)):(n*j),]=exps[(1+n*(j-1)):(n*j),]*exp(beta*treat)

}

exps=log(t(t(exps)/apply(exps,2,sum)))

return(sum(delta*(exps)))

}


eta2=rep(0.01,2*class)

param=c(c(0.01,eta2))

ite=1000000

eta=10^(-11);h=0.01

for(l in 1:ite){

vec=param

for(j in 1:length(param)){

vec_sub=vec;vec_sub[j]=vec_sub[j]+h

param[j]=param[j]+eta*(log_lik(vec_sub)-log_lik(vec))/h

}

print(log_lik(param))

}

# p.185

library(dplyr)

data(Indometh)

Indometh=Indometh%>%mutate(delta=sample(0:1,nrow(Indometh),replace=T))

n=length(sort(unique(Indometh$Subject)))

t0=min(Indometh$time)

log_lik=function(x){

lam=x

w=c()

for(j in 1:n){

w=c(w,prod(1-lam[j]/lam[-j])^(-1))

}

Fs=c();fs=c()

for(j in 1:nrow(Indometh)){

Fs=c(Fs,(t0+sum((exp(-lam*Indometh$time[j])-exp(-lam*(Indometh$time[j]-t0)))*w/lam))/t0)

fs=c(fs,sum(w*(exp(-lam*(Indometh$time[j]-t0))-exp(-lam*Indometh$time[j])))/t0)

}

Ss=1-Fs;

return(sum(Indometh$delta*log(fs))+sum((1-Indometh$delta)*log(Ss)))

}


param=sample(seq(0.01,1,0.01),n)

ite=1000000

eta=10^(-8);h=0.01

for(l in 1:ite){

vec=param

for(j in 1:length(param)){

vec_sub=vec;vec_sub[j]=vec_sub[j]+h

param[j]=param[j]+eta*(log_lik(vec_sub)-log_lik(vec))/h

}

print(log_lik(param))

}


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?