R中的logistic回归用于获得汇总统计数据的单核苷酸多态性列表

R中的logistic回归用于获得汇总统计数据的单核苷酸多态性列表,r,logistic-regression,R,Logistic Regression,我想对30个SNP(基因型为0,1,2格式的单核苷酸多态性)列表进行病例对照结果/疾病(对照组和病例为0,1格式)的回归分析。我知道如何在R中使用下面的方法为一个SNP做这件事 test=glm(病例对照~rs12345,data=mydata,family=二项式) 问题:我如何运行一个模型来获得30个单核苷酸多态性与该疾病的关联的汇总统计数据?我们从GWAS、β估计值、p值、SD、等位基因频率中得到的结果?有我能用的R包吗 编辑: 你肯定走对了路。使用多个预测器就像一个接一个地添加它们一样简

我想对30个SNP(基因型为0,1,2格式的单核苷酸多态性)列表进行病例对照结果/疾病(对照组和病例为0,1格式)的回归分析。我知道如何在R中使用下面的方法为一个SNP做这件事

test=glm(病例对照~rs12345,data=mydata,family=二项式)

问题:我如何运行一个模型来获得30个单核苷酸多态性与该疾病的关联的汇总统计数据?我们从GWAS、β估计值、p值、SD、等位基因频率中得到的结果?有我能用的R包吗

编辑:


你肯定走对了路。使用多个预测器就像一个接一个地添加它们一样简单。。。因此,只需练习前3个,如图所示更改命令(一分钟内更多关于使用30个预测器简化此操作的内容)

编辑以确保我们将SNP转换为因子,而不是假设它们是因子的整数。这也是一个更好的聚合玩具数据集

库(dplyr)
图书馆(扫帚)
glm(病例对照~as.因子(rs1)+as.因子(rs2)+as.因子(rs3),数据=我的数据,家庭=二项)
#> 
#>调用:glm(公式=病例对照~as.factor(rs1)+as.factor(rs2)+
#>as.因子(rs3),族=二项式,数据=mydata)
#> 
#>系数:
#>(截距)as.factor(rs1)1 as.factor(rs1)2 as.factor(rs2)1
#>         0.03811          0.13198         -0.20161          0.22642  
#>同系数(rs2)2同系数(rs3)1同系数(rs3)2
#>         0.10170         -0.22889         -0.03697  
#> 
#>自由度:总共499个(即零);剩余493个
#>零偏差:693
#>剩余偏差:688.4 AIC:702.4
使用
summary
命令获取p值等

summary(glm(casecontrol ~ as.factor(rs1) + as.factor(rs2) + as.factor(rs3), data = mydata, family=binomial))
#> 
#> Call:
#> glm(formula = casecontrol ~ as.factor(rs1) + as.factor(rs2) + 
#>     as.factor(rs3), family = binomial, data = mydata)
#> 
#> Deviance Residuals: 
#>    Min      1Q  Median      3Q     Max  
#> -1.350  -1.193   1.014   1.161   1.348  
#> 
#> Coefficients:
#>                 Estimate Std. Error z value Pr(>|z|)
#> (Intercept)      0.03811    0.22619   0.168    0.866
#> as.factor(rs1)1  0.13198    0.22276   0.592    0.554
#> as.factor(rs1)2 -0.20161    0.22264  -0.906    0.365
#> as.factor(rs2)1  0.22642    0.22111   1.024    0.306
#> as.factor(rs2)2  0.10170    0.21969   0.463    0.643
#> as.factor(rs3)1 -0.22889    0.21864  -1.047    0.295
#> as.factor(rs3)2 -0.03697    0.22117  -0.167    0.867
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 693.02  on 499  degrees of freedom
#> Residual deviance: 688.39  on 493  degrees of freedom
#> AIC: 702.39
#> 
#> Number of Fisher Scoring iterations: 3
更好的方法是使用
broom::tidy
获得良好的输出

tidy(glm(病例对照~as.factor(rs1)+as.factor(rs2)+as.factor(rs3),数据=mydata,家族=二项式))
#>#tibble:7 x 5
#>术语估计标准误差统计p值
#>                              
#>1(截距)0.0381 0.226 0.168 0.866
#>2 as.系数(rs1)1 0.132 0.223 0.592 0.554
#>3 as.系数(rs1)2-0.202 0.223-0.906 0.365
#>4 as.系数(rs2)1 0.226 0.221 1.02 0.306
#>5 as.系数(rs2)2 0.102 0.220 0.463 0.643
#>6 as.系数(rs3)1-0.229 0.219-1.05 0.295
#>7 as.系数(rs3)2-0.0370 0.221-0.167 0.867
显然,使用示例数据,我们不会得到真正的答案

为了最有效地利用您的时间,请创建一个临时数据集进行分析。我们将其称为
justanalyze
,它只包含您实际想要使用的结果和变量。然后我们可以使用
casecontrol~。
将casecontrol与其他所有内容一起作为预测指标

justanalyze%
选择(病例对照,rs1:rs30)%>%
在(变量(rs1:rs30)处变异,如因子)
#glm(病例对照,数据=justanalyze,家庭=二项)
#总结(glm(病例对照,数据=justanalyze,家庭=二项式))
tidy(glm(病例对照,数据=justanalyze,家庭=二项式))
#>#A tibble:61 x 5
#>术语估计标准误差统计p值
#>                           
#>1(截距)-0.4930.782-0.6300.529
#>2 rs11 0.1430.249 0.574 0.566
#>3 rs12-0.157 0.244-0.642 0.521
#>4 rs21 0.106 0.248 0.428 0.669
#>5 rs22 0.0427 0.243 0.176 0.860
#>6 rs31-0.231 0.238-0.970 0.332
#>7 rs32 0.00169 0.245 0.00690 0.994
#>8 rs41-0.259 0.244-1.06 0.288
#>9 rs42-0.474 0.253-1.87 0.0610
#>10 rs51 0.0148 0.256 0.0577 0.954
#>#…还有51行
更好的组合数据(示例)

set.seed(2020年)

我的数据你介意分享你的一小段数据吗?dput(head(mydata))请。@ChuckP原始数据是与另一个研究所合作的,甚至我也不允许将其从他们的服务器中取出。如果我制作一些类似的虚拟数据并共享,可以吗?是的,请我不需要看太多,只需要看太多数据框的结构。例如,有多少列,比outcom更多的列e和30个SNP。@ChuckP我在上面的问题中添加了“dput(head(mydata))”输出作为编辑。数据还有其他列,如ID、年龄、性别、bmi以及结果(病例对照)和30个SNPs的数据。如果还不够,我可以分享我制作的虚拟文件。我也可以选择在分析时只保留“结果”和SNPs数据,但ID列将保留。谢谢,这是我需要知道的,给我一点时间。非常感谢@Chuck P。我从一段时间以来一直在寻找一个解决方案,最后终于有了这么清楚的东西。B少你:)没问题,如果这些SNP值被视为因子,请务必更改它们,否则它们将被视为实整数而不是对比。谢谢。你太棒了。。。我明白我必须把它们作为因素。但是如果我们有0,1,2以外的其他数字呢。例如,有时机器读取基因型的结果是0.001、0.999和1.999(而不是0,1,2)。我们还可以使用as.factor来计算这些数字并成功地拟合模型吗?是的,您所拥有的将起作用。只要它们是表示你不想把它们当作数字的因素。这样一个SNP(例如
rs1
的整洁输出看起来像
rs10.001-0.385 0.289-1.33 0.183 rs10.999-0.431 0.283-1.53 0.127 rs11.999-0.483 0.295-1.64 0.102
summary(glm(casecontrol ~ as.factor(rs1) + as.factor(rs2) + as.factor(rs3), data = mydata, family=binomial))
#> 
#> Call:
#> glm(formula = casecontrol ~ as.factor(rs1) + as.factor(rs2) + 
#>     as.factor(rs3), family = binomial, data = mydata)
#> 
#> Deviance Residuals: 
#>    Min      1Q  Median      3Q     Max  
#> -1.350  -1.193   1.014   1.161   1.348  
#> 
#> Coefficients:
#>                 Estimate Std. Error z value Pr(>|z|)
#> (Intercept)      0.03811    0.22619   0.168    0.866
#> as.factor(rs1)1  0.13198    0.22276   0.592    0.554
#> as.factor(rs1)2 -0.20161    0.22264  -0.906    0.365
#> as.factor(rs2)1  0.22642    0.22111   1.024    0.306
#> as.factor(rs2)2  0.10170    0.21969   0.463    0.643
#> as.factor(rs3)1 -0.22889    0.21864  -1.047    0.295
#> as.factor(rs3)2 -0.03697    0.22117  -0.167    0.867
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 693.02  on 499  degrees of freedom
#> Residual deviance: 688.39  on 493  degrees of freedom
#> AIC: 702.39
#> 
#> Number of Fisher Scoring iterations: 3