数学建模——主成分分析及spss软件操作
主成分分析的基本原理:
一:什么是主成分分析?
? ? ? ? 主成分分析是分析多個變量之間相關性的一種多元統計方法,研究如何通過少數幾個主成分來解釋多個變量之間的內部結構,即從原始變量中導出幾個主分量,使他們盡可能多的保留原始變量的信息,且彼此間互不相關;
主成分分析的目的:數據的壓縮+數據的解釋
常被用來尋找判斷事物或現象的綜合指標,并對綜合指標所包含的信息進行適當的解釋
主成分分析的基本思想(以兩個變量為例):
1:對這兩個變量所攜帶的信息進行濃縮處理
2:假定只有兩個變量x1,x2,由散點圖可見兩個變量存在相關關系(例如這些點都近似存在于y=x這條直線上,x1=x2,這意味著兩個變量提供的信息有重疊,如果不加處理,會消耗大量的時間精力處理數據。
3:如果把兩個變量用一個變量來表示,同時這一個新的變量又盡可能包含原來的兩個變量的信息,這就是降維的過程。
根據初始坐標軸x1x2,可看出所有數據點均可近似的看成存在于y=x的曲線上,現在將坐標軸旋轉用于產生新的變量,變換后的坐標軸為y1,y2,此時變量y1,y2間看不到明顯的函數關系,同時發現變量y1分布寬度更長,跨度比較大,說明變量y1包含了更大的信息量,且y1數據間變化更大,波動更大,進而方差更大,同時y2分布更窄,即變量y2所攜帶的信息量更小,對建模的結果的影響微乎其微,例如:通過一個班的考試成績評估一個學生綜合成績的好壞,語文成績相差很大且分布在各個階段,每個人之間的成績差異很大,重分的很少,而數學成績全部分布在135左右,且相差不大,重分的人很多,那么你要評價一個學生綜合成績的好壞,不是只需要通過語文成績的數據就可以分析了嗎?,所以對于此例,我僅僅用y1的長軸就可以替換y2)
y1與x1,x2的關系
y1=a1x1+a2x2(保留數據)
y2=a3x1+a4x2(刪除數據)
此時就將原來的x1,x2兩個變量替換為y1,實現數據降維
所以主成分分析最關鍵的是找到旋轉坐標軸的參數a1,a2,實現y和x1,x2邏輯關系
基本思想
主成分分析就是設法將原來眾多具有一定相關性的變量(如p個變量),重新組合成一組新的相互無關的綜合變量來代替原變量
通常數學上的處理就是將原來p個變量作線性組合作為新的綜合變量
如果將選取的第一個線性組合即第一個綜合變量記為F1,自然希望F1盡可能多的反映原來變量的值,如何反映?
最經典的方法就是使用方差來表達,即van(F1)越大,表示F1包含的信息越多,在所有的線性組合中方差最大的稱為第一主成分
如果第一主成分不足以代表原來p個變量的信息,在考慮選取F2即第二個線性組合,F2稱為第二主成分,那么F1F2間有何關系呢?
為了有效地反映原來的信息,F1已有的信息不要再出現在F2中,即Y1Y2協方差為0,即cov(Y1,Y2)=0,因此這些主成分之間是互不相關的,而且方差依次遞減,以此類推可能會得到多個主成分,那么什么時候結束呢?
各主成分的累計方差貢獻率>80%或特征根>1
數學模型
?要從原來的所有變量得到新的綜合變量,一種較為簡單的方法是做線性變換,使新的綜合變量為原變量的線性組合
?數學模型的條件
對于任意常數c,有
? ? ? ? var(cF1)=var(F1)
為了使方差var(F1)可比較,要求線性組合的系數滿足規范化體條件
即,線性組合中各變量的前置系數平方和為1
要求原始變量之間存在一定的相關性(相關系數分析:pearson,spearman見我空間)
要求各個綜合變量間互不相關,即協方差為0
為了消除變量量綱不同對方差的影響,通常對數據進行標準化處理,變量之間的協方差即為相關系數
能否做主成分分析的兩大檢驗
1:KMO檢驗結果>0.5
2:Bartlett's檢驗<0.05
滿足上述條件一個即可
?計算過程推導公式需要良好的線性代數基礎,我學的不好,在這里不做描述,數學建模會用matlab編程即可,使用spss也不需要掌握此過程,說白了就是laozi不會講,你也不愿意聽,數學建模也用不到。
?如果前k個主成分累計貢獻率達到85%,則表明前k個主成分基本包含了全部測量指標的基本信息,從而達到了變量降維的目的。
注意:為了消除數據量綱不統一,通常將原始數據進行標準化處理!!!
這里給出一種處理數據的方法——歸一化
Min-max 標準化
? ??新數據=(原數據-極小值)/(極大值-極小值)
? ? 標準化以后,X中元素的取值范圍是[0,1]。
X = (X-Xmin))./(Xmax-Xmin);
代碼部分:
1. [Y,PS] = mapminmax(X,YMIN,YMAX) 2. [Y,PS] = mapminmax(X,FP) 3. Y = mapminmax('apply',X,PS) 4. X = mapminmax('reverse',Y,PS) %反歸一化對于1和2的調用形式來說,X是預處理的數據,Ymin和Ymax是期望的每一行的最小值與最大值,FP是一個結構體成員主要是FP.ymin, FP.ymax.這個結構體就可以代替Ymin和Ymax,1和2的處理效果一樣,只不過參數的帶入形式不同。不設置YMIN 和YMAX,歸一化范圍為0~1。
示例:
結果:
0 0.250000000000000 0.500000000000000 0.750000000000000 1 0 0.250000000000000 0.500000000000000 0.750000000000000 1以上是數學建模主成分分析理論準備,聽不懂沒事兒,下面案例
主成分分析的步驟
1:對原來的p個指標進行標準化,以消除變量在水平和量綱上的影響
2:根據標準化后的矩陣求出相關系數矩陣
3:求出協方差矩陣的特征根和特征向量
4:確定主成分,并對各主成分所包含的信息予以適當解釋
案例
(spss中無法做主成分分析,這里我們采用的是因子分析!,并不影響結果)
根據我國31個省市自治區2006年的6項主要經濟指標數據,進行主成分分析,找出主成分并進行適當解釋
| A | B | C | D | E | F | G | |
| 1 | 地區 | 人均GDP (元) | 財政收入 (萬元) | 固定資產投資 (億元) | 年末總人口 (萬人) | 居民消費水平 (元/人) | 社會消費品零售總額 (億元) |
| 2 | 北京 | 50467 | 11171514 | 3296.4 | 1581 | 16770 | 3275.2 |
| 3 | 天津 | 41163 | 4170479 | 1820.5 | 1075 | 10564 | 1356.6 |
| 4 | 河北 | 16962 | 6205340 | 5470.2 | 6898 | 4945 | 3397.4 |
| 5 | 山西 | 14123 | 5833752 | 2255.7 | 3375 | 4843 | 1613.4 |
| 6 | 內蒙古 | 20053 | 3433774 | 3363.2 | 2397 | 5800 | 1595.3 |
| 7 | 遼寧 | 21788 | 8176718 | 5689.6 | 4271 | 6929 | 3434.6 |
題目分析:自變量過多,是否可以用更少的指標代替這6個變量,即數據降維,利用主成分實現替代
在spss中導入數據開始操作
?1:數據處理——量綱一致化操作(千萬別忘!!!)
點擊上方菜單欄——分析——描述統計——描述
?將變量導入,勾選“將標準化變量另存為變量”
?結果
?數據標準化結果
?接下來進行主成分分析,點擊菜單欄“分析”——“降維”——“因子”
?將已經量綱一致化的數據導入右側變量,點擊右側“描述”,在窗口中勾選“初始解”以及“KMO和巴特利特球型度檢驗”
?緊接著點擊“提取”,在彈出的對話框中勾選“協方差矩陣”,剩下的參數默認不動
?接下來點擊旋轉,勾選“無”
?接下來點擊得分,勾選“保存為變量”,勾選“顯示因子得分系數矩陣”
?點擊確定輸出結果
?由圖可得,第一個特征值為3.042,第二個特征值為2.596,前兩個主成分的累計貢獻率之和為93.967%,超過85%,那么就選擇這兩個變量1,2為主成分
下面讓我們來直觀的分析我們所選取的主成分1,2和6個變量之間的成分矩陣(關聯程度)
可以看出主成分1對于:人均GDP-0.877(負相關),固定資產投資-0.735(負相關),年末總人口0.927,居民消費水平-0.836幾個變量系數較大,所以主成分1可以很好的代表這四個變量,同理,主成分2替代了:財政收入以及社會消費品零售總額兩個因子,可能有人會問了,憑啥我系數越大越能代表你呢?其實就是一個關聯度相關性的問題,比如你開家長會,是不是你爸爸媽媽最可以代表你呢,因為爸爸媽媽和你的關聯度最高啊,其次是哥哥姐姐啥的,對不?
建模中可以通過展示載荷圖將其更立體的展現出來,同時充實你的論文內容
那么如何輸出載荷圖?操作如下
頂部選擇“分析”——“降維”——“因子”——旋轉——勾選載荷圖
?輸出載荷圖如下
?也可看出,橫坐標為主成分1,縱坐標為主成分2,例如人均GDP,橫坐標為-0.877,縱坐標為+0.406,其余變量同理。
或者可以嘗試一下碎石圖:
?輸出圖像
?規定:在比較大的斜率拐點處,發生明顯的斜率變化,拐點之前可以作為主成分
這里我們再把成分矩陣擺在這里
一通猛如虎的分析之后,你還記得主成分分析的關鍵步驟嗎,或者我們之前的操作是為了什么呢?
文章的開頭說過,主成分分析最關鍵的是找到旋轉坐標軸的參數a1,a2,實現y和x1,x2邏輯關系,現在的系數我們已經得到了嗎?確實是得到了一些,比如成分矩陣里的-0、877,-0.220不正是第一第二主成分的前置系數嗎?那接下來我們能直接寫出y1=a1x1+a2x2的表達式嗎?
答案肯定是不可以的,因為spss里沒有專門針對主成分分析的操作,我們剛剛做的是因子分析,我們得到的是因子分析的系數矩陣,所以要進行變換,其中復雜的推導過程就不說了,因為我不會你不聽數模用不到,假設因子分析法產生的一個前置系數為,我們要的是主成分分析法中各主成分的前置系數,計算公式為 uij=aij/(為貢獻率),目前,我們已經得出因子分析法的成分矩陣,只需要除以根號下lamda即可得到真正的主成分分析法的前置系數,實在不理解為啥直接記住這步操作即可,
具體的spss操作如下,在原有的成分矩陣基礎上點擊——編輯內容——在查看器中
?選中數據
粘貼到表格中進行變換,更改變量名為V1,V2
上方菜單欄點擊——轉換——計算
?
?計算真實的主成分分析前置系數(3.042是因子分析法得出的成分矩陣里的系數)
?計算結果W1,W1為第一主成分F1的前置系數
寫出F1結果表達式
F1計算結果
由此,我們將原先的6個指標被我的一個指標F1代替,起到了降維的作用。
?
?F2計算方法同上,再次演示一遍
先計算前置系數W2,W2為第二主成分F2的前置系數
寫出F2結果表達式
?
?
最終結果
至此,原先的六個變量變成了F1,F2兩個變量,降維成功,主成分分析結束。(上圖W2出現的數據亂碼是截圖時候產生的bug)
2021/7/24? 0:56? 留校中 后續會繼續推出數學建模各種模型及代碼,初次寫博客,寫的不好多多見諒,下一次更新一維二維插值算法+擬合算法(matlab編程)
?
?
?
總結
以上是生活随笔為你收集整理的数学建模——主成分分析及spss软件操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言:一种高效、易学的编程语言
- 下一篇: fork()函数详解