2015-04-19 99 views
0

我已經分手了波士頓的數據集中到訓練和測試,如下設置:如何計算測試數據集中R的殘差標準誤差?

library(MASS) 
    smp_size <- floor(.7 * nrow(Boston)) 
    set.seed(133) 
    train_boston <- sample(seq_len(nrow(Boston)), size = smp_size) 
    train_ind <- sample(seq_len(nrow(Boston)), size = smp_size) 
    train_boston <- Boston[train_ind, ] 
    test_boston <- Boston[-train_ind,] 
    nrow(train_boston) 
    # [1] 354 
    nrow(test_boston) 
    # [1] 152 

現在我使用如下LM功能得到RSE:

train_boston.lm <- lm(lstat~medv, train_boston) 
    summary(train_boston.lm) 
    summary(train_boston.lm)$sigma 

我如何計算剩餘標準誤差爲測試數據集?我無法在測試數據集上使用lm函數。有沒有任何方法可以計算測試數據集上的RSE?

回答

2

這裏您殘留標準錯誤是一樣的

summary(train_boston.lm)$sigma 
# [1] 4.73988 

sqrt(sum((fitted(train_boston.lm)-train_boston$lstat)^2)/ 
    (nrow(train_boston)-2)) 
# [1] 4.73988 

你失去的估計兩個參數,因此你的自由度是n-2

隨着您的測試數據,你沒有真正做同樣的估算,但是如果您想計算相同類型的計算,則用模型中的預測值代替原始模型擬合值的新數據,則可以執行以下操作:

sqrt(sum((predict(train_boston.lm, test_boston)-test_boston$lstat)^2)/ 
    (nrow(test_boston)-2)) 

雖然它可能更有意義只是爲了計算預測殘差

sd(predict(train_boston.lm, test_boston)-test_boston$lstat) 
+0

的標準差我得到的RSE測試設定得比訓練集低?情況總是如此嗎? – elysefaulkner

+0

否。測試集是完全獨立的。你可以做一個測試集來獲得你想要的任何RSE。這是因爲RSE在測試集中的含義並不像它在訓練集中那樣。 – MrFlick