R中的logistic回归用于获得汇总统计数据的单核苷酸多态性列表
我想对30个SNP(基因型为0,1,2格式的单核苷酸多态性)列表进行病例对照结果/疾病(对照组和病例为0,1格式)的回归分析。我知道如何在R中使用下面的方法为一个SNP做这件事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包吗 编辑: 你肯定走对了路。使用多个预测器就像一个接一个地添加它们一样简
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