我已经生成了一个线性数据集,并使用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?
答案 0 :(得分:9)
试试这个:
mean((training.data - predict(training.model))^2)
#[1] 0.4467098
答案 1 :(得分:4)
您还可以使用下面提到的非常干净的代码来获得均方误差
from oscar.defaults import *
第一个数据集是实际的:training.data 第二个参数是你会预测的那个:
install.packages("Metrics")
library(Metrics)
mse(actual, predicted)
似乎你还没有做过预测,所以首先根据你的模型预测数据,然后计算mse
答案 2 :(得分:3)
您可以使用lm模型输出中的残差组件以这种方式查找mse:
mse = mean(training.model$residuals^2)
答案 3 :(得分:0)
注意:如果您来自其他程序(例如 SAS ) 他们使用残差的总和和自由度获得均值。如果您想更准确地估计错误,我建议您这样做。
mse = sum(training.model$residuals^2)/training.model$df.residual
我在尝试找出为什么mean(my_model$residuals^2)
在R中不同于 SAS 中的 MSE 时发现了这一点。