计算错误,MSE和MAPE?

时间:2011-04-04 12:54:30

标签: r

我创建了这个程序来估计均方误差(MSE)和平均绝对百分误差(MAPE): 一切都好吗? pune是一个包含22个数据点的.csv文件。

pune <- read.csv("C:/Users/ervis/Desktop/Te dhenat e konsum energji/pune.csv", header=T,dec=",", sep=";")
pune <- data.matrix(pune,rownames.force=NA)
m1 <- seq(from = 14274.19, to = 14458.17, length.out = 10000)
MSE1 <- numeric(length = 10000)
for(i in seq_along(MSE1)) {
 MSE1[i] <- 1 / length(pune) * sum((pune-m1[i]) ^ 2)
}
MAPE1 <- numeric(length = 10000)
for(i in seq_along(MAPE1)) {
 MAPE1[i] <- 1 / length(pune) * sum(abs((pune-m1[i]) / pune))
}

我是对的吗?

2 个答案:

答案 0 :(得分:9)

Mean squared error似乎在不同的背景下有不同的含义。

对于从群体中抽取的随机样本,样本均值的MSE只是方差除以样本数,即

mse <- function(sample_mean) var(sample_mean) / length(sample_mean)
mse(pune)

对于回归,MSE表示残差的平方和除以那些残差的自由度。

mse.lm <- function(lm_model) sum(residuals(lm_model) ^ 2) / lm_model$df.residual
#or
mse.lm <- function(lm_model) summary(lm_model)$sigma ^ 2

答案 1 :(得分:2)

似乎有很多简单计算的代码。以下是我对数据向量a执行此操作的方法:

a = c(1:10)
mse_a = sum((a - mean(a)) ^ 2) / length(a)

从我所看到的MSE公式是正确的,但整个数据集应该只有一个值,而不是多个值。

如果您的数据只包含22个点,我无法理解为什么您需要创建10,000个项目向量,无论您是否使用循环。