人們總能通過普通最小二乘回歸進行數據的分析和預測。當選取的解釋變量過多而樣本很少時,無法使用普通最小二乘法進行建模。
R軟件是一款具有強大統計分析功能的開源軟件,利用R軟件進行偏最小二乘回歸建模,可以得到理想的模型,并能夠對回歸系數進行顯著性檢驗,幫助人們發現變量的主要影響因素。
設有q個因變量{y1,y2,…,yq}和p個自變量{x1,x2,…,xp},觀測了n個樣本點,由此構成了自變量與因變量的數據表Xn×p和Yn×q。
偏最小二乘回歸分别在X與Y中提取出成分t1與u1(即:t1、u1分别是x1,x2,…,xp、y1,y2,…,yq的線性組合)。
若選取成分的個數過多,會很容易出現過度拟合的問題,因此需要一個有效的原則來确定成分的個數。采用類似抽樣測試的工作方式,把所有樣本點分成兩部分:第一部分用來重新拟合一個偏最小二乘模型,第二部分的樣本點作為測試數據;帶入拟合模型中求得預測值誤差平方和PRESS=∑((yi-y^i)^2)。再以這種方式重複g次,直到所有的樣本都被預測了一次,最後把每個樣本的預測誤差平方和加總,稱為PRESS。
常見的交叉驗證方法有“留一驗證”,“K折交叉驗證”,“Holdout驗證”等方法,選取一種方法分别求出第1~r個成分對應的PRESS值,取PRESS最小的或者PRESS幾乎不再變化的成分個數作為最終模型選取的成分個數m。
首先需要在加載R的程序包pls;pls包是由Bjrn-HelgeMevik,RonWehrens和Kristian Hovde Liland創建,專門用來做偏最小二乘回歸的程序包。
代碼如下:
>library("pls",lib.loc="C:/ProgramFiles/R/R-2.15.1/library")
再導入自變量和因變量的樣本數據,并且使用scale()函數将數據進行标準化消除量綱的影響。記标準化之後的自變量為X,因變量為Y,進行PLS回歸的代碼如下:
>pls1<-plsr(Y~X,validation="LOO",jackknife=TRUE)#進行偏最小二乘回歸,模型存為對象pls1
>summary(pls1,what="all")#顯示回歸結果(包括PRESS與變異解釋度)。
其中,validation="LOO"表示使用留一交叉驗證計算PRESS,jackknife=TRUE表示使用jackknife法估計回歸系數方差(為後面的顯著性檢驗做準備)。在沒給定成分個數的情況下,會默認使用所有的主成分進行回歸,因此需要在選擇的成分個數盡可能小的前提下,選擇使PRESS最小或幾乎不變的成分個數。假設選定了成分個數為m,重新進行回歸,并對回歸系數假設檢驗,代碼如下:
>pls2<-plsr(Y~X,ncomp=m,validation="LOO",jackknife=TRUE)#“ncomp=m”表示模型成分個數為m>jack。test(pls2)另外還可以使用coef()函數得到回歸系數,scores()得到得分矩陣,loadings()得到載荷矩陣,predict()得到對應樣本的預測值,以及plot()函數将結果以圖的形式展現。
建模過程Step1:導入數據,并進行數據的标準化:
>G1<-read.csv("K:\\WORK\\論文\\R\\grape.csv")
>W1<-read.csv("K:\\WORK\\論文\\R\\wine.csv")
>X<-scale(G1)
>Y<-scale(W1)得到的自變量X是27×59的矩陣,X1~X59依次代表指标。
Step2:進行初步偏最小二乘回歸:>pls1<-plsr(Y~X,ncomp=10,validation="LOO",jackknife=TRUE)
>summary(pls1,what="all")#注:R中默認最多隻能顯示25個主成分對應的各項結果,此處已達到最大個數25)。
其中CV即為不同主成分個數對應的PRESS,adjcv為調整後的PRESS,“TRAINING:%varianceexplained”一欄為主成分對各變量的累積貢獻率。由結果可知,主成分個數為3個時,模型在經過留一交叉驗證法後求得的PRESS總和最小,随着成分個數的增加,PRESS值也沒有太大改變,并且3個成分對各個因變量的累積貢獻率也基本達到了85%,因此定下回歸的成分個數m=3。
Step3:根據成分數m=3,建立最終模型:
>pls2<-plsr(Y~X,ncomp=3,validation="LOO",jackknife=TRUE)
>coef(pls2)#得到回歸系數得到回歸系數後,便能寫出各因變量對所有解釋變量的回歸方程。
使用validationplot()函數可以畫出PLS模型在不同主成分數下對應的RMSEP(由留一交叉驗證法算得的均方預測誤差根),對初始模型的結果進行畫圖。
縱坐标“RMESP”表示均方預測誤差根,橫坐标為不同模型的成分個數;大部分因變量在成分數為3時對應的均方誤差根最小,證明選擇3個成分參與建模是正确的。使用predplot(pls2)函數畫出最終模型的預測效果圖。縱坐标為各因變量的預測值,橫坐标為各因變量的實際測量值;散點集中分布在主對角線上則說明預測效果很好。預測圖(對應15個因變量)的散點大緻都分布在對角線上,說明最終模型的拟合效果較好。Y8對應的散點圖幾乎是一條垂直的線,預測很糟糕;查閱原始數據得知第26個樣本點的Y8原始值是1.6239,遠大于其他隻有0.02左右的數據,因此26号樣本為模型的強影響點,它使得對Y8的拟合效果很差;可以考慮将其剔除重新進行預測。
對于其他的變量,可以直觀的看出效果是不錯的。
使用jack.test()函數進行檢驗,挑出與通過檢驗的回歸系數對應的自變量。
通過顯著性檢驗可以知道各因變量(指标)受哪些自變量(理化指标)的影響較大,及其受影響程度。由表2可知,對因變量Y1而言,對其有顯著影響的自變量有X19、X21、X27DPPH、X28、X29、X37、X40,并且均是對其有正向的影響。有正向影響是顯然成立的,此處也通過了顯著性檢驗,因此可初步判斷此模型與實際相符,對于其他影響顯著的變量便是給了一個探索點,可以通過别的方法深入探讨。同理于其他14個因變量,顯著性檢驗可以初步了解到各因變量的受影響因素。#開源軟件##R語言##R軟件#
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!