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

熱線電話:13121318867

登錄
首頁精彩閱讀【連載8】如何spss做因子分析及主成分分析
【連載8】如何spss做因子分析及主成分分析
2014-12-04
收藏

上一篇文章我們討論完了回歸的最后一部分內(nèi)容,非線性回歸。這一次我們正式結(jié)束回歸,開始討論降維分析。在之前關于相關的內(nèi)容里,我們就說過,做相關,回歸等分析的時候,消除多重共線性是一個很復雜很復雜的問題,一次數(shù)據(jù)分析的變量多達三四十個是很正常的情況,這個時候調(diào)整變量的效果往往微乎其微,因此就需要用到一個有力辦法,降維。

現(xiàn)在我們就來談一談降維。首先要先明確一個概念,什么是降維。我們知道“維”是一個數(shù)學領域的一個術語,放在統(tǒng)計分析里邊,我們可以簡單的理解為一個變量就是一個維。降維的意思就是說把原來的許多變量通過一些方法壓縮為較少的變量,這樣變量數(shù)減少了,也就是維數(shù)減少了,也就叫降維。因子分析由于應用廣泛,所以是最廣為人知的降維方法。此外由于主成分分析和因子分析聯(lián)系非常緊密,并且,注意,并且,spss沒有獨立的模塊來做主成分分析,所以,我就同時討論這兩種技術了。

【一】因子分析和主成分分析的異同

因子分析和主成分分析的相同和不同的地方是每一個希望使用因子分析這種分析手段的人所必須要掌握的知識點。在博客或者各種論壇上,有許多相關的資源貼。我們在這里不從數(shù)學層面進行討論,主要從應用層面來展開討論。

對于因子分析和主成分分析最主要的也是最重要的一點是:因子分析需要旋轉(zhuǎn)矩陣,主成分分析則不用。(實際上,在spss里邊,如果你做因子分析時旋轉(zhuǎn)方法為不旋轉(zhuǎn)的話,那你做的就是主成分分析)

第二個不同點在于結(jié)果的解釋:對于因子分析,要求公共因子不相關。主成分分析則不要求這個。這里不得不講一點點原理性的東西。因子分析的目的是將輸入變量表示成各因子的線性組合,而主成分分析則是試圖選擇出主成分,其表示為各變量的線性組合。(基本上比較繞)關鍵在于,主成分分析的目的是解釋變量的總方差,而因子分析則側(cè)重于解釋各變量之間的協(xié)方差。也就是說,對于主成分分析,我們的目的是提取出主成分,用我們的變量來表示。而對于因子分析,我們的目的是找出公共因子,用這些公共因子去表示我們原有的變量。這個因果關系的不同,就要求因子分析中我們找到的公共因子可以從邏輯上被解釋。

因為我們不涉及原理的解說,因此主要的異同點就是這些了。

【二】主成分分析的操作方法

因為spss里并沒有專門的模塊可以用來做主成分分析,所以我們操作主成分析的時候,需要選擇菜單分析——降維——因子分析,在因子分析的模塊下做主成分分析。

在主面板里把你想要分析的變量選到右邊的大框框里。注意,這里不選地區(qū)啊,省份啊這些標志性的變量。你要選你認為信息有重合的變量,舉個例子,比如身高和坐高在一項健康狀況里有重疊性的作用,那你就把它們選到這個變量框里。下邊的選擇變量是用來選擇個案的,一般不需要管它。

打開描述對話框,全部勾選。打開抽取對話框,抽取對話框最上邊有一個方法的下拉菜單。默認的是主成分。除了主成分以外,還有六種抽取方法,我們要做的是主成分分析,當然默認就可以啦,下邊的輸出勾選碎石圖,未旋轉(zhuǎn)的因子解。在下邊有一個抽取。一般基于特征值就可以了。下邊還有一個最大收斂性迭代次數(shù),默認是25。打開旋轉(zhuǎn)對話框,勾選載荷圖。打開保存對話框,勾選保存為變量,顯示因子得分系數(shù)矩陣。

注意,注意?,F(xiàn)在我們打開選項對話框。將缺失值勾選為使用均值替換。如果你的變量有缺失值,那么一定要千萬記得這一步。不然你的變量得分會有缺失,就是說你的結(jié)果基本廢了。我老是搞忘掉這一步,然后每次都想哭TAT。

【三】主成分分析的結(jié)果解釋

第一個要看的表是kmo,這個表里的kmo度量值(第一行)告訴你你的數(shù)據(jù)是否適合做因子分析/主成分分析。這個值大于0.65就可以了。通常只要你的變量確實彼此之間有重疊,直觀的想想都覺得有關系的話,而且變量數(shù)比較多的話,那kmo一般是過得去的。然后第二個表看解釋的總方差,你看第二行有一個方差的百分比,第三行是累計百分比。我們主要看這兩個指標,第一個指標告訴你每個主成分的解釋的方差(你不用去管什么叫解釋的方差,記住那個指標有用,怎么判斷就可以了。),第二個指標是前幾個主成分加起來的方差。仔細觀察,你會發(fā)現(xiàn)這兩個指標之間存在一個加法和和的關系。

由于我們之前默認的提取方法是基于特征值,所以這里會自動為你提取主成分。不過我們一般認為提取的方差需要大于百分之八十五,如果你的主成分特征值大于1的累計方差值小于85%,那么很不幸的,我需要告訴你,你得重做一遍。這時候你的抽取里的個數(shù),就選那個抽取固定的數(shù)目。然后設定的數(shù)目為你查這個表查詢的得到的累計方差大于85%的主成分數(shù)目。

然后看成分矩陣和成分系數(shù)矩陣,這兩個表都是反映變量在成分的權重。不過成分矩陣可以看成是反映了一個絕對值,第二個則反映了用變量寫成分的表達式怎么寫(有了表達式,才能算出成分得分哇)。這個類似于啊,類似于回歸里邊的標準系數(shù)和非標準系數(shù)。

最后一個是綜合得分的計算,我們上邊把成分得分保存為了變量,用這些成分得分可以計算一個綜合得分出來,算法如下,用每個成分的方差的百分比作為權重,將成分相加就可以了。綜合得分的用處在于排名次,比如看看全國31個省的通信質(zhì)量的高低,通過綜合得分就可以來排名。此外做聚類的時候哇,也可以用這個。

【四】因子分析的操作方法

類似于主成分分析。只是旋轉(zhuǎn)那里勾選最大方差法。和大家公認的抽取方法里主成分法最好以外,選裝方法一般認為最大方差法最好。

【五】因子分析的結(jié)果解釋

類似于主成分分析。只是多了一個旋轉(zhuǎn)成分矩陣。咳,注意了注意了。因子分析最精髓的一個點就在這里了。

你看這個表的時候一定要很小心仔細,這個表的行是每個成分,列是每個變量,然后每個格格里對應的數(shù)就是相對應的變量在相對應的成分里的權重指標。我們需要反過來付過去的做因子分析,最后達到一個什么狀態(tài)呢?最后達到每個成分在所有的變量里邊有一個系數(shù)占絕對優(yōu)勢,明顯比其他系數(shù)大的多。舉個例子,一個變量在三個成分的系數(shù)分別是0.3,0.2,0.8,哎,這個里邊0.8明顯比其他的大,這個因子就可以。再比如,這三個系數(shù)是0.4,0.6,0.6,那由于出現(xiàn)了兩個最大值,所以呢這個因子就不可以。通常來說,認為這個最大的系數(shù)和第二大要差0.2,這樣才認為占了絕對優(yōu)勢。

上邊我們說過因子分析的重點在于,用公共因子去解釋變量。認為變量收到了公共因子的影響。也就是說哇,我們認為有一個公共因子潛在的影響到了幾個變量,使得他們表現(xiàn)出了多重共線性。所以呢,旋轉(zhuǎn)成分矩陣里就要表現(xiàn)出這個公共因子對于變量的影響。一個變量不能既受這個因子的影響,又受那個因子的影響,一個變量只能受一個因子影響,所以它的系數(shù)只能有一個占大頭。

然后我們就有了分別代表一些不同變量的成分(既然一個變量只能由一個成分代表,那么每個成分代表的變量也就不同哇),然后,注意,然后,我們就可以給這些成分命名了。

你大概很惱火,有完沒完啊,不過命名還是挺簡單的一個步驟,你觀察你的每個成分所代表的變量,然后給它們命個名字。比如你的一個成分是身高,坐高,體重,那你就命名為人體體型,另一個成分是胸圍,肩寬,盆骨寬,那你就命名為人體體寬,懂?

【六】注意事項

我覺得這個是最重要的一個部分。請仔細看看。

1.關于kmo,有時候(很多時候),你的kmo輸不出來。它會告訴你什么什么系數(shù)矩陣是非正定的,反正就是沒有kmo矩陣,遇到這種情況,先別急好嗎?我只能大致的告訴你這個不是很嚴重,不影響結(jié)果的解讀。

2.關于結(jié)果解讀。因子分析會生成相當多的表哦,但是我們只解讀了其中兩三個表,這并不是其他的表就沒有意義,比如碎石圖,在許多論文里就要用到??梢灾庇^的看到各個成分的作用大小。

3.關于預處理。請記得數(shù)據(jù)要先進行標準化以后,才可以做分析。

4.關于因子分析的旋轉(zhuǎn)。旋轉(zhuǎn)出合適的成分矩陣是很重要的一件事,你可以通過改變你的抽取方法或者增大你的抽取因子數(shù)目來改善你的矩陣,這些都是可能起到作用的。多試試。此外,那些系數(shù)是負的話,就是說明是負相關,很正常哈。

5.關于因子分析和主成分分析的辨析。通常使用因子分析。主要是因為它比較高級。

數(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)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 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); }