使用lm并预测矩阵中的数据

时间:2013-03-07 14:41:05

标签: r dataframe lm predict

我只使用R一点点而且从不使用数据帧,这使得理解正确使用预测变得困难。我将数据放在普通矩阵中,而不是数据帧中,将它们称为ab,分别是N x pM x p矩阵。我可以运行回归lm(a[,1] ~ a[,-1])。我想使用生成的lm对象来预测b[,1]中的b[,-1]。我对predict(lm(a[,1] ~ a[,-1]), b[,-1])的天真猜测不起作用。使用lm获取预测矢量的正确语法是什么?

3 个答案:

答案 0 :(得分:7)

您可以将整个矩阵存储在data.frame的一列中:

x <- a [, -1]
y <- a [,  1]
data <- data.frame (y = y, x = I (x))
str (data)
## 'data.frame':    10 obs. of  2 variables:
## $ y: num  0.818 0.767 -0.666 0.788 -0.489 ...
## $ x: AsIs [1:10, 1:9] 0.916274.... 0.386565.... 0.703230.... -2.64091.... 0.274617.... ...

model <- lm (y ~ x)
newdata <- data.frame (x = I (b [, -1]))
predict (model, newdata) 
##         1         2 
## -3.795722 -4.778784 

关于pls包的论文(Mevik, B.-H. and Wehrens, R. The pls Package: Principal Component and Partial Least Squares Regression in R Journal of Statistical Software, 2007, 18, 1 - 24.)解释了这种技术。

光谱数据集(奎宁荧光)的另一个例子是我的包hyperSpec的vignette ("flu")

答案 1 :(得分:2)

要使data.fram离开矩阵,只需执行以下操作:

m = matrix(runif(100), 10, 10)
df = as.data.frame(m)

执行线性回归:

lm_result = lm(V1 ~ V100, df)
predicted_values = predict(lm_result, b)

或者进行多元回归:

lm_result = lm(V1 ~ V2 + V3 + V4, df)
predicted_values = predict(lm_result, b)

假设V1中存在V4 - b列。

答案 2 :(得分:1)

您可以手动计算预测:

> fit <- lm(a[,1] ~ a[,-1])
> fit$coefficients[1] + b[,-1] %*% fit$coefficients[-1]
     [,1]
[1,]    1
[2,]    2
[3,]    5

此处,fit$coefficients[1]是截距,fit$coefficients[-1]是重新系数(%*%是矩阵乘法)。