【发布时间】: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 R 和 Art of R Programming 这两本书em> 无济于事,我整天都在谷歌搜索。而且我什至还没有编写输出结果的编码......
如果有任何调试技巧或一些关于更好地编写代码的建议,我将不胜感激!提前谢谢大家。
【问题讨论】:
-
我认为您需要与统计学家交谈。我认为您在尝试自己进行任何编码之前需要更好地理解这些问题。
-
如果您发布部分数据结构,它会更容易提供帮助。尝试粘贴来自
dput( head( BB[,6:10] ) )和dput( head( AA ) )的输出。 -
这听起来像是我在博士期间做过的一些令人遗憾的事情......请与统计顾问交谈!
标签: r for-loop matrix regression output