data.frame ~ colnames 行上的 lm()

lm() on row of data.frame ~ colnames

我尝试对数据框执行简单的 lm() 回归分析。明确地说,我想在数据框的列名和每一行之间执行回归分析。我的数据框如下所示:

d = data.frame(replicate(6,rnorm(6)))
colnames(d) = as.character(0:5)

然而,我的lm()不起作用:

lm(d[1,]~colnames(d))
#Error in model.frame.default(formula = d[1, ] ~ colnames(d), drop.unused.levels = TRUE) : 
#invalid type (list) for variable 'd[1, ]'

如果有人帮助我得到这个运行,我将不胜感激。 lm() 函数我用得不多。

我知道 lm() 函数需要 lm(columnA ~ columnB, data = mydata) 格式的内容,所以我在此处发布问题之前尝试为我的数据构建一个数据框:

cbind(d[1,],0:5)

但是,这不会降低 d 的维度。不知道为什么。如果有人也能回答这个问题,即使对 R 的更一般的理解也会对我有很大帮助。

我不得不对你打算做什么做一些假设,因为你没有主动澄清它。

我假设您希望数据框的每一行都有不同的独立回归线。换句话说,您有多个响应(每行一个),但有一个共同的协变量:

x <- 1:ncol(d) - 1

因此,你可以做到

fit <- lm(t(d) ~ x)

#Call:
#lm(formula = t(d) ~ x)

#Coefficients:
#             [,1]      [,2]      [,3]      [,4]      [,5]      [,6]    
#(Intercept)   0.23133   0.48307   0.07867   0.62308   0.71174   0.89866
#x             0.02964  -0.30077  -0.05160   0.06321  -0.17155  -0.43689

fit不是标准的"lm"对象,而是"mlm"(多重线性模型)。您在上面看到的系数矩阵,每一列都与每个响应相关联。