8

我已经生成了一个线性数据集,并习惯于lm()将模型拟合到该数据集。我现在正在尝试使用mse()

我知道 MSE 的公式,但我正在尝试使用这个函数。这样做的正确方法是什么?我查看了文档,但我要么很笨,要么只是为那些真正知道自己在做什么的人措辞。

library(hydroGOF)

x.linear <- seq(0, 200, by=1) # x data
error.linear <- rnorm(n=length(x.linear), mean=0, sd=1) # Error (0, 1)
y.linear <- x.linear + error.linear  # y data

training.data <- data.frame(x.linear, y.linear)
training.model <- lm(training.data)
training.mse <- mse(training.model, training.data)

plot(training.data)

mse()需要两个数据帧。我不确定如何从lm(). 我是否在正确的轨道上为我的数据找到合适的 MSE?

4

4 回答 4

15

尝试这个:

mean((training.data - predict(training.model))^2)
#[1] 0.4467098
于 2016-09-27T18:47:17.663 回答
8

您还可以使用下面提到的非常干净的代码来获得均方误差

install.packages("Metrics")
library(Metrics)
mse(actual, predicted)

第一个数据集是实际数据集:training.data 第二个参数是您将预测的数据集:

pd <- predict(training.model , training.data) mse(training.data$,pd)

看来你还没有做预测所以先根据你的模型预测数据,然后计算mse

于 2017-08-15T09:44:06.910 回答
3

您可以使用 lm 模型输出中的残差分量以这种方式查找 mse:

mse = mean(training.model$residuals^2)
于 2017-10-11T14:08:25.483 回答
2

注意:如果您来自另一个程序(如SAS),他们会使用残差的总和和自由度来获得平均值。如果您想要更准确地估计错误,我建议您也这样做。

mse = sum(training.model$residuals^2)/training.model$df.residual

我在试图弄清楚为什么 mean(my_model$residuals^2)R 中的MSESAS中的 MSE 不同时发现了这一点。

于 2019-01-29T18:59:48.350 回答