【问题标题】:Runnng lm function for every row in matrices为矩阵中的每一行运行 lm 函数
【发布时间】:2016-03-04 19:10:41
【问题描述】:

你好 Stackoverflow 用户,

我在矩阵中的每一行上运行 R 中的 lm 函数时遇到问题,如果我不必手动运行 1000 次,我会非常喜欢。所以基本上我有 2 个行 (1:1000) 和 cols (1:100) 的矩阵,我想为 x 中的每一行运行一个 lm 函数,用于 y 中的代表行。

我的代码是:

sigmaianden=1
Beta=1
set.seed(seed=20)
xi=rnorm(100)
capn=100
capm=1000
xi.1=matrix(c(rep(c(xi),each=capm)),nrow=capm,ncol=capn)
epsiloni.1=NULL
for (i in 1:100000) {
epsiloni.1[i]=rnorm(1,0,sigmaianden*xi.1[i]^2)
}
epsiloni.11=matrix(epsiloni.1,nrow=1000,ncol=100)
yi.1=Beta*xi.1+epsiloni.11

我个人的想法是这样的:

for (i in 1:1000){
model[i]=lm(yi.1[i,1:100]~xi.1[i,1:100])
}

但这甚至没有给我一个结果。如有任何帮助,我将不胜感激。

【问题讨论】:

    标签: r function loops matrix lm


    【解决方案1】:

    你很接近。 lm 返回一个list,所以你要做的就是把你的模型放到另一个列表中:

    models <- vector("list", 1000)
    for (i in 1:1000)
      models[[i]] <- lm(yi.1[i,1:100] ~ xi.1[i,1:100])
    

    然后您可以再次迭代并提取 resid(models[[i]])coef(models[[i]]) 或其他任何内容。但是,现在 models 使用起来非常方便,因此您可以使用例如而不是 for 循环。

    R <- sapply(models, resid)
    dim(R)
    [1]  100 1000
    

    C <- sapply(models, coef)
    dim(C)
    [1]    2 1000
    

    【讨论】:

    • 哇,太好了,我想了一个小时左右就睡着了,然后醒来。队友的欢呼声。因此,为了让我取出所有残差、估计值和标准差,我必须对每个模型 [[i]](残差摘要)运行一个 for 循环,对吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2014-11-02
    • 2016-06-27
    • 2013-02-23
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多