【问题标题】:Calculate the linear regression for several files?计算几个文件的线性回归?
【发布时间】:2013-11-20 12:35:49
【问题描述】:

我在一个文件夹中有 3 个文件(200 列和 6 行的矩阵)

mat1 <- matrix(seq(1:1200), ncol = 200)
mat2 <- matrix(seq(1:1200), ncol = 200)
mat3 <- matrix(seq(1:1200), ncol = 200)

我在另一个文件夹中有另外 3 个文件(200 列和 6 行的矩阵)

at1 <- matrix(seq(1:1200), ncol = 200)
at2 <- matrix(seq(1:1200), ncol = 200)
at3 <- matrix(seq(1:1200), ncol = 200)

我想计算线性回归方程:

mat=a + b * at

例如,我们取第一个像素

mat1[1,1]........until mat3[1,1]  and regress this with 
at1[1,1]........until at3[1,1] 

然后写输出(截距和b系数....)

做同样的事情:

mat1[1,2]........until mat3[1,2]  and regress this with 
at1[1,2]........until at3[1,2] 

所以对于 mat1 中的每个像素,我将有截距和系数 b 最后会得到一个截距矩阵和一个b系数矩阵。

我知道我们只使用一个简单的矩阵:

model=lm(mat1~at1)

但对于时间数据,我不知道。有什么想法吗?

【问题讨论】:

  • 您真的要计算 6*200 = 1200 个单独的线性回归吗?使用sapplyfor 循环很容易,但这是一项奇怪的任务。请验证。
  • 你昨天不是在这里问过同样的问题吗(现已删除)? stackoverflow.com/questions/20076785/…

标签: r linear-regression


【解决方案1】:

这是一个开始:

myfits<-list()

for (j in 1:600) {
   for(k in 1:6) {
       ins <- c(at1[k,j],at2[k,j],at3[k,j])
       outs <- c(mat1[k,j],mat2[k,j],mat3[k,j])
       lmfit <-lm(outs~ins)
       myfits[[( k + (j-1)*6)]]<-lmfit
       }
   }

这将为您提供所有 linfit 的列表;然后,您可以在类似的循环中提取系数 (list[[n]]$coefficients)。有更简洁的方法可以做到这一点,但我想弄清楚发生了什么。

【讨论】:

  • @sacvf 您必须自己进行一点的思考。我将“n”作为占位符索引放入其中。你了解什么是列表变量吗?如果下标超出范围,那么显然您的 at1 矩阵没有示例中的行数或列数。尝试自己找出问题所在!
  • 是的,有一些方法可以收集某个集合中所有对象的[k,j] 元素。看看?ls?get
猜你喜欢
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2011-02-17
  • 2014-02-20
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多