对于置信区间的计算,您需要效果的标准误差,但这些在输出中不可用。但是,可以从 Wald 统计量和优势比估计标准误。
计算如下:
- 从优势比取自然对数。这为您提供了逻辑模型的 beta。例如对于表格的第一行: beta=ln(4.23)=1.442
- 贝塔的标准误差是通过将贝塔除以沃尔德统计量 (STAT) 的平方根来计算的。然后取结果的绝对值。同样,对于表格的第一行:se=1.442/sqrt(61.5)=0.183。
- β 的 95% 置信区间为 beta+/-1.96*se。常数 1.96 来自正态分布。同样,对于第一行数据:1.442-1.96*0.183 ... 1.442+1.96*0.183 = 1.081...1.802。
- 最后,您需要将 beta 的置信区间更改为优势比的置信区间。这只需对 beta 的置信区间取幂即可。对于第一行数据:2.71828^1.081 = 2.949 和 2.71828^1.802 = 6.065。
因此,表格第一行的优势比为 4.23,其 95% 置信区间为 2.949-6.065。由于置信区间不包括 1,因此结果具有统计显着性。由于 PLINK 输出的四舍五入,结果可能会出现错误。
这种计算可以在例如 Excel 中实现,但下面也是一个做同样事情的 R 函数(以防万一你也使用 R)。
# The data
or<-structure(list(SNP1 = structure(c(1L, 1L, 1L, 1L), .Label = "rs1", class = "factor"),
SNP2 = structure(c(1L, 1L, 1L, 1L), .Label = "rs2", class = "factor"),
HAPLOTYPE = c(22L, 12L, 21L, 11L), F = c(0.00992, 0.038,
0.00015, 0.952), OR = c(4.23, 1.02, 5.22e-10, 0.762), STAT = c(61.5,
0.217, 453, 22.9), P = c(4.43e-15, 0.642, 1.77e-100, 1.73e-06
)), .Names = c("SNP1", "SNP2", "HAPLOTYPE", "F", "OR", "STAT",
"P"), class = "data.frame", row.names = c(NA, -4L))
# The function
orci<-function(or) {
or$beta<-log(or$OR)
or$se<-abs(or$beta/sqrt(or$STAT))
or$lower<-or$beta-1.96*or$se
or$upper<-or$beta+1.96*or$se
or$LOWER<-exp(or$lower)
or$UPPER<-exp(or$upper)
or$res<-paste(or$OR, " (", round(or$LOWER, 3), "-", round(or$UPPER, 3), ")", sep="")
return(or)
}
# The calculation
orci(or)
# The result
#SNP1 SNP2 HAPLOTYPE F OR STAT P beta se lower upper LOWER UPPER res
#1 rs1 rs2 22 0.00992 4.23e+00 61.500 4.43e-15 1.44220199 0.18390288 1.08175235 1.8026516 2.949844e+00 6.065710e+00 4.23 (2.95-6.066)
#2 rs1 rs2 12 0.03800 1.02e+00 0.217 6.42e-01 0.01980263 0.04251018 -0.06351733 0.1031226 9.384579e-01 1.108627e+00 1.02 (0.938-1.109)
#3 rs1 rs2 21 0.00015 5.22e-10 453.000 1.77e-100 -21.37335353 1.00420775 -23.34160072 -19.4051063 7.292419e-11 3.736538e-09 0.000000000522 (0-0)
#4 rs1 rs2 11 0.95200 7.62e-01 22.900 1.73e-06 -0.27180872 0.05679965 -0.38313603 -0.1604814 6.817202e-01 8.517337e-01 0.762 (0.682-0.852)