bruceR: Broadly Useful Convenient and Efficient R Functions
本文既是對bruceR包的整體介紹,也可以作爲R語言快速入門的參考資料。
👩💻
1 / bruceR安裝說明
2021年3月19日,bruceR正式被“R語言程序包官方倉庫CRAN”收錄,成爲了17346個被CRAN官方收錄的R包中的一員![1]
這也意味着,從此可以使用install.packages("bruceR")來安裝了!
用過老版本bruceR的朋友都有體會:若從GitHub安裝,非常耗時間,過程也非常坎坷。現在,bruceR大大縮減了依賴包的數量,並且有了CRAN官方收錄,安裝會變得更容易!
安裝方法
## 方法1:從CRAN平臺安裝(正式版)
install.packages("bruceR")
## 方法2:從GitHub平臺安裝(開發版)
install.packages("devtools")
devtools::install_github("psychbruce/bruceR", force=TRUE, upgrade=FALSE)
兩者有什麼不同呢?
「CRAN正式版」安裝過程會更快速、更順暢(尤其對於國內用戶)
「GitHub開發版」則會保持最新狀態,會有更及時的bug修復和新功能嚐鮮
補充說明(針對所有R包,不只是bruceR):
99%的用戶都能正常安裝。如果你真的無法安裝,請參考下面的建議做好必要的準備工作。
安裝任何R包前,建議重啓RStudio(一般使用RStudio而不是R本身作爲代碼編輯器)。
安裝任何R包時,如果你看到一個對話框問“Do you want to install from sources the package which needs compilation?”,建議選擇“No”,這會大大節省你的時間。
萬一安裝過程中出現bug而導致安裝失敗,99%的可能性是安裝其他R包出現了問題(另外1%是網絡問題)。這時不要抱怨、不要心急,而是仔細閱讀報錯信息,從中找出是哪個包的問題,然後手動處理那個包(包括手動卸載和重裝),最後重試安裝。
對於任何R包的安裝,建議把R語言升級到最新版本(v4.0及以上)。另外需要說明的是,bruceR包也是在最新版本的R和RStudio環境下開發的。
對於任何R包的安裝,建議Windows用戶把Rtools.exe(編譯工具而不是R包)也裝上。
2 / bruceR設計理念與功能介紹
BRoadlyUsefulConvenient andEfficientRfunctions thatBRingUsersConcise andElegantRdata analyses.
核心理念:解放勞動力,提高生產力。
理念1:常用包的配備管理
理念2:高效率的數據分析
【理念1】常用包的配備管理
bruceR包依賴於其他20多個重要R包,也會自動安裝一系列常用R包。安裝成功後,當你通過library(bruceR)載入時,同時被載入到編程環境的R包還有:
數據處理類:rio / dplyr / tidyr / stringr / forcats / data.table
統計分析類:psych / emmeans / effectsize / performance
圖表繪製類:ggplot2 / cowplot / see
只需要加載一個bruceR,就能一次性加載這些常用R包。當然,每個包的用法還需自行學習掌握,可以查閱每個包的幫助文檔或搜索網絡上的相關教程。
其中,我個人強烈推薦掌握的是data.table包,可參閱:R語言必學之「data.table」學習資源合集。另外,dplyr、stringr、ggplot2也是必學必會的基礎包。
「data.table」:https://zhuanlan.zhihu.com/p/346366577
[Data] 數據處理類R包
rio:一站式導入/導出幾乎所有格式數據(使用import()/export()函數)
dplyr:數據的各種操作處理(如分組、拼接、彙總;但更推薦data.table)
tidyr:數據的各種清理轉換(如寬數據轉換爲長數據)
stringr:字符串處理(基於正則表達式)
forcats:分類/因子型變量處理(如因子水平的排序、標籤更改)
data.table:全方位、高性能、極簡化的數據框格式及其處理
[Stat] 統計分析類R包
psych:心理學研究與心理測量的相關函數工具包
emmeans:估計邊際均值、簡單效應檢驗、事後多重比較
effectsize:統計量-效應量轉換、不同效應量之間的相互轉換
performance:統計模型診斷、模型擬合指標計算
[Plot] 圖表繪製類R包
ggplot2:一個包能頂R半邊天的必學必會作圖工具箱
cowplot:ggplot2拓展工具箱(多圖合併、圖層疊加、添加標籤等)
see:ggplot2拓展工具箱(更豐富更美觀的主題配色方案)
此外,bruceR會自動安裝但並不默認載入的其他重要R包還包括:pacman(R包管理)、lmerTest(線性混合模型/多層線性模型)、mediation(中介效應分析)、interactions(簡單斜率分析)、lavaan(結構方程建模)等。
【理念2】高效率的數據分析
R包的配備與管理只是提高效率的一個起點。
bruceR最重要的貢獻,當然還是在於開發/改造出來的一系列R函數。
總的來說,bruceR設計或改良的R函數涵蓋6個方面:
基礎功能與分析
量表計算與分析
多因素方差分析(包括簡單效應檢驗和多重比較)
多類型迴歸分析(包括模型結果的完整彙總報告)
高級統計工具箱(包括某些統計結果報告的優化)
作圖輔助工具箱
下面對幾個常用函數進行簡要的功能介紹,詳細內容還請通過help(函數名)或?函數名的方式查看幫助文檔,裏面均有對參數用法的說明,並提供了簡單的例子。
1. 基礎功能與分析
set.wd():將R工作路徑設置到當前文件所在路徑【注:需要安裝RStudio的最新版本(version ≥ 1.4.843),否則無法正常使用】。
Print()/Glue():是內置函數print()/cat()/paste()/sprintf()的高級替代品,可以輸出有顏色、有格式的文字(比如歡迎語呈現的那樣)或根據變量的值動態輸出不同文字。
Describe():描述統計,指標豐富,還可以在一張圖中同時繪製單變量分佈密度圖、變量間散點圖、變量間相關係數及顯著性(可保存爲高清晰度圖片)。
Freq():頻次和頻率統計,可根據要求進行升/降排序。
Corr():相關分析,比Describe()提供了更多指標,包括相關係數的p值和95% CI,也有一個風格不同的相關係數矩陣圖(可保存爲高清晰度圖片)。
LOOKUP() :查找、匹配、拼接兩個數據的變量,名稱致敬了Excel的“VLOOKUP”,作用相當於Excel的“INDEX + MATCH”組合函數。
2. 量表計算與分析
RECODE()/RESCALE():變量重新編碼或轉換取值範圍。
MEAN()/SUM()/COUNT()/MODE()/STD()/CONSEC():一行簡短代碼解決各種多變量的“橫向計算”問題(一般是某個量表多道題目的平均分或總分),極簡化實現反向計分(無需額外生成新變量)。
Alpha():量表信度分析,同樣是極簡化實現反向計分(無需額外生成新變量),調用了jmv::reliability()函數。
EFA():探索性因素分析,調用了jmv::efa()函數。
CFA():驗證性因素分析,調用了jmv::cfa()和lavaan::cfa()函數。
3. 多因素方差分析
MANOVA():單因素/多因素的被試間/被試內/混合設計方差分析ANOVA及協方差分析ANCOVA;直接提供效應量partial η²及其90% CI(該函數僅輸出結果到R Console,因爲一般情況下我們不會在論文中直接呈現方差分析表,如有需要,可以使用apaTables包)。
EMMEANS():簡單效應檢驗(包括簡單主效應、簡單交互作用、簡單簡單效應等)、事後多重比較(各種比較方法與p值校正方法)、簡單效應基礎之上的多重比較,直接提供效應量Cohen's d及其95% CI。
4. 多類型迴歸分析
grand_mean_center()/group_mean_center():變量的總中心化、組中心化處理,可選擇是否標準化、是否存爲新的變量、是否順便返回組均值。
regress()/GLM_summary()/HLM_summary():一般線性模型/廣義線性模型/線性混合模型/廣義線性混合模型的豐富結果報告(僅輸出到R Console)。
model_summary():幾乎所有類型迴歸模型的APA格式輸出(可輸出到R Console、Word文檔、HTML文檔等);支持多個模型的組合報告,表格整潔美觀,一行代碼直接幫你把論文結果表格整理好,複製粘貼即可,不用再手抄數據,甚至不需要手動把負號“-”改成“–”,因爲都已經改好了(該函數調用並改進了texreg包的相關函數)。
5. 高級統計工具箱
med_summary():對於使用mediation包做的中介效應分析(包括普通的中介模型、有調節的中介模型、HLM中介模型等),改進了結果的呈現。
ccf_plot():時間序列數據的交叉相關分析(cross-correlation analysis),由於stats::ccf()只能畫R base風格的圖,難以調整圖的細節和樣式;該函數使用了ggplot2包來繪製交叉相關結果圖,可供進一步調整,並方便保存爲高清晰度圖片。
granger_test():時間序列數據的格蘭傑因果檢驗(Granger causality test),爲同時分析多個時間滯後項提供更方便的分析命令和彙總的結果報告,並附以模型說明。
6. 作圖輔助工具箱
theme_bruce():簡單、大方、美觀的ggplot2主題方案,提供多種參數設置。
最常用的函數有:
set.wd()/Describe()/Freq()/Corr()/Alpha()/MEAN()
MANOVA()/EMMEANS()/model_summary()/theme_bruce()
⚠ NEWS:最近更新的0.6.0版本對已有函數進行了不同程度的優化和改進,並棄用了某些不實用、非必要、有偏誤的函數。
3 / 一套完整的例子
R代碼:
#### Title ####表示一個代碼塊(可使用快捷鍵“Ctrl + Alt + T”單獨運行)
R代碼中的賦值都可以用=號(完全不必用<-號)
#### (1) 數據導入 ####
install.packages("bruceR")
library(bruceR)
set.wd()# 設置工作路徑到當前文件所在路徑(需安裝1.4.843版本以上的RStudio)
# 通過rio::import()可以輕鬆導入任何格式的數據
# 這裏只是一個示例,並無此Excel文件,可替換爲你的數據
# data=import("BFI Personality.xlsx", setclass="data.table")
# 我們使用psych包裏的“大五人格測驗”數據(bfi)作爲演示
?psych::bfi# 查看該數據的幫助文檔
data=as.data.table(psych::bfi)# 轉換爲data.table格式
str(data)# 查看變量
glimpse(data)# 查看變量(另一種方式)
#### (2) 量表計算 ####
# 維度平均分(包括反向計分題)
# E = 外傾性,A = 宜人性,C = 盡責性,N = 神經質,O = 開放性
data[,`:=`(
Big5.E=MEAN(data,"E",1:5, rev=c(1,2), likert=1:6),
Big5.A=MEAN(data,"A",1:5, rev=1, likert=1:6),
Big5.C=MEAN(data,"C",1:5, rev=c(4,5), likert=1:6),
Big5.N=MEAN(data,"N",1:5, likert=1:6),
Big5.O=MEAN(data,"O",1:5, rev=c(2,5), likert=1:6)
)]
# 內部一致性信度
Alpha(data,"E",1:5, rev=c(1,2))
Alpha(data,"A",1:5, rev=1)
Alpha(data,"C",1:5, rev=c(4,5))
Alpha(data,"N",1:5)
Alpha(data,"O",1:5, rev=c(2,5))
#### (3) 描述統計 ####
d=data[,.(gender, age, education, Big5.E, Big5.A, Big5.C, Big5.N, Big5.O)]
Describe(d, plot=TRUE)
Corr(d)
#### (4) 方差分析 ####
# 兩因素被試間設計ANOVA
#(也可以添加多個協變量)
MANOVA(na.omit(d), dv="Big5.E", between=c("gender","education"))
# 簡單效應檢驗與事後配對比較
#(也可以設置不同的對比方式)
MANOVA(na.omit(d), dv="Big5.E", between=c("gender","education"))%>%
EMMEANS("gender", by="education")
#### (5) 迴歸分析 ####
lm1=lm(Big5.O~Big5.E, data=d)
lm2=lm(Big5.O~Big5.E+Big5.A+Big5.C+Big5.N+gender+education, data=d)
GLM_summary(lm1)
GLM_summary(lm2)
model_summary(list(lm1, lm2), std=TRUE)
model_summary(list(lm1, lm2), std=TRUE, file="Big5.doc")
#### (6) 中介分析 ####
# 將所有變量標準化處理(中心化的基礎上進一步標準化)
d.std=grand_mean_center(na.omit(d), vars=names(d), std=TRUE)
# 建立中介變量模型和因變量模型
lm.m=lm(education~age+gender, data=d.std)
lm.y=lm(Big5.O~education+age+gender, data=d.std)
model_summary(list(lm.m, lm.y), std=TRUE)
# 使用mediation包做中介分析
# 查看mediate函數的幫助文檔
?mediation::mediate
# (1) Monte Carlo方法
set.seed(123)# 設置一個隨機種子以重複隨機結果
med.model=mediation::mediate(
lm.m, lm.y,
treat="age", mediator="education",
sims=1000)
med_summary(med.model)
# (2) Bootstrap方法
set.seed(123)# 設置一個隨機種子以重複隨機結果
med.model=mediation::mediate(
lm.m, lm.y,
treat="age", mediator="education",
sims=1000, boot=TRUE, boot.ci.type="bca")
med_summary(med.model)
部分輸出結果:
描述統計(變量相關圖 - Corr函數)
4 / 侷限與展望
bruceR目前仍只是0.6.0版。在1.0.0版發佈之前,必然有許多值得改進的地方。
而且,開發者是心理學專業的,在功能設計方面肯定會傾向於社會科學的數據分析方法,無法覆蓋自然科學、工程技術等領域。
不過,只要是“廣泛有用、方便高效”的R函數(BRoadlyUsefulConvenient andEfficientRfunctions),bruceR都可以嘗試開發或改進。
歡迎各位安裝使用,懇請提出寶貴意見!
謝謝!
參考:Bao, H.-W.-S. (2021). bruceR: Broadly useful convenient and efficient R functions. R package version 0.6.0. https://CRAN.R-project.org/package=bruceR
排版:shirly
作者:包寒吳霜
校對:喵君姐姐