我R
只使用了一点点,从不使用数据帧,这使得理解预测的正确使用变得困难。我将数据放在普通矩阵中,而不是数据框中,将它们称为a
和b
,它们分别是N x p
和M x p
矩阵。我可以运行回归lm(a[,1] ~ a[,-1])
。我想使用生成的lm
对象b[,1]
从b[,-1]
. 我天真的猜测是predict(lm(a[,1] ~ a[,-1]), b[,-1])
行不通的。lm
使用获取预测向量的正确语法是什么?
问问题
14694 次
4 回答
7
您可以将整个矩阵存储在 a 的一列中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.)解释了这种技术.
另一个带有光谱数据集(奎宁荧光)的示例在vignette ("flu")
我的包 hyperSpec 中。
于 2013-03-07T15:18:32.257 回答
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
.
于 2013-03-07T14:53:11.857 回答
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]
是剩余系数(并且%*%
是矩阵乘法)。
于 2013-03-07T14:50:09.533 回答
0
我在函数内部使用 lm 来循环遍历许多不同的线性模型,然后对预测执行留一法交叉验证。@PaulHiemstra 的 sprintf 成功了。
于 2021-11-24T22:45:41.730 回答