多项式拟合lm_R语言多项式回归
含有x和y這兩個(gè)變量的線(xiàn)性回歸是所有回歸分析中最常見(jiàn)的一種;而且,在描述它們關(guān)系的時(shí)候,也是最有效、最容易假設(shè)的一種模型。然而,有些時(shí)候,它的實(shí)際情況下某些潛在的關(guān)系是非常復(fù)雜的,不是二元分析所能解決的,而這時(shí),我們需要多項(xiàng)式回歸分析來(lái)找到這種隱藏的關(guān)系。
讓我們看一下經(jīng)濟(jì)學(xué)里的一個(gè)例子:假設(shè)你要買(mǎi)一個(gè)具體的產(chǎn)品,而你要買(mǎi)的個(gè)數(shù)是q。如果產(chǎn)品的單價(jià)是p,然后,你要給y元。其實(shí),這就是一個(gè)很典型的線(xiàn)性關(guān)系。而總價(jià)和產(chǎn)品數(shù)量呈正比例關(guān)系。下面,根據(jù)這個(gè)實(shí)例,我們敲擊行代碼來(lái)作它們的線(xiàn)性關(guān)系圖:
p
q
y
plot(q,y,type='l',col='red',main='Linear relationship')
下面是它的線(xiàn)性關(guān)系圖:
現(xiàn)在,我們看到這確實(shí)是一個(gè)不錯(cuò)的估計(jì),這個(gè)圖很好的模擬成q和y的線(xiàn)性關(guān)系。然而,當(dāng)我們?cè)谧鲑I(mǎi)賣(mài)要考慮別的因素的時(shí)候,諸如這種商品要買(mǎi)多少,很有可能,我們可以通過(guò)詢(xún)問(wèn)和討價(jià)賺得折扣,或者,當(dāng)我們?cè)絹?lái)越多的買(mǎi)一種具體的商品的時(shí)候,我們也可能讓這種商品升價(jià)了。
這樣,我們根據(jù)上面的條件,我們?cè)趯?xiě)腳本的時(shí)候,我們要注意,總價(jià)與產(chǎn)品的數(shù)量不再具有線(xiàn)性關(guān)系了:
y
plot(q,y,type='l',col='navy',main='Nonlinear relationship',lwd=3)
利用多項(xiàng)式回歸,我們可以擬合n>1張訂單所產(chǎn)生的數(shù)據(jù)的模型,并且能試著建一個(gè)非線(xiàn)性模型。
怎樣擬合一個(gè)多項(xiàng)式回歸
首先,當(dāng)我們要?jiǎng)?chuàng)建一串虛擬隨機(jī)數(shù)的時(shí)候,我們必須總要記得寫(xiě)set.seed(n)。這樣做,隨機(jī)數(shù)生成器總能產(chǎn)生同等數(shù)目的數(shù)據(jù)。
set.seed(20)
預(yù)測(cè)變量q:使用seq來(lái)快速產(chǎn)生等間距的序列:
q
預(yù)測(cè)y值:
y
我們現(xiàn)在產(chǎn)生一些噪音并把它添加到模型中:
noise
noisy.y
對(duì)噪聲數(shù)據(jù)進(jìn)行畫(huà)圖:
plot(q,noisy.y,col='deepskyblue4',xlab='q',main='Observed data')
lines(q,y,col='firebrick1',lwd=3)
下面的這個(gè)圖根據(jù)觀測(cè)數(shù)據(jù)進(jìn)行模擬。其中,模擬的圖的散點(diǎn)是藍(lán)色的,而紅色線(xiàn)則是信號(hào)(信號(hào)是一種術(shù)語(yǔ),它通常用于表示我們感興趣的東西的通常變化趨勢(shì))。
我們得出的模型應(yīng)當(dāng)是 y = aq + bq2 + c*q3 + cost。
現(xiàn)在,我們用R對(duì)此進(jìn)行模擬。要擬合一個(gè)多項(xiàng)式模型,你也可以這樣用:
model
或者:
model
然而,我們要知道q,I(q^2),I(q^3)存在相關(guān)的關(guān)系,而這些相關(guān)變量很有可能引起某些問(wèn)題的產(chǎn)生。這時(shí),使用poly()可以避免這個(gè)問(wèn)題,因?yàn)樗莿?chuàng)建一個(gè)垂直的多項(xiàng)式。因此,我喜歡第一種方法:
summary(model)
Call:
lm(formula =noisy.y ~poly(q,3))
Residuals:
Min1QMedian3QMax
-212.326-51.1864.27661.485165.960
Coefficients:
EstimateStd.Errort value Pr(>|t|)
(Intercept)513.6155.60291.69<2e-16***
poly(q,3)12075.89979.42226.14<2e-16***
poly(q,3)2-108.00479.422-1.360.175
poly(q,3)3864.02579.42210.88<2e-16***
---
Signif.codes:0‘***’0.001‘**’0.01‘*’0.05‘.’0.1‘’1
Residualstandard error:79.42on 197degrees of freedom
MultipleR-squared:0.8031,AdjustedR-squared:0.8001
F-statistic:267.8on 3and197DF,p-value:0
我們可以使用confint()來(lái)獲得一個(gè)模型的參數(shù)的置信區(qū)間。
一下是模型參數(shù)的置信區(qū)間:
confint(model,level=0.95)
2.5%97.5%
(Intercept)502.5676524.66261
poly(q,3)11919.27392232.52494
poly(q,3)2-264.629248.62188
poly(q,3)3707.39991020.65097
現(xiàn)在,我們要作一個(gè)擬合VS殘差圖。如果這是一個(gè)擬合效果比較不錯(cuò)的模型,我們應(yīng)該看不到任何一種模型的模式特征:
plot(fitted(model),residuals(model))
整體來(lái)說(shuō),這個(gè)模型的擬合效果還是不錯(cuò)的,畢竟殘差為0.8。第一和第三個(gè)訂單序列的系數(shù),在統(tǒng)計(jì)學(xué)當(dāng)中,是相當(dāng)這樣的,這樣在我們的意料之中。現(xiàn)在,我們可以使用predict()函數(shù)來(lái)獲得擬合數(shù)據(jù)以及置信區(qū)間,這樣,我們可以不按照數(shù)據(jù)來(lái)作圖。
下面是預(yù)測(cè)值和預(yù)測(cè)置信區(qū)間:
predicted.intervals
在已有的圖像中添加擬合線(xiàn):
lines(q,predicted.intervals[,1],col='green',lwd=3)
lines(q,predicted.intervals[,2],col='black',lwd=1)
lines(q,predicted.intervals[,3],col='black',lwd=1)
添加圖例:
legend("bottomright",c("Observ.","Signal","Predicted"),
col=c("deepskyblue4","red","green"),lwd=3)
下面是它的擬合圖像:
我們可以看到我們的模型在數(shù)據(jù)的擬合方面做的不錯(cuò),我們也因此感到非常滿(mǎn)意。
注意:多項(xiàng)式回歸是一種更能強(qiáng)大的工具。可是,我們也可能得到事與愿違的結(jié)果:在這個(gè)例子中,我們知道我們的信號(hào)是使用三次多項(xiàng)式而產(chǎn)生的,然而,當(dāng)我們?cè)诜治鰧?shí)際數(shù)據(jù)的時(shí)候,我們通常對(duì)此不知情,因此,正因?yàn)槎囗?xiàng)式次數(shù)n大于4的時(shí)候會(huì)產(chǎn)生過(guò)度擬合的情況,我們要在這里注意一下。但你的模型取了噪音而不是信號(hào)的時(shí)候會(huì)產(chǎn)生過(guò)擬合的情況;甚至,當(dāng)你在現(xiàn)有的數(shù)據(jù)進(jìn)行模型優(yōu)化的時(shí)候,當(dāng)你要嘗試預(yù)測(cè)新的數(shù)據(jù)的時(shí)候就不好了,它會(huì)導(dǎo)致缺失值的產(chǎn)生。
總結(jié)
以上是生活随笔為你收集整理的多项式拟合lm_R语言多项式回归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Elasticsearch7.15.2
- 下一篇: word、excel、ppt 办公文件