data

 wideData=reshape(data=data,idvar =  c("subject_accession","visit_name","infant_arm","delivery_mode","arm_name"),
                  timevar = "feature", direction = "wide")

#wideData=wideData[,-c(3:5)]
timepoints=ifelse(wideData$visit_name=="prevaccinated",2,ifelse(wideData$visit_name=="mo4",4,ifelse(wideData$visit_name=="vaccinated",5,9)))

wideData$visit_name=timepoints
wideData=wideData[order(wideData$subject_accession,wideData$visit_name),]
index=which(is.na(wideData),arr.ind = T)
aa=as.numeric(names(which(table(index[,2])>0.1*nrow(wideData))))
fulldata=wideData[,-aa]
fulldata[78,4]="Vaginal Delivery"
fulldata[is.na(fulldata)]<- 0
fulldata[,-c(1:5)]=log10(1+fulldata[,-c(1:5)])
index=which(fulldata$subject_accession==23)
fulldata=fulldata[-index,]

ddd=c()
for (i in c(2,4,5,9)) {
  index=which(fulldata$visit_name==i)
  dd=fulldata[index,]
  dd[,-c(1:5)]=scale(dd[,-c(1:5)],center = TRUE,scale = FALSE)
  ddd=rbind(ddd,dd)
}
fulldata=ddd[order(ddd$subject_accession,ddd$visit_name),]

homogeneous subjects

one-stage model (post vaccination data)

## [1] 0.004961126

two-stage model (full data)

heterogeneous subjects

one-stage model (post vaccination data)

## [1] 0.005670864

two-stage model (full data)