仔細評估模型預測
2016年12月2日
由約翰·摩
(本文首次發(fā)表于的R -贏矢量博客 梦皮,并親切地促進了R-博客)
有一件事我教的是:評估回歸模型的性能時呕臂, 你不應(yīng)該使用關(guān)聯(lián)作為你的分數(shù) 截歉。
這是因為相關(guān)性告訴你結(jié)果的重新縮放是否有用脓诡,但是你想知道手中的結(jié)果是否真的有用。 例如:火星氣候軌道器軟件在磅-秒為單位期待的命令發(fā)出推力命令擂红,發(fā)動機是在牛頓秒為單位 仪际。 這兩個量通過1.4881639的常數(shù)比相關(guān),因此以磅 - 秒為單位測量的任何值與以牛頓 - 秒為單位的相同測量值具有1.0的相關(guān)性昵骤。 然而树碱,一個不是另一個,區(qū)別是為什么火星氣候軌道器“遇到火星在低于預期的高度和由于大氣壓力分解变秦。
需要毫無意外地引發(fā)了與計算相關(guān)相關(guān)的隱式重新縮放方便的直接F-測試是我們提供的原因之一SIGR [- R庫成榜。 然而,即使事情可能變得混亂伴栓。
請閱讀一個討厭的小例子伦连。
考慮以下“無害數(shù)據(jù)幀”。
d <-data.frame(prediction = c(0,0钳垮,-1,-2,0,0额港,-1饺窿,-2), actual = c(2,3,1,2,2,3,1,2))
檢查“的質(zhì)量推薦的測試prediction
相關(guān)的”移斩,“ actual
”是F-檢驗(這是測試stats::lm
使用)肚医。 我們可以直接運行該測試sigr
(假設(shè)我們已經(jīng)安裝包)绢馍,如下所示:
sigr :: formatFTest(d,'prediction'肠套,'actual'舰涌,format ='html')$ formatStr
F測試總結(jié)*:(R 2
- = -16,F(xiàn)(1,6)= - 5.6你稚,P = NS)瓷耙。
sigr
報告的R平方-16(請參閱這里的R平方的一些討論)。 這可能是混亂的刁赖,但它正確傳達我們沒有模式搁痛,實際上是“ prediction
”是比只使用平均(一個非常傳統(tǒng)的空模型)差。
然而宇弛, cor.test
似乎認為“ prediction
”是一個可用的模型:
cor.test(d $ prediction鸡典,d $ actual) Pearson的乘積矩相關(guān) data:d $ prediction和d $ actual t = 1.1547,df = 6枪芒,p值= 0.2921備選假設(shè):真相關(guān)不等于0 95%的置信區(qū)間: -0.3977998 0.8697404樣本估計: 科爾 0.4264014
這是所有的預測彻况,其中sum((d$actual-d$prediction)^2)==66
比大sum((d$actual-mean(d$actual))^2)==4
。 我們專注于影響措施(如R平方)舅踪,因為我們可以通過添加更多的數(shù)據(jù)行來驅(qū)動p值纽甘。 我們的觀點是:使用這個模型比使用實際(2)的平均值作為常數(shù)預測器更糟糕。 在我看來硫朦,這不是一個好的預測贷腕。 和lm
似乎同樣興奮的“ prediction
”。
summary(lm(actual?prediction咬展,data = d))呼叫: lm(公式=實際預測泽裳,數(shù)據(jù)= d)殘留: 最小1Q中位數(shù)3Q最大 -0.90909 -0.43182 0.09091 0.52273 0.72727 系數(shù): 估計標準 誤差t值Pr(> | t |) (截距)2.2727 0.3521 6.455 0.000655 預測值0.3636 0.3149 1.155 0.292121 --- --- Signif。 代碼:0''0.001'*'0.01''0.05'破婆。 0.1“1殘余標準誤差:在6自由度上為0.7385多次R平方:0.1818涮总,調(diào)整R平方:0.04545 F統(tǒng)計:1.333對1和6DF,p-值:0.2921
一個理由不相信lm
的結(jié)果是沒有得分“質(zhì)量prediction
”祷舀。 它拿下的質(zhì)量“ 0.3636prediction + 2.2727
”瀑梗。它可以是“案件0.3636prediction + 2.2727
”實際上是一個很好的預測。 但 這并不能幫助我們裳扯,如果是“ prediction
”即將展現(xiàn)在我們的老板或投產(chǎn)抛丽。 我們可以嘗試通過堅持以緩解這種lm
盡量呆在通過關(guān)閉攔截更接近原始或使用“偏移0+
”符號。 這看起來像下面饰豺。
summary(lm(actual?0 + prediction亿鲜,data = d))呼叫: lm(公式=實際?0 +預測,數(shù)據(jù)= d)殘留: 最小1Q中位數(shù)3Q最大 0.00 0.00 1.00 2.25 3.00 系數(shù): 估計標準 誤差t值Pr(> | t |)預測-1.0000 0.6094 -1.641 0.145殘余標準誤差:1.927在7自由度上多次R平方:0.2778冤吨,調(diào)整R平方:0.1746 F統(tǒng)計:2.692對1和7DF蒿柳,p-值:0.1448
即使是lm(0+)
的調(diào)整后的預測是不好的饶套,因為我們看到如下:
d $ lmPred <-predict(lm(actual?0 + prediction,data = d)) sum((d $ actual-d $ lmPred)^ 2) [1] 26
是的垒探, lm(0+)
找到了一種方法妓蛮,提高了預測; 但是改進的預測仍然非常糟糕(比使用良好選擇的常數(shù)更差)。 它是很難說“ -prediction
”是同一型號為“ prediction
”圾叼。
現(xiàn)在sigr
是相當新的代碼蛤克,因此它是一個有點大膽的說,這是正確的褐奥,當它與標準方法不同意咖耘。 然而sigr
就在這種情況下。 標準方法沒有那么多錯誤撬码,因為兩個原因:
他們正在回答不同的問題儿倒。 F檢驗旨在檢查手中的預測是否好; “cor.test
”和“ lm %>% summary
”被設(shè)計為檢查預測的任何重新縮放是實際上良好。 這些是不同的問題呜笑。 使用“ cor.test
”或“ lm %>% summary
”來測試潛在變量的工具是一個不錯的主意夫否。 在這些測試中隱藏的重新處理與稍后在模型中使用變量一致。使用它們來評分應(yīng)該直接使用的模型結(jié)果是錯誤的叫胁。
從標準R代碼的角度來看凰慈,什么是正確的“空模型”是不明顯的。還記得我們最初的觀點:對質(zhì)量的措施lm(0+)
的設(shè)計驼鹅,看看如何lm(0+)
工作微谓。 這意味著lm(0+)
得分它的輸出(而不是它的輸入)的質(zhì)量,它得到信貸的預測翻轉(zhuǎn)跡象输钩。 它也認為自然零模型是一個它可以形成沒有可變驅(qū)動效應(yīng)豺型。 由于在這些模型中沒有攔截或“DC-術(shù)語”(由“引發(fā)0+
”符號)盛大平均不被視為一個似是而非的空模式,因為它是不是在建模情況的概念空間lm
被提交买乃。 或者從help(summary.lm)
R ^ 2姻氨,'由模型解釋的方差分數(shù)', R ^ 2 = 1-Sum(R [i] ^ 2)/ Sum((y [i] -y *)^ 2) 其中y *是y [i]的平均值剪验,否則為0肴焊。
我承認,這是非常令人困惑功戚。 但它對應(yīng)于文檔娶眷,從建模的角度來看是有意義的。 它是正確的啸臀。 空模型從平均值到零的無聲切換在其定義的上下文中是有意義的茂浮。對于測試我們的預測沒有意義,但是這只是使用正確的F檢驗而不是試圖攻擊的另一個原因“ cor.test
”或“ lm(0+) %>% summary
”來計算它壳咕。
而這正是sigr
大概是:標準測試(使用R
提供的實現(xiàn))略有不同的調(diào)用約定席揽,以便更好地意向文件(在我們的情況下,幾乎總是測量模型谓厘,從模型構(gòu)建單獨的質(zhì)量)幌羞。 它是一個新的庫,所以它還沒有實現(xiàn)其目標所需的文檔竟稳,但我們最終會到達那里属桦。