寻找均方误差?
Finding Mean Squared Error?
我生成了一个线性数据集,并使用 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 的正确轨道上?
试试这个:
mean((training.data - predict(training.model))^2)
#[1] 0.4467098
您也可以使用下面提到的非常干净的代码来获得均方误差
install.packages("Metrics")
library(Metrics)
mse(actual, predicted)
第一个数据集是实际数据集:training.data
第二个参数是你会预测的那个:
pd <- predict(training.model , training.data)
mse(training.data$,pd)
看来你还没有做预测所以先根据你的模型预测数据然后计算mse
您可以使用 lm 模型输出的 残差 组件以这种方式找到 mse :
mse = mean(training.model$residuals^2)
注意:如果您来自其他程序(例如 SAS)
他们使用残差的总和和自由度得到平均值。如果您想更准确地估计误差,我建议您也这样做。
mse = sum(training.model$residuals^2)/training.model$df.residual
我在试图弄清楚为什么 R 中的 mean(my_model$residuals^2)
与 SAS 中的 MSE 不同时发现了这一点。
我生成了一个线性数据集,并使用 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 的正确轨道上?
试试这个:
mean((training.data - predict(training.model))^2)
#[1] 0.4467098
您也可以使用下面提到的非常干净的代码来获得均方误差
install.packages("Metrics")
library(Metrics)
mse(actual, predicted)
第一个数据集是实际数据集:training.data 第二个参数是你会预测的那个:
pd <- predict(training.model , training.data)
mse(training.data$,pd)
看来你还没有做预测所以先根据你的模型预测数据然后计算mse
您可以使用 lm 模型输出的 残差 组件以这种方式找到 mse :
mse = mean(training.model$residuals^2)
注意:如果您来自其他程序(例如 SAS) 他们使用残差的总和和自由度得到平均值。如果您想更准确地估计误差,我建议您也这样做。
mse = sum(training.model$residuals^2)/training.model$df.residual
我在试图弄清楚为什么 R 中的 mean(my_model$residuals^2)
与 SAS 中的 MSE 不同时发现了这一点。