2013-03-08 45 views
1

循环回归我曾尝试这个QA适用于:"efficient looping logistic regression in R"我自己的问题,但我不能完全使它发挥作用。我没有尝试过使用apply,但有人告诉我一个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艺术[R编程无济于事,我一直在谷歌搜索整天。而且我还没有得到的编码输出的结果...

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

+1

我想你需要和统计学家交谈。我认为在你尝试自己编写代码之前,你已经头脑清醒,需要更好地理解这些问题。 – 2013-03-08 22:43:46

+0

如果您发布数据结构的一部分,它可以帮助您更轻松地获得帮助。尝试粘贴输出(head(BB [,6:10]))和'dput(head(AA))'输出。 – 2013-03-08 22:55:29

+0

这听起来像是我在博士学习中所做的一些令人遗憾的事情......请与统计顾问交谈! – alexwhan 2013-03-09 09:42:47

回答

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

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

+0

哦,这绝对不是正确的做法。这是实验室轮换的一部分 - 我的责任只是做“板凳工作”。现在我掌握了数据,我的责任仅仅是学习R.我明确知道多重测试,相关数据和其他问题。但是这不适合我的论文 - 一旦我了解了我在R中需要的东西,数据就会消失得无影无踪! – user2100907 2013-03-09 14:46:27

+0

@ user2100907如果上述内容不是您正在查找的内容,请留下评论,以便我可以更新解决方案,并且您将要做的事情。:-)干杯 – 2013-03-10 06:54:21

+0

非常感谢 - 这个代码做了我想实现的只是一个小小的改变(包括在最后的“)”之前的pvals向量代码的末尾括号“}” – user2100907 2013-03-10 16:57:45

相关问题