【问题标题】:lm() on row of data.frame ~ colnamesdata.frame 行上的 lm() ~ colnames
【发布时间】:2016-09-26 15:55:11
【问题描述】:

我尝试对数据框执行简单的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 的更一般的理解会对我有很大帮助。

【问题讨论】:

  • lm( data.frame(y = unlist(d[1,]), x = 0:5) )
  • 我认为一个简单的方法是stack()。但是为什么值在同一行?同一行中的所有值是否在同一单位上测量?
  • 是的,同一行中的值是在相同的东西上测量的。 colnames 指的是测量的数量。我知道表格的结构并不理想。

标签: r dataframe regression linear-regression lm


【解决方案1】:

我必须对你的计划做一些假设,因为你没有主动澄清它。

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

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”(多重线性模型)。您在上面看到的系数矩阵的每一列都与每个响应相关联。

【讨论】:

  • 我的 R 问题已解决。谢谢@Zheyuan Li。但是,让我对分析更具体一点,我从事遗传学工作并分析每个物种的绘图质量。详细地说,当映射到给定的物种(行)时,我测量了每个读取(由列名给出)的不匹配量。我只是想使用 lm() 来测试负关系(映射读取的数量随着不匹配的增加而减少)。因此,每个物种的观察都不是独立的。
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多