对于回归了多个变量和输出的一个子集循环(for loops for regression over

2019-08-17 10:29发布

我曾尝试这个QA适用: “高效循环回归的R”以我自己的问题,但我不能完全使它发挥作用。 我还没有尝试过使用申请,但我被几个人,一个for循环是这里最好的(如果有人认为,否则请随时解释!)我觉得这个问题是非常generalizeable并没有太多深奥的告诉论坛。

这就是我想实现的:我有3个预测变量(性别,年龄,种族)和几个人86个基因位置的因变量(比例)的数据集。 我想为每一个位置(因此为86个3预测变量线性回归)运行二元线性回归。 然后,我要输出的结果在一些容易阅读格式; 我的想法是与行数=性别,年龄和种族,和列= 86位的矩阵。 会有的每一行*列组合的p值。 然后我可以调用的p值<0.1(或任何阈值I希望)很容易地看到哪些预测器显著在各位置比例相关联。

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

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。 我知道后两者dataframes,不是矩阵...但如果我将其转换为矩阵,我得到一个无效的类型的错误(无效的类型(单)可变“BB [我]”)。 我不知道如何解决这个错误,因为我只是不明白[R不够好。我查阅过的书籍应用统计遗传学与RR编程的艺术都无济于事,而我被谷歌搜索所有天。 而且我还没有得到的编码输出的结果...

我会很感激的一种更好的方式调试任何提示或一些建议编写这个! 谢谢大家。

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

至于是否或不认为是正确的事情,我会相信你的判断遗传流行病学!



文章来源: for loops for regression over multiple variables & outputting a subset