首页 文章

for循环用于回归多个变量并输出子集

提问于
浏览
1

我试图将此QA:"efficient looping logistic regression in R"应用于我自己的问题,但我无法完成它 . 我没有尝试使用申请,但有些人告诉我,for循环是最好的(如果有人相信,请随意解释!)我认为这个问题非常普遍,而且不太深奥 . 论坛 .

这就是我想要实现的目标:我有一个数据集,其中包含3个预测变量(性别,年龄,种族)和一个因变量(一个比例),适用于多个人的86个遗传位置 . 我想对每个位置运行双变量线性回归(因此对于3个预测变量,有86个线性回归) . 然后我想以一些易于阅读的格式输出结果;我的想法是一个矩阵,行=性别,年龄和种族,列= 86个职位 . 每行*列组合将有一个p值 . 然后,我可以将p值设置为<0.1(或我想要的任何阈值),以便轻松查看哪些预测变量与每个位置的比例显着相关 .

这是我到目前为止的代码 .

BB <- seq.csv[,6:91]   #the data frame containing the 86 positions
AA <- seq.csv[,2:4]    #the data frame containing the 3 predictor variables

linreg <- matrix(NA,3,86)  #make a results vector and fill it with NA
    for (i in 1:86)     #loop over each position variable
    {
              for (j in 1:3)  #for each position variable, loop over each predictor
    {
              linreg[i,j] <- lm(BB[,i]~AA[,j])  #bivariate linear regression
}}

无论我如何改变它(例如,简化它以循环仅一个预测器的位置),我仍然得到一个错误,我的矩阵长度不一样(要替换的项目数不是替换长度的倍数) . 实际上,长度(linreg)= 286(3 * 86),长度(BB)= 86,长度(AA)= 3 . 我知道后两个是数据帧,而不是矩阵......但如果我将它们转换为矩阵,我会得到一个无效的类型错误(变量'BB[, i]'的类型(列表)无效) . 我不知道如何解决这个错误,因为我只是在阅读“应用统计遗传学与R和R编程的艺术”这本书无济于事,而且我甚至还得到了输出结果的编码......

我很感激任何调试技巧或一些更好的代码编写方法的建议!谢谢大家 .

1 回答

  • 2

    在事先不知道数据结构的情况下,很难给出明确的答案,但这可能会奏效 . 我假设你的两个数据帧具有相同的行数(观察值):

    df <- cbind( AA[ , 2:4 ] , BB[ , 6:91 ] )
    mods <- apply( as.data.frame( df[ , 4:89 ] ) , 2 , FUN = function(x){ lm( x ~ df[,1] + df[,2] + df[,3] } )
    
    # The rows of this matrix will correspond to the intercept, gender, age, race, and the columns are the results for each of your 86 genetic postions
    pvals <- sapply( mods , function(x){ summary(x)$coefficients[,4] )
    

    至于这是否是正确的做法,我将相信你作为遗传流行病学家的判断!

相关问题