Meta inference
*Amiri, S. (2021). Meta inference of Heterogeneous Data Streams. Journal of Biopharmaceutical Statistics, to be appeared *
This work aims to explore the meta inference, where data are being collected from different studies. Providing an accurate estimate of the mean from separate studies is a central aspect of the practical sciences. The source of codes are stored in Github.
#
CM<-function(X){
mean(unlist(lapply(X,mean)))
}
#poolrd mean
PM<-function(X){
mean(unlist(X))
}
# GD estimstor
GD<-function(X){
wgd<-(unlist(lapply(X,length))/unlist(lapply(X,var)) )
wgd<-wgd/sum( wgd)
sum(wgd*unlist(lapply(X,mean)))
}
#MlE estimator
MLE<-function(X){
S00<-unlist(lapply(X,var))
n00<-unlist(lapply(X,length))
xba1<-unlist(lapply(X,mean))
ML0<-function(theta){
theta0<-0
for( i in 1:(length(X))){
theta0<-theta0+sum(n00[i]/2*(log(theta[i+1]^2)+S00[i]/theta[i+1]^2+(xba1[i]-theta[1])^2/theta[i+1]^2))
}
return(theta0)
}
s0<-nlm(ML0, theta <- c(mean(xba1),S00^.5), hessian=TRUE)$estimate[(1:(length(X)))+1]
wgd<-unlist(lapply(X,length))/ s0^2
wgd<-wgd/sum(wgd)
sum(wgd*unlist(lapply(X,mean)))
}
#####
SV<-function(X){
wgd<-(unlist(lapply(X,var))/unlist(lapply(X,length)))
wgd0<-NULL
for( i in 1:(length(X))){ wgd0[i]<-sum(wgd[-i]) }
wgd0<-wgd0/sum(wgd0)
sum(wgd0*unlist(lapply(X,mean)))
}
DGD<-function(X){
xm0<-GD(X)
var1<-function(x) sum((x-xm0)^2)/(length(x)-1)
wgd<-(unlist(lapply(X,length))/unlist(lapply(X,var1)) )
wgd<-wgd/sum( wgd)
sum(wgd*unlist(lapply(X,mean)))
}
DSV<-function(X){
xm0<-SV(X)
var1<-function(x) sum((x-xm0)^2)/(length(x)-1)
wgd<-(unlist(lapply(X,var1))/unlist(lapply(X,length)))
wgd0<-NULL
for( i in 1:(length(X))){ wgd0[i]<-sum(wgd[-i]) }
wgd0<-wgd0/sum(wgd0)
sum(wgd0*unlist(lapply(X,mean)))
}
####################
##################
VDGD<-function(X){
bz<-NULL
for(b in 1:500){
z<-list()
j<-1
for(i in 1:length(X)){
z[[j]]<-sample(X[[i]],replace=TRUE)
j<-j+1
}
bz[b]<-DGD(z)
}
var(bz)
}
VDSV<-function(X){
bz<-NULL
for(b in 1:500){
z<-list()
j<-1
for(i in 1:length(X)){
z[[j]]<-sample(X[[i]],replace=TRUE)
j<-j+1
}
bz[b]<-DSV(z)
}
var(bz)
}
DGDSV<-function(X){
SL0<-which.min(c(VDGD(X),VDSV(X)))
if(SL0==1) res0<-DGD(X)
if(SL0==2) res0<-DSV(X)
return(res0)
}
DGDSV<-function(X){
v1<-VDGD(X)
v2<-VDSV(X)
res0<-DSV(X)*v1/(v1+v2) + DGD(X)*v2/(v1+v2)
return(res0)
}