【问题标题】:for loops for regression over multiple variables & outputting a subset用于对多个变量进行回归并输出子集的 for 循环
【发布时间】:2013-03-08 22:36:46
【问题描述】:

我已尝试将此 QA:"efficient looping logistic regression in R" 应用于我自己的问题,但我无法完全解决问题。我没有尝试过使用 apply,但是有几个人告诉我 for 循环在这里是最好的(如果有人不相信,请随时解释!)我认为这个问题很容易概括,对于论坛。

这就是我想要实现的目标:我有一个数据集,其中包含 3 个预测变量(性别、年龄、种族)和一个因变量(比例),用于几个人的 86 个基因位置。我想为每个位置运行双变量线性回归(因此 3 个预测变量有 86 个线性回归)。然后我想以某种易于阅读的格式输出结果;我的想法是一个矩阵,其中行 = 性别、年龄和种族,列 = 86 个位置。每个行*列组合都有一个 p 值。然后我可以调用 p 值

这是我目前的代码。

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
}}

无论我如何更改它(例如,将其简化为仅循环一个预测变量的位置),我仍然会收到一个错误,即我的矩阵长度不同(要替换的项目数不是更换长度)。实际上,length(linreg)=286 (3*86) and length(BB)=86 and length(AA)=3。我知道后两个是数据帧,而不是矩阵......但是如果我将它们转换为矩阵,我会得到一个无效的类型错误(变量'BB [,i]'的无效类型(列表))。我不知道如何解决这个错误,因为我对 R 的理解不够好...我查阅了 Applied Statistical Genetics with RArt of R Programming 这两本书em> 无济于事,我整天都在谷歌搜索。而且我什至还没有编写输出结果的编码......

如果有任何调试技巧或一些关于更好地编写代码的建议,我将不胜感激!提前谢谢大家。

【问题讨论】:

  • 我认为您需要与统计学家交谈。我认为您在尝试自己进行任何编码之前需要更好地理解这些问题。
  • 如果您发布部分数据结构,它会更容易提供帮助。尝试粘贴来自dput( head( BB[,6:10] ) )dput( head( AA ) ) 的输出。
  • 这听起来像是我在博士期间做过的一些令人遗憾的事情......请与统计顾问交谈!

标签: r for-loop matrix regression output


【解决方案1】:

如果不事先了解您的数据结构,真的很难给出明确的答案,但是这可能行得通。我假设您的两个数据框具有相同的行数(观察):

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] )

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

【讨论】:

  • 哦,这绝对不是正确的做法。这是实验室轮换的一部分——我的职责只是做“板凳工作”。现在我有了数据,我的责任实际上只是学习 R。我绝对意识到多重测试、相关数据以及手头的其他问题的问题。但这不适合我的论文——一旦我在 R 中学习了我需要的东西,数据就会消失得无影无踪!
  • @user2100907 如果以上不是您想要的,请发表评论,以便我可以根据您的需求更新解决方案。 :-) 干杯
  • 非常感谢 - 这段代码完成了我想要实现的目标,只需稍作改动(包括在最后一个“)”之前对 pvals 向量代码添加一个结束括号“}”
猜你喜欢
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
相关资源
最近更新 更多