【交流】用stata软件实现剂量反应meta分析(之一):单个研究的剂量反应meta合并(含WORD文档与视频)
use http://nicolaorsini.altervista.org/data/cc_ex.dta,

gen double se = (logub - loglb)/(2*invnorm(.975))
gen doser=dose-dose[1] (注意,在这个实例中doser的取值与dose是没什么区别的,因为dose[1]=0,只不过因为有些实例中dose[1]有不为0的情况)
// Ignoring the correlation among logRRs
vwls logrr doser if logrr != 0, sd(se) noconstant

这里使用Variance-Weighted least-squares regression 方差计算的结果,拟合优度检测,Q=1.72,P=0.4223(如果这里是多个研究的话,这个值就相当于异质性检验),模型卡方=3.20,P=0.0737,无意义。DOSE与LOGRR的P=0.074,也无意义,(注意,因为这里模型中只有一个变量,所以系数的检验统计量也就等于模型检验的统计量,另外,模型中是没有常数项的。这是剂量反应关系模型的特点)
注意:利用VWLS时没用使用到病例数和N,这个是GLST命令最不同的地方。
vwls logrr doser in 2/4,sd(se) nocons

lincom doser*5,eform

matrix list e(V)

这里是系数的方差矩阵的结果
glst logrr doser, se(se) cov(n case) cc

这就是广义最小二乘法的计算结果通过glst命令实现,如果软件中没有装GLST包,使用“ssc install glst”命令就可以了。
matrix list e(Sigma)

Stata拟合的模型中,随机残差部分的协方差矩阵
lincom doser*12, eform

在模型参考剂量上增加12个单位后的RR值是1.648(1.0558~2.5734),注意:这里我们发现Z值和前面增加一个单位剂量的是Z值是一样的。
剂量反应关系的第二种形式,队列研究(累计发病率数据)
// Cumulative-incidence data
use http://nicolaorsini.altervista.org/data/ci_ex.dta,

gen double se = (logub - loglb)/(2*invnorm(.975))
gen doser=dose-dose[1]
glst logrr doser, se(se) cov(n case) ci

模型的拟合是有意义的,系数也是有意义的。
lincom doser*2, eform

剂量反应关系的第三种形式,队列研究(人年数据)
// Incidence-rate data
use http://nicolaorsini.altervista.org/data/ir_ex.dta ,

这个数据库中本来就有doser,这里因为参考组不是0,所以DOSER起作用了。
gen double se = (logub - loglb)/(2*invnorm(.975))
glst logrr doser, se(se) cov(n case) ir

这个模型,P=0.0626, 还是勉强可以用。
lincom doser*10, eform

注:本贴数据和代码来自Nicola Orsini,我只是操作一下,并总结自已的心得。
// Worked examples
// Orsini N., Bellocco R., Greenland S. (2006) Generalized least squares for trend estimation of summarized dose-response data, Stata Journal, 6(1), pp.40-57
使用版本STATA11.0 #version 11