2011年6月28日星期二

獨立樣本雙因子變異數分析(One-way ANOVA)

本例子是以林清山教授的書為例(心理學教育統計學,P.371,Ex16-1),資料檔在此

  • 先讀入資料檔。
ex<-read.table("ex16_1.csv",header=T,sep=",")
  • 進行獨立樣本二因子變異數分析。
aovex<-aov(score~type*class,data=ex)
  • 列出分析結果。
summary(aovex)

  • 由ANOVA表可得知有交互作用(interaction)存在,因此必須再去探討單純主要效果(simple main effects)。
  • 先將各資料分組(先以b因子分組;亦即是探討同在同樣的a因子之下會對不同的b因子造成什麼顯響。)
ex.b1<-subset(ex,class=="b1")
ex.b2<-subset(ex,class=="b2")
ex.b3<-subset(ex,class=="b3") 
  • 之後分別進行單因子變異數分析。
summary(aov(score~type,data=ex.b1))
summary(aov(score~type,data=ex.b2))
summary(aov(score~type,data=ex.b3))

2011年6月27日星期一

問卷調查分析實務(二)-->雙因子變異數分析之資料轉換與組合

該位朋友所探討之研究問題,其中一項是要探討性別在依變數(分成三向度)的差異情形,從其研究問題可以得知性別是一個因子;而向度又是另一個因子,因此必須以雙因子變異數分析來進行統計檢定,同時因為受試者(填問卷者)又同時要填寫三向度的題項,所以是愛試者間等組實驗設計(within subject balanced design)。

在進行two way anova之前,必須把資料進行處理(one row per subject轉成one row per observation),也就是說每一行(row)的資料僅包含三個欄位(性別,向度,分數),以下將逐一介紹處理過程。
  • 首先計算各向度的總分,向度一(X101-X110);向度二(X201-X220);向度三(X301-X317)。
先將原始資料question依性別及向度處理成三個變數(data frame),分別是d1,d2,d3,每個變數中包含性別以及該向度的所有題項。
 d1<-question[,c(1:2,9:18)
d2<-question[,c(1:2,19:38)]
d3<-question[,c(1:2,39:55)]
接下來將各向度的各題項加總並放入變數q1,q2,q3之中,各變數只包含三個欄位:性別,向度以及總分。
q1<-data.frame(subject=d1$subject,sex=d1$sex,dimension=1,score=rowSums(d1[,-1]))
q2<-data.frame(subject=d2$subject,sex=d2$sex,dimension=2,score=rowSums(d2[,-1]))
q3<-data.frame(subject=d3$subject,sex=d3$sex,dimension=3,score=rowSums(d3[,-1]))
  •  最後將這三個變數結合成一個適合進行ANOVA的data frame。
sex<-rbind(q1,q2,q3)

問卷調查分析實務(一)-->資料操作

日前朋友來問問卷調查之統計分析方式,因此筆者以Project R實際進行一次分析,並分享於此網誌(其實是怕忘記 = =")。原始資料已經用試算表軟體處理過,並另存成csv檔,檔名是question.csv。
PS.此系列文章僅示範資料處理及操作,不涉及結果解檡。
  •  資料檔下載
  • 開啟Project R並且設定好工作路徑至question.csv之資料夾。
  • 載入資料檔至變數question之中(因為資料檔中的第一列為各變項的名稱,因此設定header=T)。
 question<-read.table("question.csv",sep=",",header=T)
  •  因為資料檔包含了7個自變項以及47個依變項(問卷總題數,分成三個向度,分別是10,20,17題),所以若要計算各個依變項的平均值以及標準差,必須將自變項去除掉。
dep<-qestion[,-(1:8)]
  •  描述統計值
summary(dep)
write.table(summary(dep),"summary.csv",sep=",",col.names=NA)
  •  計算標準差,並寫入檔案sd.csv
sd(dep)
write.table(sd(dep),"sd.csv",sep=",",col.names=NA)

下篇文章將會進行雙因子變數數分析之實作。

2009年12月21日星期一

單因子變異數分析(1)--獨立樣本

1.先讀取資料,資料也如同以往放在D:test.csv (data<-read.table(test.csv),header=T,sep=",")
各項資料說明如下:
  • a->演講法
  • b->討論法
  • c->電腦輔助教學法
  • treatment->此研究有一個因子(三個水準)
  • score->考試分數

2.本例為單因子獨立樣本檢定,公式如下:
  • aov.test<-aov(data$score~data$treatement)
  • summary(aov.test)

3.結果如下圖:

2009年6月23日星期二

匯入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)

2009年6月20日星期六

匯入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)
  • 接下來即可使用主成份分析的方法來進行資料分析。