我仅略懂R
,从未使用过数据框架(Data Frames),这使得理解正确的predict
使用方法变得困难。我的数据是以简单的矩阵形式呈现,并非数据框架,称之为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
获取预测向量的正确语法是什么?
您可以将整个矩阵存储在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. 和 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")
给出了一个荧光奎宁光谱数据集的示例。
要将矩阵制成 data.frame
,只需执行以下操作:
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
中。p
(预测变量的数量)未知时,仍然有些棘手。 - NPEas.formula(sprintf("V1 ~ %s", paste(names(df)[2:4], collapse = " + ")))
。 - Paul HiemstraV2+v3+..
看起来有点笨重。 - pythonic metaphor> 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]
是剩余系数(%*%
表示矩阵乘法)。predict
的花哨功能(置信区间、预测区间)。 - cbeleites unhappy with SX我正在函数内部使用lm来遍历许多不同的线性模型,然后执行留一交叉验证以进行预测。@PaulHiemstra 的sprintf解决了问题。
data.frame
呢? - Paul Hiemstradata.frame
。这就是问题所在。我尝试了几个可行的选项将我的内容转换为数据框,但似乎都不起作用。我相信答案非常简单,只是猜测语法让我感到沮丧。 - pythonic metaphora <- as.data.frame(a)
将对象转换为数据框。 - Simon O'Hanlon