主要目標(biāo):
1.學(xué)習(xí)安裝R和RStudio
2.了解其界面和R程輯包安裝
如何安裝R與Rstudio - 知乎 (zhihu.com)?這里有關(guān)于R和RStudio的相關(guān)知識(shí),以及安裝教程,可供參考炊邦。
R是用于統(tǒng)計(jì)分析拟枚、繪圖的語言和操作環(huán)境。
相比于其他統(tǒng)計(jì)分析軟件宠叼,R有一下幾個(gè)特點(diǎn):(摘錄自百度百科“R語言”)
1.R是自由軟件桅狠,完全免費(fèi)奸笤,開放源代碼痕檬;
2.R是可編程的語言冤寿。作為一種開放的統(tǒng)計(jì)編程環(huán)境歹苦,語法通俗易懂,很容易學(xué)會(huì)和掌握語言的語法督怜。學(xué)會(huì)之后可以編制自己的函數(shù)來擴(kuò)展現(xiàn)有的語言殴瘦。
3.所有R的函數(shù)和數(shù)據(jù)集是保存在程序包里面的。只有當(dāng)一個(gè)包被載入時(shí)号杠,它的內(nèi)容才可以被訪問蚪腋。
4.R具有很強(qiáng)的互動(dòng)性。除了圖形輸出是在另外的窗口以外姨蟋,它的輸入輸出窗口都是在同一個(gè)窗口進(jìn)行的屉凯,輸入語法中如果出現(xiàn)錯(cuò)誤會(huì)馬上在窗口中得到提示,可以隨時(shí)再現(xiàn)眼溶、編輯修改以前輸入過的命令悠砚。輸出圖形可保存為多種格式。和其他編程語言和數(shù)據(jù)庫之間有很好的借口堂飞。
5.如果加入R的幫助郵件列表灌旧,每天都可能會(huì)收到幾十份關(guān)于R的郵件資訊绑咱,是全世界最大、最前沿的統(tǒng)計(jì)學(xué)家思維的聚集地枢泰。
R程輯包
R語言的使用羡玛,很大程度上是借助各式各樣的R程輯包的輔助,R程輯包就是針對(duì)R的插件宗苍,不同的插件滿足不同的需求稼稿,截至2013年3月6日,CRAN已經(jīng)收錄了各類程輯包4338個(gè)讳窟。例如用于經(jīng)濟(jì)計(jì)量让歼、財(cái)經(jīng)分析、人文科學(xué)研究以及人工智能丽啡。
R程輯包安裝與使用
1谋右、通過選擇菜單:
Tools->install packages->在彈出的對(duì)話框中,選擇你要安裝的程輯包补箍,然后確定改执。
2、使用命令
install.packages("package_name","dir")
package_name:是指定要安裝的程輯包名坑雅,請(qǐng)注意大小寫辈挂。
dir:程輯包安裝的路徑。默認(rèn)情況下是安裝在..\library 文件夾中的裹粤≈盏伲可以通過本參數(shù)來進(jìn)行修改,來選擇安裝的文件夾遥诉。
3拇泣、本地安裝
如果你已經(jīng)下載的相應(yīng)的程輯包的壓縮文件,則可以在本地來進(jìn)行安裝矮锈。
加載程輯包
包安裝后霉翔,如果要使用程輯包的功能。必須先把程輯包加載到內(nèi)存中(默認(rèn)情況下苞笨,R啟動(dòng)后默認(rèn)加載基本程輯包)债朵,加載包命令:
Library(“包名”)
Require(“包名”)
查看程輯包的相關(guān)信息
1、查看包幫忙
library(help="package_name")
主要內(nèi)容包括:例如:包名猫缭、作者葱弟、版本壹店、更新時(shí)間猜丹、功能描述、開源協(xié)議硅卢、存儲(chǔ)位置射窒、主要的函數(shù)
help(package = "package_name")
主要內(nèi)容包括:包的內(nèi)置所有函數(shù)藏杖,是更為詳細(xì)的幫助文檔
2、查看當(dāng)前環(huán)境哪些包加載
find.package() 或者 path.package()
3脉顿、移除包出內(nèi)存
detach()
4蝌麸、把其它包的數(shù)據(jù)加載到內(nèi)存中
data(dsname, package="package_name")
5、查看這個(gè)包里的包有數(shù)據(jù)
data( package="package_name")
6艾疟、列出所有安裝的包
library()
RStudio是免費(fèi)提供的開源集成開發(fā)環(huán)境(IDE)来吩。RStudio提供了一個(gè)具有很多功能的環(huán)境,使R更容易使用蔽莱,是在終端中使用R的絕佳選擇弟疆。
RStudio的界面介紹和初步配置可參考:RStudio使用教程。
R語言和RStudio入門感性認(rèn)識(shí)可參考:R語言入門第一顆:R和Rstudio
一盗冷、數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)集
編碼基礎(chǔ)
算數(shù)
賦值
函數(shù)
自定義一個(gè)函數(shù)柑司,調(diào)用一個(gè)函數(shù)。
循環(huán)(loop)
R中的循環(huán)函數(shù)包括for,while,repeat
管道(pipe)
magrittr包提供了一種符號(hào)函數(shù)%>%锅劝,可以稱這個(gè)符號(hào)為管道攒驰。具體含義就是“將上一個(gè)運(yùn)行的結(jié)果放在下一個(gè)運(yùn)行的函數(shù)的第一個(gè)參數(shù)的位置上
數(shù)據(jù)類型
基礎(chǔ)數(shù)據(jù)類型
數(shù)值型:實(shí)數(shù)、整數(shù)故爵、復(fù)數(shù)
邏輯型:TRUE讼育、FALSE
字符型:任何用引號(hào)引起來的值
向量:用c函數(shù)創(chuàng)建向量
因子(factor)
因子與字符向量的主要區(qū)別在于因子向量的獨(dú)特值(levels)是有限個(gè)數(shù)的。因子向量的所有元素都是由這些有限個(gè)數(shù)的獨(dú)特值組成的稠集。
數(shù)值之間的轉(zhuǎn)換
as.numeeric 轉(zhuǎn)換為數(shù)值型
as.character 轉(zhuǎn)換為字符型
as.logical 轉(zhuǎn)換為邏輯型
向量命名
names函數(shù)命名
訪問向量的子集
[? 選擇一個(gè)子集
[[? 選擇一個(gè)元素
$ 不用括號(hào)的選擇
特殊數(shù)據(jù)類型
日期
lubridate包中ymd函數(shù)
日期可以進(jìn)行運(yùn)算
時(shí)間序列
ts函數(shù)
多維數(shù)據(jù)類型
矩陣(matrix):matrix函數(shù)
列表(list):list函數(shù)
數(shù)據(jù)表(data frame 與 tibble)
讀寫數(shù)據(jù)
包中內(nèi)置有數(shù)據(jù)奶段,可以進(jìn)行查看
內(nèi)置數(shù)據(jù)集:data()
表格數(shù)據(jù)類型:通過readr包中的read_csv、read_excel等函數(shù)讀取相應(yīng)數(shù)據(jù)
R的專屬類型數(shù)據(jù):rds剥纷、RData
其他軟件:SPSS痹籍,Stata,SAS
練習(xí)題
summaris函數(shù)使用可參考:數(shù)據(jù)整理—dplyr包(summarise系列)
二蹲缠、數(shù)據(jù)清洗與準(zhǔn)備
h1n1_data <- read.csv("h1n1_flu.csv",header=TRUE) ##header=? 线定,第一行是否用作列名稱,true則第一行用于列名稱确买,具體數(shù)據(jù)從第二行開始斤讥,false則第一行即為具體數(shù)據(jù)。
波士頓房價(jià)數(shù)據(jù)集
將需要使用的數(shù)據(jù)集放在軟件目錄下湾趾,用data(BostonHousing)加載數(shù)據(jù)芭商。dim()派草、head()
重復(fù)值處理
unique() 函數(shù)可以對(duì)數(shù)據(jù)進(jìn)?整體去重, distinct() 函數(shù)可以針對(duì)某些列去重
# 整體去重
h1n1_data_de_dup1 <- unique(h1n1_data)
# 指定根據(jù)列respondent_id,h1n1_knowledge去重铛楣,并保留所有列
h1n1_data_de_dup2 <- distinct(h1n1_data, respondent_id, h1n1_knowledge, .keep_all = T) ##distinct函數(shù)在dplyr包里
缺失值識(shí)別與處理
缺失值識(shí)別:
y <- c(1, 2, 3, NA)
?is.na(y) ##識(shí)別y中的缺失值
FALSE FALSE FALSE? TRUE
> !complete.cases(y)?##識(shí)別y中的缺失值
FALSE FALSE FALSE? TRUE
統(tǒng)計(jì)缺失值數(shù)量:
sum(is.na(h1n1_data))??# 數(shù)據(jù)集中總?cè)笔?shù)據(jù)量
21742
?sum(is.na(h1n1_data["h1n1_knowledge"]))??# 數(shù)據(jù)集中某?列缺失數(shù)據(jù)量
116
? VIM 包?的 aggr() 函數(shù)近迁,直觀看?下具體的缺失情況
aggr(h1n1_data,cex.axis = .6,oma = c(9,5,5,1))
刪除法
行刪除:
h1n1_data_row_del1 <- h1n1_data[!complete.cases(h1n1_data), ] ##保留了所有有缺失值的行
h1n1_data_row_del2 <- na.omit(h1n1_data) ##刪除了所有有缺失值的行
列刪除:
dataset[,-5]? ###去掉第五列
?subset(dataset, select = -c(col1, col2))? ###去掉列col1和列col2
h1n1_data_col_del1 <- subset(h1n1_data, select = -c(health_insurance)) ##刪除health_insurance列
簡單插補(bǔ)法
擬合插補(bǔ)法
多重插補(bǔ)法
Task03 基礎(chǔ)統(tǒng)計(jì)分析
一、多種方法獲取描述性統(tǒng)計(jì)
基礎(chǔ)方法
通過summary計(jì)算:
通過 sapply() 計(jì)算:
先定義函數(shù)
應(yīng)用定義的函數(shù)
關(guān)于sapply函數(shù)(apply函數(shù)的一種)的使用簸州,可參考學(xué)習(xí):R語言:常用apply函數(shù)(apply,tapply,sapply,lapply)用法介紹
拓展包?法
通過pastecs包中的 stat.desc()函數(shù)計(jì)算描述性統(tǒng)計(jì)量
通過psych包中的describe()計(jì)算描述性統(tǒng)計(jì)量
二鉴竭、分組計(jì)算描述性統(tǒng)計(jì)
基礎(chǔ)方法
使?aggregate()分組獲取描述性統(tǒng)計(jì),aggregate函數(shù)(很強(qiáng)大0痘搿M氐伞)使用可參考網(wǎng)址:R語言-數(shù)據(jù)整形之a(chǎn)ggregate函數(shù)
分組計(jì)算不同性別收?貧困計(jì)數(shù)
查爾斯河的房價(jià)中位數(shù)平均值
使? by() 分組計(jì)算描述性統(tǒng)計(jì)量
三、頻數(shù)表和列聯(lián)表
頻數(shù)表和列聯(lián)表的R語言實(shí)現(xiàn)
四助琐、相關(guān)
相關(guān)的類型:
Pearson祭埂、 Spearman和Kendall相關(guān)
房價(jià)數(shù)據(jù)的相關(guān)系數(shù),默認(rèn)是Pearson相關(guān)系數(shù)兵钮。
指定計(jì)算Spearman相關(guān)系數(shù)
城鎮(zhèn)?均犯罪率與房價(jià)的相關(guān)系數(shù)
偏相關(guān)
指在控制?個(gè)或多個(gè)定量變量時(shí)蛆橡,另外兩個(gè)定量變量之間的相互關(guān)系。使?ggm 包中的 pcor() 函數(shù)計(jì)算偏相關(guān)系數(shù)
相關(guān)性的顯著性檢驗(yàn)
五掘譬、?差分析
?差分析(ANOVA)?稱“變異數(shù)分析”或“F檢驗(yàn)”泰演,?于兩個(gè)及兩個(gè)以上樣本均數(shù)差別的顯著性檢驗(yàn)
單因素?差分析
多因素?差分析
數(shù)據(jù)可視化
ggplot2包介紹
ggplot2包由Hadley Wickham編寫睦焕,提供了?種基于Wilkinson所述圖形語法的圖形系統(tǒng)。ggplot2包的?標(biāo)是提供?個(gè)全?的靴拱、基于語法的垃喊、連貫?致的圖形?成系統(tǒng),允許?戶創(chuàng)建新穎的袜炕、有創(chuàng)新性的數(shù)據(jù)可視化圖形本谜。
ggplot2是?個(gè)?常經(jīng)典的數(shù)據(jù)可視化R包,內(nèi)容?常豐富偎窘,可以去官?進(jìn)?更加詳細(xì)的學(xué)習(xí)乌助。
task5? 模型
用R語言進(jìn)行建模分析,了解模型的適?范圍以及如何建模陌知。
回歸模型: 回歸模型是?種有監(jiān)督的他托、預(yù)測(cè)性的建模技術(shù),它研究的是因變量和?變量之間的關(guān)系仆葡。
分類模型: 分類模型也是?種有監(jiān)督的機(jī)器學(xué)習(xí)模型赏参。與回歸模型不同的是,其標(biāo)簽(因變量)通常是有限個(gè)數(shù)的定類變量。最常?的是?分類模型登刺。
一、線性回歸 Linear Regression
多元線性回歸是?種最為基礎(chǔ)的回歸模型嗡呼,其使?多個(gè)?變量和?個(gè)因變量利?OLS完成模型訓(xùn)練纸俭。多元線性回歸模型使? lm() 命令。
運(yùn)?plot命令對(duì)模型進(jìn)?診斷南窗,各圖含義參考
https://www.cnblogs.com/lafengdatascientist/p/5554167.html
plot(lr_model)
二揍很、逐步回歸分析?Stepwise Regression
利?逐步回歸分析可以對(duì)模型中的變量進(jìn)?優(yōu)化。R語?中的 step() 命令,是以AIC信息統(tǒng)計(jì)量為準(zhǔn)則万伤,通過選擇最?的
AIC信息統(tǒng)計(jì)量來達(dá)到提出或添加變量的?的窒悔。
對(duì)于逐步回歸,?般有前向敌买、后向简珠、雙向等逐步?式。本部分將基于已經(jīng)實(shí)現(xiàn)的lr_model 進(jìn)?雙向逐步回歸虹钮。前向和后向回歸只需要更改step() 命令?中的 direstion 參數(shù)即可聋庵。具體內(nèi)容參照 https://blog.csdn.net/qq_38204302/article/details/86567356
step_model <- step(lr_mode, direction = "both")
進(jìn)一步學(xué)習(xí)可參考 :語言逐步回歸
分類模型
將連續(xù)變量轉(zhuǎn)化成?分類變量
邏輯回歸 Logistics Regression
邏輯回歸是?種?義的線性回歸分析模型,利?sigmode將線性回歸結(jié)果轉(zhuǎn)化成概率的形式芙粱。下?展示了利?glm() 構(gòu)建邏輯回歸的過程祭玉。
# 分別對(duì)訓(xùn)練集和測(cè)試集進(jìn)?預(yù)測(cè)
> lr_pred_train <- predict(lr_model, newdata = BostonHousingTrain, type = "response")
> lr_pred_test <- predict(lr_model, newdata = BostonHousingTest, type = "response")
## type = response 給出具體的預(yù)測(cè)概率,而 type = class按規(guī)定的闕值給出分類
#?計(jì)算訓(xùn)練集和測(cè)試集的auc
> calcAUC(lr_pred_train, BostonHousingTrain$medv)
[1] 0.9554211
> calcAUC(lr_pred_test, BostonHousingTest$medv)
[1] 0.9506969
通過計(jì)算春畔,訓(xùn)練集上的auc取值為0.9554211脱货,測(cè)試集上的auc取值為0.9506969,說明模型效果整體不錯(cuò)律姨。
KNN
KNN模型是?種簡單易懂振峻、可以?于分類和回歸的模型。其中 K 表示在新樣本點(diǎn)附近(距離)選取K 個(gè)樣本數(shù)據(jù)择份,通過在 K 個(gè)樣本進(jìn)?投票來判斷新增樣本的類型铺韧。
KNN模型較難的?點(diǎn)是確定超參數(shù)K,?前有?些指標(biāo)和經(jīng)驗(yàn)?法幫助確定最優(yōu)K的取值缓淹。這部分內(nèi)容會(huì)在后續(xù)進(jìn)?講解哈打,這?使?
k=25進(jìn)?建模。
KNN模型在測(cè)試集上的auc值為0.875784讯壶,相?于邏輯回歸效果較差料仗。
Decision Tree
決策樹是?種基于樹模型進(jìn)?劃分的分類模型,通過?系列if then決策規(guī)則的集合伏蚊,將特征空間劃分成有限個(gè)不相交的?區(qū)域立轧,對(duì)于落在相同?區(qū)域的樣本,決策樹模型給出相同的預(yù)測(cè)值。下?構(gòu)建了決策樹的分類模型氛改。
> plot(dt_model)
> text(dt_model)
在構(gòu)建決策樹模型的基礎(chǔ)上帐萎,分別對(duì)訓(xùn)練集和測(cè)試集進(jìn)?預(yù)測(cè)并計(jì)算auc取值。該模型在訓(xùn)練集上的auc取值為0.9281874胜卤,在測(cè)試集上的auc取值為0.8789199疆导。
## 預(yù)測(cè)
> dt_pred_train <- predict(dt_model, newdata = BostonHousingTrain, type = "class")
> dt_pred_test <- predict(dt_model, newdata = BostonHousingTest, type = "class")
# 計(jì)算auc取值
> calcAUC(as.numeric(dt_pred_train), BostonHousingTrain$medv)
[1] 0.9308756
> calcAUC(as.numeric(dt_pred_test), BostonHousingTest$medv)
[1] 0.8789199
訓(xùn)練集和測(cè)試集間存在抖動(dòng),說明該模型可能出現(xiàn)過擬合葛躏。我們需要引?剪枝的操作來降低模型的過擬合澈段,這部分供同學(xué)們?學(xué)。
隨機(jī)森林?Random Forest
隨機(jī)森林是?個(gè)包含多個(gè)決策樹的分類器舰攒,可以?于分類和回歸問題败富。在解決分類問題時(shí),其輸出的類別是由個(gè)別樹輸出的類別的眾數(shù)?定摩窃。相?于單樹模型兽叮,隨機(jī)森林具有更好地泛化能?。
使?randomForest() 構(gòu)建模型的過程中猾愿,可以通過 ntree 設(shè)定隨機(jī)森林中包含的決策樹數(shù)量充择。由于隨機(jī)森林是對(duì)樣本和變量的隨機(jī),因此可以通過important 展示變量的重要性排序匪蟀。通過模型預(yù)測(cè)椎麦,隨機(jī)森林模型在訓(xùn)練集上的auc為0.9615975,在測(cè)試集上的auc為0.9247387材彪。
## 安裝導(dǎo)入隨機(jī)森林包
install.packages("randomForest")
library(randomForest)
## 構(gòu)建隨機(jī)森林模型
> rf_model <- randomForest(medv ~ ., BostonHousingTrain, ntree = 100, nodesize = 10) ### 學(xué)習(xí)資料中內(nèi)容確實(shí)观挎,括號(hào)內(nèi)的參數(shù)內(nèi)容不夠
## 展示模型變量的重要性
> importance(rf_model)
##? 預(yù)測(cè)
> rf_pred_train <- predict(rf_model, newdata = BostonHousingTrain, type = "class")
> rf_pred_test <- predict(rf_model, newdata = BostonHousingTest, type = "class")
# 計(jì)算auc取值
> calcAUC(as.numeric(rf_pred_train), BostonHousingTrain$medv)
[1] 0.9672619
> calcAUC(as.numeric(rf_pred_test), BostonHousingTest$medv)
[1] 0.9297909