Eggers regression on HNSCC studies

Overall survival

Data entry:

lnHR<-c(0.0953,1.8017,1.2782,1.6351,-0.9676,0.9042,1.2462,1.4351,1.4351,0.4055,0.1301)
seLnHR<-c(2.3828,0.8303,0.7141,0.6841,0.5874,0.481,0.4327,0.3777,0.367,0.2656,0.131)
weights<-1/(seLnHR^2)
HNSCC_OS<-data.frame(lnHR,seLnHR,weights)

Perform linear fit:

Eggers.fit<-lm(lnHR~seLnHR,data=HNSCC_OS,weights=weights)
summary(Eggers.fit)
## 
## Call:
## lm(formula = lnHR ~ seLnHR, data = HNSCC_OS, weights = weights)
## 
## Weighted Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.4122 -0.6526  0.1010  0.8634  2.1077 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.03694    0.27754   0.133   0.8970  
## seLnHR       1.70201    0.85816   1.983   0.0786 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.692 on 9 degrees of freedom
## Multiple R-squared:  0.3041, Adjusted R-squared:  0.2268 
## F-statistic: 3.934 on 1 and 9 DF,  p-value: 0.07864

Confidence interval:

confint(Eggers.fit)
##                  2.5 %    97.5 %
## (Intercept) -0.5908923 0.6647766
## seLnHR      -0.2392793 3.6432959

Display fit with raw data and make publication-quality plot (for supplements):

library(ggplot2)

#labels:
annotation <- data.frame(x = 1.5, y = 2.8,label = c("Eggers regression"))
metaAnalysisEstimate=1.62
upperMA=1.96
lowerMA=1.33

p<- ggplot(HNSCC_OS, aes(x=seLnHR, y=lnHR))+annotate("rect", xmin=c(0,0), xmax=c(max(seLnHR)+0.01,max(seLnHR)+0.01), ymin=c(log(lowerMA),log(lowerMA)) , ymax=c(log(upperMA),log(upperMA)), alpha=0.2, fill="darkblue") + geom_errorbar(aes(ymin=lnHR-1.96*seLnHR, ymax=lnHR+1.96*seLnHR)) + geom_point() + geom_hline(yintercept=log(metaAnalysisEstimate),color="darkblue") + geom_hline(yintercept=0,color="black")+geom_smooth(method = "lm", fullrange=TRUE,mapping = aes(weight = weights), color = "darkred", show.legend = TRUE)+xlab("Standard error of lnHR estimate")+coord_cartesian(xlim=c(0,max(seLnHR)+0.01),ylim =c(-1,4))+ylab("Log HR estimate")+geom_text(x=annotation$x, y=log(metaAnalysisEstimate)+0.1, label="Meta analysis estimate",color="darkblue",size=4)+theme_bw()

p+geom_text(data=annotation,aes( x=x, y=y, label=label),color="darkred",size=4 , angle=32, fontface="bold" )
## `geom_smooth()` using formula 'y ~ x'

DFS

Data entry:

lnHR<-c(3.2867,2.3389,1.6582,1.8718,1.3083,0.8961,1.1314,-1.204,1.0647,-0.1985,0.929,-0.2231,0.8796,0.6419,0.6931,-0.005,0.4055,0.2927,0.0488)
seLnHR<-c(3.0432,1.0778,0.6824,0.6661,0.5947,0.5841,0.519,0.4667,0.4436,0.4222,0.4147,0.4132,0.4054,0.3292,0.2567,0.2506,0.1771,0.1256,0.1109)
weights<-1/(seLnHR^2)
HNSCC_DFS<-data.frame(lnHR,seLnHR,weights)

Perform linear fit:

Eggers.fit<-lm(lnHR~seLnHR,data=HNSCC_DFS,weights=weights)
summary(Eggers.fit)
## 
## Call:
## lm(formula = lnHR ~ seLnHR, data = HNSCC_DFS, weights = weights)
## 
## Weighted Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0311 -0.6513  0.7236  0.9222  1.3487 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -0.01578    0.15299  -0.103   0.9191  
## seLnHR       1.48506    0.57114   2.600   0.0187 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.474 on 17 degrees of freedom
## Multiple R-squared:  0.2845, Adjusted R-squared:  0.2424 
## F-statistic: 6.761 on 1 and 17 DF,  p-value: 0.01867

Confidence interval:

confint(Eggers.fit)
##                  2.5 %    97.5 %
## (Intercept) -0.3385646 0.3070105
## seLnHR       0.2800510 2.6900676

Display fit with raw data and make publication-quality plot (for supplements):

#labels:
annotation <- data.frame(x = 2, y = 3.105,label = c("Eggers regression"))
metaAnalysisEstimate=1.36
upperMA=1.53
lowerMA=1.20

p<- ggplot(HNSCC_DFS, aes(x=seLnHR, y=lnHR))+annotate("rect", xmin=c(0,0), xmax=c(max(seLnHR)+0.01,max(seLnHR)+0.01), ymin=c(log(lowerMA),log(lowerMA)) , ymax=c(log(upperMA),log(upperMA)), alpha=0.2, fill="darkblue") + geom_errorbar(aes(ymin=lnHR-1.96*seLnHR, ymax=lnHR+1.96*seLnHR)) + geom_point() + geom_hline(yintercept=log(metaAnalysisEstimate),color="darkblue") + geom_hline(yintercept=0,color="black")+geom_smooth(method = "lm", fullrange=TRUE,mapping = aes(weight = weights), color = "darkred", show.legend = TRUE)+xlab("Standard error of lnHR estimate")+coord_cartesian(xlim=c(0,max(seLnHR)+0.01),ylim =c(-1,4))+ylab("Log HR estimate")+geom_text(x=annotation$x, y=log(metaAnalysisEstimate)+0.2, label="Meta analysis estimate",color="darkblue",size=4)+theme_bw()

p+geom_text(data=annotation,aes( x=x, y=y, label=label),color="darkred",size=4 , angle=28, fontface="bold" )
## `geom_smooth()` using formula 'y ~ x'

Eggers regression on NSCLC studies

Overall survival

Data entry:

lnHR<-c(0.2624,1.6864,0.793,0.6729,1.1939,0.9002,1.4351,-0.5108,0.8329,0.9555,-0.1985,0.8329,0.2231,0.7372,1.0296,0.6366,0.0944,0.5878,0.174,0.2311,0.077,0.0488,0.045)
seLnHR<-c(0.8463,0.7771,0.4835,0.4807,0.4422,0.4391,0.4349,0.4222,0.4207,0.4032,0.3744,0.3485,0.341,0.3336,0.312,0.2934,0.2697,0.2636,0.1513,0.1127,0.0393,0.0372,0.0185)
weights<-1/(seLnHR^2)
NSCLC_OS<-data.frame(lnHR,seLnHR,weights)

Perform linear fit:

Eggers.fit<-lm(lnHR~seLnHR,data=NSCLC_OS,weights=weights)
summary(Eggers.fit)
## 
## Call:
## lm(formula = lnHR ~ seLnHR, data = NSCLC_OS, weights = weights)
## 
## Weighted Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.8206 -0.5493  0.3631  0.5970  1.6899 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.01178    0.01981   0.595    0.558    
## seLnHR       1.58287    0.27841   5.685 1.21e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.14 on 21 degrees of freedom
## Multiple R-squared:  0.6062, Adjusted R-squared:  0.5874 
## F-statistic: 32.32 on 1 and 21 DF,  p-value: 1.212e-05

Confidence interval:

confint(Eggers.fit)
##                   2.5 %     97.5 %
## (Intercept) -0.02941577 0.05298571
## seLnHR       1.00388803 2.16184907

Display fit with raw data and make publication-quality plot (for supplements):

#labels:
annotation <- data.frame(x = 0.65, y = 1.3,label = c("Eggers regression"))
metaAnalysisEstimate=1.07
upperMA=1.1
lowerMA=1.04

p<- ggplot(NSCLC_OS, aes(x=seLnHR, y=lnHR))+annotate("rect", xmin=c(0,0), xmax=c(max(seLnHR)+0.01,max(seLnHR)+0.01), ymin=c(log(lowerMA),log(lowerMA)) , ymax=c(log(upperMA),log(upperMA)), alpha=0.2, fill="darkblue") + geom_errorbar(aes(ymin=lnHR-1.96*seLnHR, ymax=lnHR+1.96*seLnHR)) + geom_point() + geom_hline(yintercept=log(metaAnalysisEstimate),color="darkblue") + geom_hline(yintercept=0,color="black")+geom_smooth(method = "lm", fullrange=TRUE,mapping = aes(weight = weights), color = "darkred", show.legend = TRUE)+xlab("Standard error of lnHR estimate")+coord_cartesian(xlim=c(0,max(seLnHR)+0.01),ylim =c(-1,4))+ylab("Log HR estimate")+geom_text(x=annotation$x, y=log(metaAnalysisEstimate)+0.2, label="Meta analysis estimate",color="darkblue",size=4)+theme_bw()

p+geom_text(data=annotation,aes( x=x, y=y, label=label),color="darkred",size=4 , angle=10, fontface="bold" )
## `geom_smooth()` using formula 'y ~ x'

DFS

Data entry:

lnHR<-c(1.7817,1.026,1.4586,0.9555,0.8755,0.1398,0.6152,0.7514,0.0218,0.131,0.0953,0.2776,0.3001)
seLnHR<-c(0.6906,0.4728,0.442,0.4324,0.4271,0.3882,0.3728,0.3463,0.3109,0.2621,0.1869,0.1192,0.1159)
weights<-1/(seLnHR^2)
NSCLC_DFS<-data.frame(lnHR,seLnHR,weights)

Perform linear fit:

Eggers.fit<-lm(lnHR~seLnHR,data=NSCLC_DFS,weights=weights)
summary(Eggers.fit)
## 
## Call:
## lm(formula = lnHR ~ seLnHR, data = NSCLC_DFS, weights = weights)
## 
## Weighted Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.6525 -1.2318  0.4521  0.5286  1.5917 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.01501    0.13227   0.113   0.9117  
## seLnHR       1.67438    0.57191   2.928   0.0137 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.071 on 11 degrees of freedom
## Multiple R-squared:  0.438,  Adjusted R-squared:  0.3869 
## F-statistic: 8.571 on 1 and 11 DF,  p-value: 0.01375

Confidence interval:

confint(Eggers.fit)
##                  2.5 %    97.5 %
## (Intercept) -0.2761108 0.3061296
## seLnHR       0.4156187 2.9331354

Display fit with raw data and make publication-quality plot (for supplements):

#labels:
annotation <- data.frame(x = 0.6, y = 1.2,label = c("Eggers regression"))
metaAnalysisEstimate=1.41
upperMA=1.6
lowerMA=1.25

p<- ggplot(NSCLC_OS, aes(x=seLnHR, y=lnHR))+annotate("rect", xmin=c(0,0), xmax=c(max(seLnHR)+0.1,max(seLnHR)+0.1), ymin=c(log(lowerMA),log(lowerMA)) , ymax=c(log(upperMA),log(upperMA)), alpha=0.2, fill="darkblue") + geom_errorbar(aes(ymin=lnHR-1.96*seLnHR, ymax=lnHR+1.96*seLnHR)) + geom_point() + geom_hline(yintercept=log(metaAnalysisEstimate),color="darkblue") + geom_hline(yintercept=0,color="black")+geom_smooth(method = "lm", fullrange=TRUE,mapping = aes(weight = weights), color = "darkred", show.legend = TRUE)+xlab("Standard error of lnHR estimate")+coord_cartesian(xlim=c(0,0.7),ylim =c(-1,4))+ylab("Log HR estimate")+geom_text(x=annotation$x, y=log(metaAnalysisEstimate)+0.2, label="Meta analysis estimate",color="darkblue",size=4)+theme_bw()

p+geom_text(data=annotation,aes( x=x, y=y, label=label),color="darkred",size=4 , angle=10, fontface="bold" )
## `geom_smooth()` using formula 'y ~ x'