Tuesday, June 23, 2009

匯入SPSS資料檔並實作因素分析(2)

  • 為了要找出各變項在各因素之組型負荷量(pattern loadings),因此我們以psych套件中的factor.pa()函數來計算。未轉軸為fpex_n,使用varimax法轉軸為fpex_v。(下方的指令同時輸入估計分數)
fpex_n<-factor.pa(na.omit(ex3_2[,2:17]),3,rotate="none",scores=T,residuals=T)
fpex_v<-factor.pa(na.omit(ex3_2[,2:17]),3,rotate="varimax",scores=T,residuals=T)
  • 未轉軸的組型負荷量。
  • 使用varimax轉軸的組型負荷量。
  • 和之前結果相同也就是使用3個因素可以解釋67%的變異量。
  • 最後我們將轉軸後的估計分數加以輸出到新資料檔中以利後續的使用。
write.table(fpex_v$scores,"fpex_vscore.csv",sep=",",col.names=NA)

Saturday, June 20, 2009

匯入SPSS資料檔並實作主成份分析(2)

接下來我們將以匯入後的資料spss_data進行主成份分析:
  • 首先確定匯入的資料共有8個向度(SYMPTOMS→後遺症、ACTIVITY→活動量、SLEEP→睡眠量、EAT→食量、APPETITE→食慾、SKIN→皮膚反應、FACT1_1、FACT2_1)。但是我們要用到的只有前6個向度(因為題目是要探討此六個變項並縮減之)。
  • 我們使用額外的變數data儲存此6個向度的資料:
data<-spss_data[,1:6]
  • 先檢查correlation matrix的各項係數,看看是否有許多低於.3的,若有則須刪除變項。
corm<-cor(data)
  • 結果如下圖所示,顯示大多數的係數均大於.3,故適合進行主成份分析。
  • 然後載入nFacrotrs套件(若沒有則請先安裝),利用它來找出各變項之eigen value以及可解釋的變異量,我們將結果存入eig_data變數中。
eig_data<-principalComponents(corm)

  • 結果如下圖所示,其中eigen value大於1的只有二個主成份,故可保留二個主成份。
  • 之後我們再使用Scree Plot來看看應保留幾個主成份,結果如下圖,由目視的結果來看特徵值是在第二個因素陡升,故也可保留2個主成份。
plotuScree(eig_data$values)


  • 因此,我們將以psych套件中的principal函數來抽取二個主成份,結果如下圖:
principal(corm,2,rotate="none")


  • 由上圖我們可知抽取兩個主成份所能解釋的變異量為66%,接下來我們可以依據各變項在各成份所占的比重,來為兩個主成份命名。
  • 另外,我們亦可以輸出以迴歸法計算之主成份分數做為新的變項,以利後續進一步的分析之用。
new_data<-principal(data,2,rotata="none",scores=T)$scores

匯入SPSS資料檔並實作主成份分析(1)

本文要說明如何匯入SPSS資料檔,並且進行主成份分析。步驟如下(在此引用王保進教授-『多變量分析-套裝程式與資料分析』一書中,第三章的資料檔EX3-1.sav。):
  • 先確定是否有foreign套件,如果沒有請使用Install Package安裝,如果有則要先載入該套件。
  • 將SPSS資料檔案ex3-1.sav複製到D:\ex3-1.sav,並且切換R的工作目錄至D:。
  • 將原始資料讀入到spss_data的變數之中:
spss_data<-read.spss("ex3-1.sav")
  • 讀入後顯示變數的內容會發現資料並不是以data frame的型式存在,若要將資料以data frame的型式存在,可以下列指令:
spss_data<-read.spss("ex3-1.sav",to.data.frame=T)
  • 接下來即可使用主成份分析的方法來進行資料分析。

Thursday, June 18, 2009

匯入SPSS資料檔並實作因素分析(1)

本文同樣引用王保進教授(2004)在『多變量分析-套裝程式與資料分析』一書中,第三章的資料檔EX3-2.sav來進行因素分析。步驟如下(資料檔同樣置於D:\EX3-2.sav):
  • 載入foreign套件,並且將SPSS資料檔匯入到變數ex3-2中。
ex3_2<-read.spss("EX3-2.sav",to.data.frame=T)
  • 計算correlation matrix(相關係數矩陣),並將此矩陣的內容存至corex.csv檔中以及determinant(行列式值),為避免發生遺漏值的狀況,因為在計算前要加上na.omit()函數;同時,也要將讀入資料的第一欄(ID)刪除。
corex<-cor(na.omit(ex3_2[,2:17]))
write.table(corex,"corex.csv",sep=",",col.names=NA)

det(corex)
  • 由上述操作的結果可以發現各變項間相關係數小於.3的甚少,同時行列式值8.044e-06也不等於0,表示適合進行因素分析。
  • 接下來我們以rela套件中的paf(principal axis factoring)來進行因素分析,並且看看其KMO值、MSA值等等。
pafex<-paf(as.matrix(na.omit(ex3_2[,2:17])))
  • 首先以Scree Plot來看看大概會有幾個因素存在,如下圖所示陡線在第三個因素時陡升,故保留3個因素應為合理。
plotuScree(pafex$Eigenvalues[,1])

  • 然後看KMO值(.879),已達到『有價值的』(meritorious)標準。
pafex$KMO
  • 接下來看看Bartlett's test of sphericity的值(3364.7)。
pafex$Bartlett
  • 由以上兩項結果表示資料適合進行因素分析;之後我們來看看各變項的取樣適當性係數,由資料顯示除了RUGGED此一變項係數為.6948較低外,其餘變項之取樣適當性均高,故可考慮刪除此一變項,再進行因素分析,本文先不探討刪除的狀況。
pafex$MSA
  • 接下來我們來看看各變項的初始共同性(initial communalities)以及萃取後的共同性(extraction communalities),共同性愈高表示該變項愈適合進行因素分析。
pafex$Communalities

Wednesday, June 17, 2009

因素分析(Factor Analysis)_實作(1)

接下來,本文以一份問卷進行實例演練(本問卷共有34題,評分採Likert Scale五點量表,所有題目皆為正向題,問卷填寫數量為41份,都為有效問卷):
  • 首先將問卷的答案加以編碼(非常同意5分、同意4分、普通3分、不同意2分、非常不同意1分)。將所有填答資料以OpenOffice Cacl軟體存檔為D:\pretest.csv
  • 開啟R,並將工作目錄切換到D槽中(以筆者的電腦為例)。
  • 載入套件:rela。
  • 先讀入pretest.csv的資料,並指定給pretest變數
pretest<-read.table("pretest.csv",header=T,sep=",",row.names=1)
  • 計算相關矩陣,並將結果存入cor_pretest變數。
cor_pretest<-cor(pretest)
  • 將相關矩陣的結果輸出到cor_pretest.csv檔中,以利後續使用Cacl或是Excel進行計算相關係數。
write.table(cor_pretest,"cor_pretest.csv",sep=",",col.names=NA)
  • 將前述步驟之cor_pretest.csv檔,利用Cacl開啟並另存為cor_pretest.ods,並且設定相關係數小於.3的儲存格變為黃色背景,另外再計算每個變項(題項)和其他變項之相關小於.3的個數,若此個數太多(超過一半)則可考慮刪除此變項。
  • 由上述結果可知要刪除19、23、34三題,再進行主成份分析。
  • 將刪除後的結果存在del_pretest變數中。
del_pretest<-cbind(pretest[1:18],pretest[20:22],pretest[24:33])

主成份分析(Principal Components Analysis)_概念

主成份分析主要是用來做資料向度縮減的方法,它主要在解釋變項原來的變異量。它的功能包括(王保進,2004):
  1. 向度縮減(dimensional reduction)
  2. 資料與變項篩選(screening):計算各變項的主成份分數,並且繪製成scatter plot來偵測outlier,以免分析產成偏誤。
  3. 試探性分析(exploratory analysis):將保留下來的主成份,做為進一步分析(多元迴歸、區別分析等等)的新變項。
進行主成份分析的步驟如下(王保進,2004):
  • 先確定資料是否適合進行主成份分析:主要方法有Bartlett's sphericity test(球面檢定)以及KMO(MSA)值。另外有一個最初步的方法是計算變項間的相關矩陣,如果相關係數的絕對值小於.3的個數太多,表示應該要刪除此變項。但是如果相關係數大於.85表示變項間會產生ill-condition的狀況,表示應該要刪除該變項。
Bartlett's shpericity test(球面檢定):此檢定法約略呈卡方分配(chi-square),卡方值愈大表示愈適合進行主成份分析。不過此法的缺點在於它很容易推翻虛無假設,所以此法是用來當參考用的。
Kaiser-Meyer-Olkin Measure of Sampling Adequacy(簡稱KMO或是MSA):主要是用來判斷取樣是否適當,而且是以變項間的相關係數進行計算。KMO的值介於0~1之間,愈接近1表示資料愈適合進行主成份分析。一般而言KMO的值只要大於.6就算適當。
  • 要保留的主成份個數:主要依照陡坡考驗(scree test)以及Kaiser準則進行判斷。
陡坡考驗(scree test):主要是依照陡坡圖(scree plot)的繪製來進行判斷。scree plot是以變項的correlation matrix所得之特徵值(eigenvalue)來繪製的。它的判斷基準為找出特徵值曲線突然轉折彎角(elbow)的地方,在該彎角以上的特徵值就是可以保留下來的主成份。
Kaiser準則:因為以scree plot來判斷保留之主成份數量似乎過於主觀,因此Kaiser認為應該留特徵值大於1之主成份。

王保進(2004)。多變量分析 : 套裝程式與資料分析。台北市:高等教育文化。

Tuesday, June 2, 2009

R基本操作(Import data from spreadsheet)

一般而言,在資料蒐集後(例如:測驗後)研究者大多會將原始資料(Raw Data)編碼後輸入試算表軟體(spreadsheet;例如:Excel或是OpenOffice Cacl),因此我們在使用R時,首先要學會如何從試算表中將資料匯入(import)到R的變數之中。在匯入資料檔前,要注意的是匯入檔必須位於R的工作目錄之下(working directory),我的習慣是會把工作目錄切換到D槽,然後將資料檔放在D槽中,切換工作目錄的方式如下圖(File->change dir)。


語法如下:

var_name<-read.table("檔名",sep=",",header=F) 茲分別說明各項參數之意義:
  1. var_name:變數名稱,也就是將資料讀入到var_name中。
  2. 檔名:一般而言,大多會將資料檔另存成.csv的型式。
  3. sep:資料間的分隔符號,大多是『,』。
  4. header:設定為F表示不含每行之標題,若含標題必須設為T。

Example 1:讀入學生數學成績,檔名為math.csv,檔案內容不含標題。
math<-read.table("math.csv",header=F,sep=",")
summary(math) Example 2:讀入學生數學成績,檔名為math.csv,檔案內容含標題。
math<-read.table("math.csv",header=T,sep=",")
math


Monday, June 1, 2009

在R宣告變數

先前的文章中有提到,使用R進行統計分析必須撰寫程式語法,既然是程式那就要提到變數了,因為我們必須將原始資料(Raw Data)輸入到R中以便進行後續的分析工作。變數名稱只要不用到R的關鍵字即可,在R中有三類的單變量(univariate)的變數:
  • 向量(vector):基本上就類似於程式語言中的『陣列(Array)』的概念,可分為數字向量(numeric)、邏輯向量(logical)、以及字元向量(character)。這些向量的物件可以使用C(......)將同類型的向量結合在一起。

Example 1:宣告數字向量
num<-c(100,102,103)
Example 2:宣告邏輯向量
logi<-c(T,T,F,T,F)
Example 3:宣告字元向量
name<-c("李等會","陳阿扁","馬小九")
P.S. <-就是指定(assign)的意思
  • 矩陣(Matrix):也就是指資料框(Data Frame),亦可視為二維表格(2-D table),它主要的功能在於將外部資料檔(例如:Excel檔或是文字檔)讀入,再進行更進一步的處理。如果使用data.frame()函數亦可將向量變數整合成矩陣。

Example 1:將數字向量結合成矩陣
a<-c(1,2,3,4,5)
b<-c(12,35,76,19,103)
mtx<-data.frame(a,b)
summary(mtx)
P.S. summary()函數會將矩陣中的每一行(column)進行總結,結果會顯示出最大值、最小值、平均數、第一四分位數、第三四分位數。
  • 因子(Factor):利用factor()函數可以將向量轉換為因子,以利進行因素分析或是分類。

Example 1:輸入資料並且轉換成因子
grade<-c("A","A","B","D","C","E","E","C","D","B")
grade<-factor(grade)
grade
summary(grade)

R Project

R Project是個Open Source的統計套裝軟體。它的入門不是很容易,因為要撰寫程式語法,但是它提供許多套件讓我們的分析工作更加容易。它可以從Comprehensive R Archive Network(CRAN)下載並安裝。無論是Windows、Linux甚至是Mac都可以使用它!今天將先介紹它的安裝(以Windows XP為例):
  1. 目前R的版本是2.9.0,按二下以進行安裝。
  2. 可以選擇安裝時語言。
  3. 一直按下一步即可!
  4. 個人習慣使用英文介面,但是預設為中文介面,所以我們可以修改啟動R程式的參數,加上lang=en即可,如下圖。