我创建了这个程序来估计均方误差(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))
}
我是对的吗?
答案 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个项目向量,无论您是否使用循环。