R For 循环 - 回归 - 矩阵
Posted
技术标签:
【中文标题】R For 循环 - 回归 - 矩阵【英文标题】:R For Loop - Regression - Matrix 【发布时间】:2016-02-26 18:51:19 【问题描述】:我试图弄清楚如何制作一个执行 10 次回归然后将其放入 10x11 矩阵的 for 循环。
这是我正在使用的代码,但由于某种原因它无法正常工作......
for (i in 1:10)
Pwdlm.list[[i]] =
lm(Pwd[,9+i]~logwprice1+logwprice2+logwprice3+logwprice4+
logwprice5+logwprice6+logwprice7+logwprice8+logwprice9+logwprice10+
Pwd$storeid, data=Pwd)
Pwdmat = matrix(Pwdlm.list[[i]]$coefficients, nrow = 10, ncol = 11)
我不断收到此警告:
警告信息: 在 matrix(Pwdlm.list[[i]]$coefficients, nrow = 10, ncol = 11) 中: 数据长度[25]不是行数[10]的约数或倍数
但我需要将数据放入 10 行。
我知道不看数据很难,但我不确定它是否与 [,9+i] 有关
【问题讨论】:
这并没有明确回答您的问题,但我认为它可能有用且效率更高:***.com/a/35638859/2378649 要使其在您的设置中工作(即dplyr
部分),您可能需要melt
你的数据框并创建一个分组变量。
寻求帮助时,请在示例输入数据中包含一个最小的reproducible example,以便我们可以复制/粘贴代码以获得相同的错误。这使帮助您变得更加容易。似乎您获得了超过 10 个系数。您是否在没有循环的情况下运行它以验证它是否按预期工作?你所有的列都是数字的吗?
谢谢。对不起是我的第一篇文章。一旦我可以尝试这些方法,我会尽快回复你们。我喜欢 sapply 的想法,并会尝试。我确实有一个分组变量。但是是的,我得到 25 行而不是 10 行。
【参考方案1】:
您似乎没有收到来自lm
-调用或分配给Pwdlm.list
的错误。试试这个:
Pwdmat = sapply(Pwdlm.list, coefficients)
sapply
函数尝试在所有返回值的长度相等时返回一个矩阵。每个回归的值都将位于一列中,这似乎是您希望获得的形式。
【讨论】:
以上是关于R For 循环 - 回归 - 矩阵的主要内容,如果未能解决你的问题,请参考以下文章
在每 2 行之后生成一个升序值矩阵,在 R 中没有 for 循环