既往倾向性得分分析一些笔记: 此次笔记是演示倾向性得分加权分析。权,然后知轻重,在古代权指的是秤砣,是个非常重要的重量标准。统计学里面的权重不同于一般的比重,它更强调的是指标的相对重要程度,倾向于贡献度或重要性,常见的有抽样权重/概率权重、逆方差权重、频数权重。 Complex Surveys:A Guide to Analysis Using R 理论上在进行IPW后,样本量会膨胀到原数据样本量的2倍,但连续变量和极端权重的截尾处理等情况的存在,大多数情况下加权后的样本量其实是达不到原来的样本量2倍的。样本量的增大往往会带来假阳性,而且对原始样本中的一个个体的加权获得的伪样本是完全相同的,不存在变异,从而使方差估计出现偏差。为获得与原人群相同的标准人群,降低假阳性的发生,常用稳定权重(stabilized weights,SW)来替代IPTW:Wt=Pt/PS,Wc=(1-Pt)/(1-PS),其中Pt为不考虑协变量的处理组概率[中华流行病学杂志,2010,31(2):223-226]。 SPSS并未直接提供倾向值权重计算方法,但根据上表中的定义获得相应IPW权重并不难。 【1】获得给定协变量条件下的倾向值 Analyze>>Regression>>Binary Logistic… 我们在《倾向性得分匹配(PSM)》中是通过PSM过程来生成倾向值的。 Data>>Propensity Score Matching… 这样我们就可以获得每个个案的倾向值,即下图中的PS: 计算Case组的逆概率权重: Transform>>Computer Variable… 计算Control组的逆概率权重: Transform>>Computer Variable… 【OK】 计算稳定IPW权重SW。示例有4642例观察对象,其中孕期吸烟864例,Pt=864/4642。 Case组的稳健逆概率权重: Transform>>Computer Variable… Control组的稳健逆概率权重: Transform>>Computer Variable… 但正如前所言,加权后伪样本的样本量膨胀和加权样本的同质化使得方差估计(相应的标准误、置信区间估计)不能直接使用传统的方法。 在SPSS中有两个地方可以实现加权。一是数据处理中的频数加权(Data>>Weight Cases),另外一个是在一些分析过程中出现的加权选项(比如WLS权重,残差权重)。频数加权其实可以看做复制权重,权重是几样本量就是原来的几倍,很显然这种加权方法几乎适用于所有的SPSS分析过程,如果用IPW进行频数加权,参数值的点估计(效应值估计)结果问题不大,但组内方差的估计有偏甚至是错误的,方差偏小样本量偏大,标准误很明显会偏小,置信区间偏窄,样本量的膨胀也使得更容易获得有显著意义的P值。 在线性回归过程中出现的WLS加权(相当于进行加权最小二乘回归,minimizing sum(w*e^2)),参数值跟采用复制权重后的数据来估算的结果一致,但样本量采用了原始数据的样本量,如果采用IPW作为WLS权重,效应值估计值也没问题,但方差偏小样本量也相对偏小。而且这种方法也无法实现对分类变量的分析。 在观察性研究中使用稳定权重理论上可以得到与原始数据样本量相同的伪数据,治疗效应的方差估计可以直接通过传统回归模型进行估计[Value Health. 2010,13(2):273-277]。实际情况是SW加权后的样本量也不绝对与原始数据的样本量完全一样,但非常接近。所以笔者以为在SPSS中可以用SW作为频数加权来获取稳定的逆概率加权近似的分析结果,虽然采用SW作为权重进行WLS加权分析理论上也可以,但因为样本量的原因还是会存在一些偏差。不过两者结果已经非常接近了。 Bwfit.ipw<-lm(bweight~mbsmoke,data=cattaneo,weights=ipw$ipw.weights) cattaneo$mmarried<-factor(cattaneo$mmarried,levels=c(0,1),labels=c("No","Yes")) ##基线考察 Sum.vars<-c("mmarried","alcohol","mage","medu","fage","mrace","frace","fbaby","prenatal1","bweight") #指定要分析的变量,去掉id、分组变量等不需要的一些变量 Tab1.stas<-CreateTableOne(vars=Sum.vars,strata="mbsmoke",data=cattaneo,factorVars=Cat.vars,test=TRUE,smd=TRUE,addOverall=TRUE) #创建基线表。var指定所有分析变量,包括分组变量,结局变量可以不用指定,我们在Sum.vars也指定了结局变量bweight,可以顺带看一下单变量分析结果;factorVars指定应该按分类变量处理的那些用数字编码的变量,本例在导入数据后已经将分类变量设置为了因子,此处其实可以无需再指定 print(Tab1.stas,catDigits=2,contDigits=2,pDigits=3,test=TRUE,smd=TRUE) #查看结果。设置分类和连续变量结果的小数点,显示3位数的P值,显示标准化均数差SMD Nonnorm.vars <-c("mage","fage") Tab1<-print(Tab1.stas,catDigits=2,contDigits=2,pDigits=3,test=TRUE,smd=TRUE,noSpaces=TRUE,exact=Exact.vars,nonnormal=Nonnorm.vars) #设置分类和连续变量结果的小数点,显示3位数的P值,显示smd,去掉空格,对非正态连续变量和样本量比较小的分类变量执行特殊的检验 结果显示孕母吸烟组的新生儿的体重明显低于不吸烟组,但各个变量在吸烟者和不吸烟组之间也是不均衡的。为了校正这些干扰因素的影响,多重回归、倾向性得分匹配都是常用的方法。此次笔记笔者演示的是加权分析的过程,要做加权分析首先需要获得权重,我们仍以获得逆概率权重(IPW)及其稳定权重(SW)为例。 ##获得倾向值,计算IPW和SW iptw<-ifelse(cattaneo$mbsmoke=="Yes",1/PS,1/(1-PS)) #获得IPW权重。特别注意此处ifelse条件是[=="Yes"]而不是[==1],因为本例在导入数据后已经将分类变量设置为了因子,并且通过levels和labels参数设置了标签。如果用[==1],则所有个案的值均按1/PS计算。如果在导入数据后没有设置因子或设置为了因子但没有设置标签者则用[==1] sw<-ifelse(cattaneo$mbsmoke=="Yes",(864/4642)/PS,(3778/4642)/(1-PS)) ##加权样本的组间均衡性考察 Svy.design<-svydesign(ids=~1,weights=iptw,data=cattaneo) #指定调查设计的信息。ids=~1或~0表示没有标识集聚性(多水平)的变量 Tab.ipw<-print(Tabipw.stas,catDigits=2,contDigits=2,pDigits=3,test=TRUE,smd=TRUE,noSpaces=TRUE,nonnormal=Nonnorm.vars) write.csv(Tab.ipw, file = "Table.ipw.csv") 结果显示,在进行逆概率加权后,虚拟的样本为9177.82,大部分的干扰因素在组间已达到均衡(P>0.05,标准化均数差(SMD)<0.1),不过孕母的年龄的组间仍未均衡性(P=0.002<0.05,SMD=0.127>0.1)。标准化均数差(SMD)是根据一个或多个变量来衡量两组平均值间距离的度量,在实践中,它经常被用作倾向得分匹配前后个体协变量的均衡性的度量指标。 年龄的组间均衡性仍然不好,应考虑其他权重,可参见本文最后部分。为演示完整的分析步骤,我们先把结果分析做完。 Smoke.ipw<-svyglm(bweight~mbsmoke,design=Svy.design, family=gaussian()) summary(Smoke.ipw) library(bruceR) ##ipwpoint{ipw}:Estimate Inverse Probability Weights ##psw{PSW}:Propensity Score Weighting Methods for Dichotomous Treatments library(PSW) ipw<-psw(data=cattaneo,form.ps=mbsmoke~mmarried+alcohol+mage+medu+fage+mrace+frace+fbaby+prenatal1,weight="ATE",std.diff=TRUE) #weight参数可指定的权重:"ATE"、 "ATT", "ATC"、"MW"、"OVERLAP"、"TRAPEZOIDAL";std.diff指定是否计算标准化均数差 summary(ipw) #结果会显示倾向值计算模型、估算的倾向值、权重、加权前后的标准化均数差等 ipw$W #权重值 加权后各个变量的标准化均数差大多在-10~10之内,均衡性明显变好。SMD均衡性的界值定义一般为绝对值0.1,但在该程序包中SMD定义如下,是常规定义的100倍: library(WeightIt) SW<-weightit(mbsmoke~mmarried+alcohol+mage+medu+fage+mrace+frace+fbaby+prenatal1,data=cattaneo,method="glm",estimand="ATE",stabilize=TRUE) #method可选"gbm"、"cbps"、"npcbps" 、"ebal"、"optweight" 、"super"、"bart" 、"energy";estimand可选"ATE"、"ATT"、 "ATC"、"ATO"、"ATM"、"ATOS";stabilize可指定是否估计稳定权重,等于个体的估计权重乘以其实际所在组的个案数占所有个案数的比例 summary(SW) 结果同前面我们手动计算的稳定的IPW(SW)完全一致。 PSwt[["propensity"]][,2] #阳性结果的倾向值 SumStat计算的权重明显偏小,应该是经过了某种转化,但这并不影响最终结果的计算。 SumSt[["ess"]] #有效样本量,effective sample sizes。有效样本量定义参照Am J Epidemiol. 2019;188(1): 250–257. 其中除了IPW,ATT加权(treated)、重叠加权(overlap)、匹配加权(matching)、熵加权(entropy)都可以使协变量在组间达到均衡。 最后,我们用重叠加权后组间均衡和结果分析作为此次推文的结束吧: library(tableone) library(survey) Sum.vars<-c("mmarried","alcohol","mage","medu","fage","mrace","frace","fbaby","prenatal1","bweight") Cat.vars<-c("mmarried","alcohol","mbsmoke","mrace","frace","fbaby","prenatal1") Nonnorm.vars <-c("mage","fage") Svy.design<-svydesign(ids=~1,weights=SumSt[["ps.weights"]][,5],data=cattaneo) Tabow.stas<-svyCreateTableOne(vars=Sum.vars,strata="mbsmoke",data=Svy.design,factorVars=Cat.vars,test=TRUE,smd=TRUE,addOverall=TRUE) Tab.ow<-print(Tabow.stas,catDigits=2,contDigits=2,pDigits=3,test=TRUE,smd=TRUE,noSpaces=TRUE,nonnormal=Nonnorm.vars) PS<-PSfit$fitted.values Svy.design<-svydesign(ids=~1,weights=ow,data=cattaneo) Tab.ow<-print(Tabow.stas,catDigits=2,contDigits=2,pDigits=3,test=TRUE,smd=TRUE,noSpaces=TRUE,nonnormal=Nonnorm.vars) 这样看起来结果就舒服多了。 最终的分析结果如下: Smoke.ow<-svyglm(bweight~mbsmoke,design=Svy.design, family=gaussian()) 关注“统计浆糊” 获取更多信息 |
|
来自: Memo_Cleon > 《待分类》