99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀R語言多項式回歸
R語言多項式回歸
2016-10-17
收藏

R語言多項式回歸

含有x和y這兩個變量的線性回歸是所有回歸分析中最常見的一種;而且,在描述它們關(guān)系的時候,也是最有效、最容易假設(shè)的一種模型。然而,有些時候,它的實際情況下某些潛在的關(guān)系是非常復(fù)雜的,不是二元分析所能解決的,而這時,我們需要多項式回歸分析來找到這種隱藏的關(guān)系。

讓我們看一下經(jīng)濟學(xué)里的一個例子:假設(shè)你要買一個具體的產(chǎn)品,而你要買的個數(shù)是q。如果產(chǎn)品的單價是p,然后,你要給y元。其實,這就是一個很典型的線性關(guān)系。而總價和產(chǎn)品數(shù)量呈正比例關(guān)系。下面,根據(jù)這個實例,我們敲擊行代碼來作它們的線性關(guān)系圖:

  1. p <- 0.5
  2. q <- seq(0,100,1)
  3. y <- p*q
  4. plot(q,y,type='l',col='red',main='Linear relationship')

下面是它的線性關(guān)系圖:

現(xiàn)在,我們看到這確實是一個不錯的估計,這個圖很好的模擬成q和y的線性關(guān)系。然而,當我們在做買賣要考慮別的因素的時候,諸如這種商品要買多少,很有可能,我們可以通過詢問和討價賺得折扣,或者,當我們越來越多的買一種具體的商品的時候,我們也可能讓這種商品升價了。
這樣,我們根據(jù)上面的條件,我們在寫腳本的時候,我們要注意,總價與產(chǎn)品的數(shù)量不再具有線性關(guān)系了:

  1. y <- 450 + p*(q-10)^3
  2. plot(q,y,type='l',col='navy',main='Nonlinear relationship',lwd=3)

利用多項式回歸,我們可以擬合n>1張訂單所產(chǎn)生的數(shù)據(jù)的模型,并且能試著建一個非線性模型。

怎樣擬合一個多項式回歸

首先,當我們要創(chuàng)建一串虛擬隨機數(shù)的時候,我們必須總要記得寫set.seed(n)。這樣做,隨機數(shù)生成器總能產(chǎn)生同等數(shù)目的數(shù)據(jù)。

  1. set.seed(20)

預(yù)測變量q:使用seq來快速產(chǎn)生等間距的序列:

  1. q <- seq(from=0, to=20, by=0.1)

預(yù)測y值:

  1. y <- 500 + 0.4 * (q-10)^3

我們現(xiàn)在產(chǎn)生一些噪音并把它添加到模型中:

  1. noise <- rnorm(length(q), mean=10, sd=80)
  2. noisy.y <- y + noise

對噪聲數(shù)據(jù)進行畫圖:

  1. plot(q,noisy.y,col='deepskyblue4',xlab='q',main='Observed data')
  2. lines(q,y,col='firebrick1',lwd=3)

下面的這個圖根據(jù)觀測數(shù)據(jù)進行模擬。其中,模擬的圖的散點是藍色的,而紅色線則是信號(信號是一種術(shù)語,它通常用于表示我們感興趣的東西的通常變化趨勢)。

我們得出的模型應(yīng)當是 y = aq + bq2 + c*q3 + cost。

現(xiàn)在,我們用R對此進行模擬。要擬合一個多項式模型,你也可以這樣用:

  1. model <- lm(noisy.y ~ poly(q,3))

或者:

  1. model <- lm(noisy.y ~ x + I(X^2) + I(X^3))

然而,我們要知道q,I(q^2),I(q^3)存在相關(guān)的關(guān)系,而這些相關(guān)變量很有可能引起某些問題的產(chǎn)生。這時,使用poly()可以避免這個問題,因為它是創(chuàng)建一個垂直的多項式。因此,我喜歡第一種方法:

  1. summary(model)
  2. Call:
  3. lm(formula = noisy.y ~ poly(q, 3))
  4. Residuals:
  5.      Min       1Q   Median       3Q      Max
  6. -212.326  -51.186    4.276   61.485  165.960
  7. Coefficients:
  8.             Estimate Std. Error t value Pr(>|t|)
  9. (Intercept)  513.615      5.602   91.69   <2e-16 ***
  10. poly(q, 3)1 2075.899     79.422   26.14   <2e-16 ***
  11. poly(q, 3)2 -108.004     79.422   -1.36    0.175
  12. poly(q, 3)3  864.025     79.422   10.88   <2e-16 ***
  13. ---
  14. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  15. Residual standard error: 79.42 on 197 degrees of freedom
  16. Multiple R-squared:  0.8031,    Adjusted R-squared:  0.8001
  17. F-statistic: 267.8 on 3 and 197 DF,  p-value:  0

我們可以使用confint()來獲得一個模型的參數(shù)的置信區(qū)間。

以下是模型參數(shù)的置信區(qū)間:

  1. confint(model, level=0.95)
  2.                 2.5 %     97.5 %
  3. (Intercept)  502.5676  524.66261
  4. poly(q, 3)1 1919.2739 2232.52494
  5. poly(q, 3)2 -264.6292   48.62188
  6. poly(q, 3)3  707.3999 1020.65097

現(xiàn)在,我們要作一個擬合VS殘差圖。如果這是一個擬合效果比較不錯的模型,我們應(yīng)該看不到任何一種模型的模式特征

  1. plot(fitted(model),residuals(model))

整體來說,這個模型的擬合效果還是不錯的,畢竟殘差為0.8。第一和第三個訂單序列的系數(shù),在統(tǒng)計學(xué)當中,是相當這樣的,這樣在我們的意料之中?,F(xiàn)在,我們可以使用predict()函數(shù)來獲得擬合數(shù)據(jù)以及置信區(qū)間,這樣,我們可以不按照數(shù)據(jù)來作圖。 下面是預(yù)測值和預(yù)測置信區(qū)間:

  1. predicted.intervals <- predict(model,data.frame(x=q),interval='confidence',level=0.99)

在已有的圖像中添加擬合線:

  1. lines(q,predicted.intervals[,1],col='green',lwd=3)
  2. lines(q,predicted.intervals[,2],col='black',lwd=1)
  3. lines(q,predicted.intervals[,3],col='black',lwd=1)

添加圖例:

  1. legend("bottomright",c("Observ.","Signal","Predicted"),
  2. col=c("deepskyblue4","red","green"), lwd=3)

下面是它的擬合圖像:

我們可以看到我們的模型在數(shù)據(jù)的擬合方面做的不錯,我們也因此感到非常滿意。

注意:多項式回歸是一種更能強大的工具??墒?,我們也可能得到事與愿違的結(jié)果:在這個例子中,我們知道我們的信號是使用三次多項式而產(chǎn)生的,然而,當我們在分析實際數(shù)據(jù)的時候,我們通常對此不知情,因此,正因為多項式次數(shù)n大于4的時候會產(chǎn)生過度擬合的情況,我們要在這里注意一下。但你的模型取了噪音而不是信號的時候會產(chǎn)生過擬合的情況;甚至,當你在現(xiàn)有的數(shù)據(jù)進行模型優(yōu)化的時候,當你要嘗試預(yù)測新的數(shù)據(jù)的時候就不好了,它會導(dǎo)致缺失值的產(chǎn)生。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }