首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用2个矩阵的线性回归求斜率(R)

用2个矩阵的线性回归求斜率(R)
EN

Stack Overflow用户
提问于 2020-06-10 20:32:04
回答 1查看 196关注 0票数 0

我有两个矩阵。一个包含客户购买产品的数量。矩阵看起来像这个量化矩阵:

另一个包含客户购买产品的单位价格。矩阵看起来就像这个价格矩阵:

如何对矩阵进行线性回归,从而获得每个乘积的斜率?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 21:16:37

你的数据:

代码语言:javascript
复制
quantity <-  matrix(c(4,2,6, 9,4,3, 1,1,2, 3,1,5), 3, 4)
price <-  matrix(c(1,0.5,8, 4.2,1.2,2, 2,5,2, 1,2.5,1), 3, 4)

首先,您必须将两个矩阵转换为一个数据框架。(如果你愿意的话,你可以避免这样做,但我认为这样做会让你更直截了当):

代码语言:javascript
复制
df <-  data.frame(quantity = as.numeric(quantity), 
                    price = as.numeric(price), 
                    product = rep(1:4, each = 3), ID = 1:3)

然后,按组运行线性模型:

代码语言:javascript
复制
lms <-  by(df, df$product, FUN = function(x) lm(price~quantity, data = x)) 

找出斜坡:

代码语言:javascript
复制
slopes <- sapply(lms, coef)[2,]

但是,如果您想保持原始矩阵的原状,则可以运行一个简单的循环:

代码语言:javascript
复制
slopes <- numeric(dim(price)[2])
for (i in 1:dim(price)[2]) {
  model <- lm(price[,i]~quantity[,i])
  slopes[i] <- coef(model)[2]
}

注:这个解假设这两个矩阵有相同的维数。

如果您想避免循环,下面的解决方案可能会更快:

代码语言:javascript
复制
f <-  function(x,y) coef(lm(y~x))[2]
l <- function(m) lapply(seq_len(ncol(m)), function(i) m[,i])

mapply(f, l(quantity), l(price))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62312601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档