2016-09-27 82 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)