2016-09-27 80 views
0

我制作了一个线性数据集,并使用lm()来将模型拟合到该数据集。我现在试图找到MSE使用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

@ZheyuanLi我或多或少地问,我的预测/模拟Y值的集合可以来自公式。在mse()函数中,它需要一个观察和模拟的数据帧。我需要知道如何使用这两个数据框。 – KingDan

+0

我不知道你为什么要用这个奇怪的函数而不是'mean(training.model $ residuals^2)' – Gregor

+0

你可以从模型'training.model $ fitted.values'中得到拟合的值,但是它们是一个矢量,而不是数据框。所以我想替代方案是'hydroGOF :: mse(data.frame(training.model $ fitted.values),training.data [[“y.linear”]])'...我也会**强烈* *建议在拟合模型时指定一个公式。就像你所拥有的那样,我认为你在'y'上倒退'x',这可能不是你想要的。 – Gregor

回答

5

试试这个:

mean((training.data - predict(training.model))^2) 
#[1] 0.4467098 
+0

我被建议使用'mse()'功能,但这是我更加适应的一种方式。谢谢! – KingDan

1

您还可以使用下面提及的代码,这是非常干净的获得均方误差

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

第一个数据集上这是一个现实:training.data 第二个参数是你会预测的一个参数:

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

好像你还没有做预测又是那么首先要根据你的模型预测数据,然后计算MSE

1

您可以使用从LM模型输出的残留组件以这种方式找到MSE:

mse = mean(training.model$residuals^2)