R语言笔记完整版
【R筆記】R語言函數總結
R語言與數據挖掘:公式;數據;方法R語言特征
基礎指令
- 程序輔助性操作:
運行
q()——退出R程序 tab——自動補全 ctrl+L——清空console ESC——中斷當前計算調試查錯
browser()?和?debug()——設置斷點進行,運行到此可以進行瀏覽查看(具體調試看browser()幫助文檔(c,n,Q)) stop('your message here.')——輸入參數不正確時,停止程序執行 cat()——查看變量?幫助
help(solve)?和??solve 等同 ??solve——檢索所有與solve相關的信息 help("[[") 對于特殊含義字符,加上雙引號或者單引號變成字符串,也適用于有語法涵義的關鍵字 if,for 和 function help(package="rpart")——查看某個包 help.start()——得到html格式幫助 help.search()——允許以任何方式(話題)搜索幫助文檔 example(topic)——查看某個幫助主題示例 apropos("keyword")——查找關鍵詞keyword相關的函數 RSiteSearch("onlinekey", restrict=fuction)——用來搜索郵件列表文檔、R手冊和R幫助頁面中的關鍵詞或短語(互聯網)RSiteSearch('neural networks')- 準備
文件目錄設置
setwd(<dir>)——設置工作文件目錄 getwd()——獲取當前工作文件目錄 list.files()——查看當前文件目錄中的文件加載資源
search()——通過search()函數,可以查看到R啟動時默認加載7個核心包。 基礎函數:數學計算函數,統計計算函數,日期函數,包加載函數,數據處理函數,函數操作函數,圖形設備函數 ? ? ? setRepositpries()——選擇軟件庫(CRAN,Bioconductor,R-Forge),尋找安裝包的方法另看《【R筆記】尋找R的安裝包》 (.packages())——列出當前包 (.packages(all.available=TRUE))——列出有效包 install.packages(“<package>”)——安裝包 library()和require()——加載R包(package)至工作空間 data()——列出可以被獲取到的存在的數據集(base包的數據集) data(<datasets>,package=“nls”)——將nls包的datasets加載到數據庫中批處理文件和結果重定向
source("commands.R")——執行commands.R (存放批處理命令的)腳本文件。 cat(<Rcommond>,file="")——可以把R命令輸出至外部文件,然后調用source函數進行批處理 do.call(<funcname>,<pars>)——調用函數,第一個參數<funcnames>指示調用函數字符串名稱,第二個參數包含調用所需參數的一個列表<pars> sink("record.lis")——把后續的輸出結果從控制臺重定向到外部文件 record.lis 中 sink()——把后續代碼輸出重新恢復到終端上展示 attach(<datafame>)——將數據框<datafame>中的變量鏈接到內存中,便于數據調用 detach()——對應attach(<datafame>),取消變量的鏈接,detach()里沒有參數! 注:attach()和detach()均是在默認變量搜索路徑表中由前向后找到第一個符合變量名稱,因此之前若存在重名變量,有可能會出現問題!!!?
- 數據處理
輸入輸出(讀入輸出數據、文件)
assign("x",c(1,2,3))?和?x <- c(1,2,3)?和?c(1,2,3)->x ——向量賦值 read.table("infantry.txt", sep="\t", header=TRUE)——seq屬性用其它字符分割,比如文本文件用空格(tab)分隔,header設置為文件中已經存在表頭名稱 read.csv("targets.csv")——讀入csv(Comma Seperated Values)文件,屬性被逗號分割 read.csv(url("<link>"))——read.csv()?和?url()的合體,讀存在網上的數據 x <- scan(file="")——手動輸入數據,同時scan可以指定輸入變量的數據類型,適合大數據文件 scan("data.dat", what = list("", 0, 0))——what指定變量類型列表 readLines('http://en.wikipedia.org/wiki/Main_Page',n=10)——讀取文本文件,將文檔轉為以行為單位存放的list格式,比如讀取讀取wikipedia的主頁html文件的前十行 write.table(Data, file="file.txt", row.names = FALSE, quote=FALSE)——輸出,quote為FALSE去掉字符串類型的雙引號,write.table(stasum, "stasum.csv",row.names = FALSE,col.name=FALSE,sep=",",append=TRUE) write.csv(data,file="foo.csv",row.names=FALSE)——寫成csv格式,row.names=FALSE去掉行號 print()——打印 save.image("./data.RData")——把原本在計算機內存中(工作空間)活動的數據轉存到硬盤中。 load("./RData")——加載目錄中的*.RData,把文檔-詞項矩陣從磁盤加載到內存中數據查看
- 通用對象
- 基本數據類型
- 特殊屬性
- 混合類型
- 向量特征
ANY,ALL——任意,全部 ? 數組和矩陣 train$var train$new[train$var == NA] <- 1 Data[is.na(Data)] <- 0——數據框多維變量中給NA值賦值為0 apply(A,Margin,FUN,...)——A為矩陣,Margin設定待處理的維數,為1是橫排(行),為2是豎排(列)做運算,Fun是運算函數 sweep(x,2,apply(x,MARGIN=1,mean),FUN)——對數組或者矩陣進行運算。?MARGIN=1表示行,2表示列;STATS統計量,如apply(x,MARGIN=1,mean),FUN函數運算默認為減法,“/”除法 y.vector<-with(data,get(yval))——表示在data數據框中讀取列名稱為yval的向量。 with(<data>,<colname|func>)——提取數據框中的某些參數做運算,對于數據框運算很方便
繪圖
plot()——繪制圖像 plot(<vecter_horizontal>, <vector_vertical>, pch=as.integer(<factors>),col,xlab,ylab)——用factors區分圖像點的類型pch(圓的,三角,叉),col是顏色類別,xlab或者ylab對應橫縱軸標題 legend(<location="topright">,legend=<vector_labelname>,pch=1:3,cex=1,col)——圖例,<location>是位置(比如右上),<vector_labelname>圖例類別標簽名,pch是圖例對應標簽的類別id(向量),<cex>調整字體比例大小,顏色設置,legend("topright", levels(<factors>), pch=1:length(levels(factors))) text(X,Y,labels=c(1,2,3),adj=1.2)——添加標注,X,Y是對應坐標的向量,labels是標記值,adj調整標注位置 abline(h = <int>,lty=2)——低級繪圖添加一條水平線h或者是回歸模型直線,垂線v;lty為2表示繪制虛線 abline(a,b)——畫一條y=a+bx的直線 points(x,y)————低級繪圖,畫個點,坐標為向量x,y lines(x,y)——低級繪圖,畫一條線,坐標為向量x,y axis(side=1,at=seq(from=0.7,by=1.2,length.out=7),labels=c(...))——繪制坐標軸,低級繪圖,side為2是縱坐標 barchart()——lattice包預先要對數據匯總 barplot(<vector>)——繪制柱狀圖,vector可增加名稱。也可以繪制直方圖,和hist()均分數據不太一樣,需要用table()統計各個子分段下樣本數量后在畫圖。 mosaicplot(x~y,main,color=T,xlab,ylab)——柱形對應關系圖 contour(<matrix>)——創建等高線 persp(<matrix>,expand=0.2)——創建3D圖,expand擴展值設置為0.2,否則為全屏擴展 image(volcano)——加載柵格(矩陣)圖像 par(mfrow=c(1,2),oma,mar)——mfrow設置圖形輸出窗口為1行2列,添加car包?oma是所有圖像距離邊框的距離(底部,左邊,頂部,右邊),mar是每幅圖像對邊框的距離,默認是c(5, 4, 4, 2) + 0.1。 lines(data)——(低級)原圖中畫線,data是由散點(x,y)組成 rug(jitter(<data>),side =2)——檢驗離群點數據,rug()原圖中執行繪圖繪制在橫坐標上,side為2是縱坐標,jitter(<data>)對繪制值略微調整,增加隨機排序以避免標記值作圖重合。 pairs(data)——數據框各個變量的散布圖 coplot(y~x|a+b)——多個變量時的散點圖,在a,b(向量或是因子)的劃分下的y與x的散點圖 scatterplotMatr()——散點圖矩陣,car包 identify(<data>)——交互式點選,單擊圖形中的點,將會輸出對應數據的行號,右擊結束交互 stem(x,scale=1,width=80,atom=1e-08)——莖葉圖,scale控制莖葉圖的長度,為2即是以0~4為一組,5~9為一組將個位分成兩部分,width是繪圖寬度,atom是容差 boxplot()——箱圖,研究變量的中心趨勢,以及變量發散情況和離群值。上體頂部和底部為上下四分位數,中間粗線為中位數,上下伸出的垂直部分為數據的散步范圍,最遠點為1.5倍四分為點,超出后為異常點,用圓圈表示。boxplot(y~f,notch=TRUE,col=1:3,add=TRUE)#y是數據,f是由因子構成,notch是帶有切口的箱型圖,add=T圖疊加到上一幅圖。 plot(f,y)——箱線圖,f是因子,y是與f因子對應的數值 bwplot(<factor> ~ <y>,data,ylab)——lattice包的箱圖,繪制不同factor下的y的箱圖(條件繪圖,在某個因子取值集合下的y值變化) bwplot(size~a1,data,panel=panel.bpplot,prob=seq(.01,.49,by=.01),datadensity=TRUE,ylab='')——Hmisc包的分位箱圖 earth.count(na.omit(x),number=4,overlap=1/5)——連續變量x的離散化,把x轉化為因子類型;number設置區間個數,overlap設置兩個區間靠近邊界的重合?每個區間的觀測值相等 stripplot(x1~y|x2)——lattice包的復雜箱圖,存在兩個因子x1,x2控制下的y, x2按照從左到右,從下到上的順序排列,左下方的x2值較小 palette()——col取值對應的顏色,?"black"?? "red"???? "green3"? "blue"??? "cyan"??? "magenta" "yellow"? "gray"?? colors()——列出對應的顏色數組 qcc()——qcc包,監控轉化率型指標的質量監控圖(P控制圖),監控異常點,前提是二項分布足夠大后趨于正態分布 mosaic(<tab>,shade=T,legend=T)——繪制三級列聯表,<tab>是三級列聯表或者公式,vcd包 curve(sapply(x,<func>),<from>,<to>)——畫曲線圖,from和to設置橫坐標取值范圍編輯
optim(c(0,0),<func>)——優化問題函數,c(0,0)是優化函數參數的初始值,返回值par是參數最優點值,value是參數的最優點時平方誤差值,counts是返回執行輸入函數func的次數以及梯度gradient的次數,convergence值為0表示有把握找到最優點,非0值時對應錯誤,message是一些其它信息。 curve(sapply(x,<func>),<from>,<to>)——畫曲線圖,from和to設置橫坐標取值范圍 sample(length(x),<size>,replace=F)——采樣,生成向量x的隨機順序的大小為<size>的新向量;replace為False為不重復抽樣,為True則重復抽樣 Round ——取整。精確 ceiling()——取整,偏向數值小的 floor() ——取整,偏向數值大的%/% ——整除 colnames(Data)[4]="value"——更換某一列名
edit()——編輯數據表格 fix()—— rm(x,y)——移除對象(變量)x和y na.exclude(<data>)——移除缺失數據整行 na.omit(<data>)——刪除缺失數據 attr(na.omit(<data>),"na.action")——返回向量a中元素為NA的下標 na.fail()——如果向量中至少包括1個NA值,則返回錯誤;如果不包括任何NA,則返回原有向量 merge(x = targets, y = infanty)——合并數據框,x和y是待合并數據框,相同屬性字段也會合并在一起 merge(x, y, by = intersect(names(x), names(y)),by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,sort = TRUE, suffixes = c(".x",".y"),incomparables = NULL, ...)? merge函數參數的說明: x,y:用于合并的兩個數據框 by,by.x,by.y:指定依據哪些行合并數據框,默認值為相同列名的列. all,all.x,all.y:指定x和y的行是否應該全在輸出文件. sort:by指定的列是否要排序. suffixes:指定除by外相同列名的后綴. incomparables:指定by中哪些單元不進行合并. scale(x, center = TRUE, scale = TRUE)——中心化與標準化,center是中心化,scale是標準化。(全選:減去均值,再除以標準差) cut(x,breaks=c(0,10,30),labels,ordered_result=F)——連續數據的離散化,將向量依據breaks區間分割為因子向量。labels設置返回因子向量的水平標簽值,ordered_result為False生成的因子向量無大小意義,否則有大小意義
- apply族函數
- plyr庫
- reshape庫(reshape2)
- 字符串處理
- 控制流
特殊數據對象
- 向量特性
數據索引
which(is.na(var) == T)——返回對應數組序號 which.max() 和 which.min()——返回數值類型中最大和最小元素下標 subset(<data>,<condition>,<colname>)——索引,<data>是數據,<condition>是索引條件,colnames指定索引列名 match(x,table,nomatch,incomparables)——匹配函數,返回x對應值在table中是否存在,并從1開始編號。x是查詢對象,table是待匹配的向量,nomatch是不匹配項的設置值(默認為NA值),incomparables設置table表中不參加匹配的數值,默認為NULL <x> %n% <y>——判斷x中是否包含y,返回x對應的邏輯值排序
sort(x, decreasing = FALSE, na.last = NA, ...)——排序,單變量排序,輸出排序結果(不是序號)。na.last為TRUE,缺失值放在數據最后,為False? ? 缺失值放在數據最前面,為NA,缺失數據將被移除 sort.list()——排序輸出序號值 order()——排序,多個變量數據框排序,返回數據框序號數。order例子【結】 結合ddply和transform函數,降序輸出并,輸出編號:ddply(dfx,.(group,sex),.fun=function(x){transform(x[order(x$age,decreasing=TRUE),c(1:3)],ind=1:length(group))}) rank()——秩排序,有重復數字的時候就用這個,根據數值之間的遠近輸出序號 rev()——依據下標從后往前倒排數據 unique(<dataframe>)——返回無重復樣本的數據集 duplicated(x)——查找重復數據,重復序號返回為TRUE比較大小
pmin(x1,x2,...)——比較向量中的各元素,并把較小的元素組成新向量 pmax(x1,x2,...)——向量間的交、并、補集
union(x, y)——(并集)合并兩組數據,x和y是沒有重復的同一類數據,比如向量集 intersect(x, y)——(交集)對兩組數據求交集,x和y是沒有重復的同一類數據,比如向量集 setdiff(x, y)——(補集)x中與y不同的數據,x和y是沒有重復的同一類數據,比如向量集,重復不同不記 setequal(x, y)——判斷x與y相同,返回邏輯變量,True為相同,False不同。x和y是沒有重復的同一類數據,比如向量集 is.element(x, y)?和?%n%——對x中每個元素,判斷是否在y中存在,TRUE為x,y重共有的元素,Fasle為y中沒有。x和y是沒有重復的同一類數據,比如向量集 Vectorize()——將不能進行向量化預算的函數進行轉化- 矩陣
matrix(0, 3, 4)——0為賦初值,3行,4列,存儲方式是先列后行!矩陣是二維的,用ncol和nrow設置矩陣的行數和列數。byrow設置存儲方式(默認列優先),若為TRUE則以行優先 dim(<vector>)<- c(2,3)——設置矩陣為2行3列 dimnames()=list(c(<row>),c(<col>))——設置參數行和列的名稱,以列表的形式進行輸入 matrix[ ,4]——矩陣第4列 as.vector(matrix)——將矩陣轉換成向量 a["name1","name2"]——矩陣以行和列的名稱來代替行列的下標,name1是行名,name2是列名 rbind()——矩陣合并,按行合并,自變量寬度應該相等 cbind()——矩陣合并,安列合并,自變量高度應該相等 t()——矩陣轉置 det()——行列式 solve(A,b)——求線性方程組Ax=b solve(A)——求逆矩陣 eigen(A) ——求距陣的特征值與特征向量,Ax=(Lambda)x,A$values是矩陣的特征值構成的向量,A$vectors是A的特征向量構成的矩陣 *——矩陣中每個元素對應相乘 %*%——矩陣相乘
- 因子
- 列表和數據框
- na和NULL的區別
- 處理缺失數據na
- 公式
數理統計
- 基礎知識
統計量
mean(x,trim=0,na,rm=FALSE)——均值,trim去掉x兩端觀測值的便利,默認為0,即包括全部數據,na.rm=TRUE允許數據中有缺失 weighted.mean(x,<weigth>)——加權平均值,weigth表示對應權值 median——中值 quantile(x,probs=seq(<start>,<end>,<diff>))——計算百分位數,是五數總和的擴展,probs設置分位數分位點,用seq(0,1,0.2)設置,表示以樣本值*20%為間隔劃分數據。 var()——樣本方差(n-1) sd——樣本標準差(n-1)cov——協方差 cor——相關矩陣 fivenum(x,na.rm=TRUE)——五數總括:中位數,下上四分位數,最小值,最大值
數學函數
sum(x,y,z,na.rm=FALSE)——x+y+z,na.rm為TURE可以忽略掉na值數據 sum(x>4)——統計向量x中數值大于4的個數 rep(“LOVE!”,<times>)——重復times次,rep(1:3,c(1,2,3))表示1個1,2個2,3個3組成的序列 sqrt()——開平方函數 2^2 和 **——“^”冪運算 abs()——絕對值函數 '%%'——表示求余? '%/%'——求商(整數) exp? : 2.71828… expm1? : 當x的絕對值比1小很多的時候,它將能更加正確的計算exp(x)-1 log? : 對數函數(自然對數) log10? : 對數(底為10)函數(常用對數) log2? : 對數(底為2)函數 因為10>e>1,常用對數比自然對數更接近橫坐標軸x log1p()——log(1+p),用來解決對數變換時自變量p=0的情況。指數和對數的變換得出任何值的0次冪都是1 特性:對數螺旋圖。當圖像呈指數型增長時,常對等式的兩邊同時取對數已轉換成線性關系。 sin? : 正弦函數 cos? : 余弦函數 tan? :? 正切函數 asin? :? 反正弦函數 acos? :? 反余弦函數 atan? :? 反正切函數 sinh? :? 超越正弦函數 cosh? :? 超越余弦函數 tanh? :? 超越正切函數 asinh? :? 反超越正弦函數 acosh? :? 反超越余弦函數 atanh? :? 反超越正切函數 logb? :? 和log函數一樣 log1px? :? 當x的絕對值比1小很多的時候,它將能更加正確的計算log(1+x) gamma? :? Γ函數(伽瑪函數) lgamma? :? 等同于log(gamma(x)) ceiling? :? 返回大于或等于所給數字表達式的最小整數 floor? :? 返回小于或等于所 給數字表達式的最大整數 trunc? :? 截取整數部分 round? :? 四舍五入 signif(x,a)? :? 數據截取函數 x:有效位 a:到a位為止 圓周率用 ‘pi’表示 crossprod(A,B)——A %*% t(B) ,內積 tcrosspeod(A,B)——t(A) %*% B,外積 %*%——內積,a1b1+a2b2+...+anbn=a*b*cos<a,b>,crossprod(x)表示x與x的內積。||x||2,矩陣相乘 %o%——外積,a*b*sin<a,b>(矩陣乘法,叉積),tcrossprod(x,y)表示x與y的外積。*表示矩陣中對應元素的乘積! 向量內積(點乘)和向量外積(叉乘)正態分布
dnorm(x,mean=0,sd=1,log=FALSE)——正態分布的概率密度函數 pnorm(x,mean=0,sd=1)——返回正態分布的分布函數· rnorm(n,mean=0.sd=1)——生成n個正態分布隨機數構成的向量 qnorm()——下分為點函數 qqnorm(data)——畫出qq散點圖 qqline(data)——低水平作圖,用qq圖的散點畫線 qq.plot(<x>,main='')——qq圖檢驗變量是否為正態分布簡單分析
summary()——描述統計摘要,和 Hmisc()包的describe()類似,會顯示NA值,四分位距是第1個(25%取值小于該值)和第3個四分位數(75%取值小于該值)的差值(50%取值的數值),可以衡量變量與其中心值的偏離程度,值越大則偏離越大。 table(<datafame>$<var>)——統計datafame數據中屬性變量var的數值取值頻數(NA會自動去掉!),列聯表 table(<data_var_1>, <data_var_2>)——比較兩個data_var,<data_var_1>為列,<data_var_2>為行,先列后行! xtabs(formular,data)——列聯表 ftable( table())——三維列聯表 prop.table()——統計所占百分比例 prop.table(table(<data_var_1>, <data_var_2>),<int>)——比較兩個data_var所占百分比,<int>填1位按行百分計算,2為列計算 margin.table( table(),<int> )——計算列聯表的邊際頻數(邊際求和),<int>=1為按列變量 addmargin.table(table(),<int>?)——計算列聯表的邊際頻數(邊際求和)并求和,<int>=1為按列變量 as.formula(<string>)——轉換為一個R公式,<string>是一個字符串 循環時的判斷語句: ifelse(<test>, <yes>, <no>)——if,else的變種,test是判斷語句,其中的判斷變量可以是一個向量!yes是True時的賦值,no是False時的賦值 hist(<data>,prob=T,xlab='橫坐標標題',main='標題',ylim=0:1,freq,breaks=seq(0,550,2))——prob=T表示是頻率直方圖,在直角坐標系中,用橫軸每個小區間對應一個組的組距,縱軸表示頻率與組距的比值,直方圖面積之和為1;prob位FALSE表示頻數直方圖;ylim設置縱坐標的取值范圍;freq為TRUE繪出頻率直方圖,counts繪出頻數直方圖,FALSE繪出密度直方圖。breaks設置直方圖橫軸取點間隔,如seq(0,550,2)表示間隔為2,從0到550之間的數值。 density(<data>,na.rm=T)——概率密度函數(核密度估計,非參數估計方法),用已知樣本估計其密度,作圖為lines(density(data),col="blue") ecdf(data)——經驗分布函數,作圖plot(ecdf(data),verticasl=FALSE,do.p=FALSE),verticals為TRUE表示畫豎線,默認不畫。do.p=FALSE表示不畫點處的記號- 假設檢驗
分布函數
shapiro.test(data)——正態W檢驗方法,當p值大于a為正態分布 ks.test(x,y)——經驗分布的K-S檢驗方法,比較x與y的分布是否相同,y是與x比較的數據向量或者是某種分布的名稱,ks.test(x, rnorm(length(x), mean(x), sd(x))),或ks.test(x,"pnorm",mean(x),sd(x)) chisq.test(x,y,p)——Pearson擬合優度X2(卡方)檢驗,x是各個區間的頻數,p是原假設落在小區間的理論概率,默認值表示均勻分布,要檢驗其它分布,比如正態分布時先構造小區間,并計算各個區間的概率值,方法如下: brk<-cut(x,br=c(-6,-4,-2,0,2,4,6,8))#切分區間 A<-table(brk)#統計頻數 p<-pnorm(c(-4,-2,0,2,4,6,8),mean(x),sd(x))#構造正態分布函數 p<-c(p[1],p[2]-p[1],p[3]-p[2],p[4]-p[3],p[5]-p[4],p[6]-p[5],p[7]-p[6])#計算各個區間概率值 chisq.test(A,p=p)正態總體的均值方差
t.test(x,y,alternative=c("two.sided","less","greater"),var.equal=FALSE)——單個正態總體均值μ或者兩個正態總體均值差μ1-μ2的區間估計;alternative表示備擇假設:two.side(默認)是雙邊檢驗,less表示H1:μ<μ0,greater表示H1:μ>μ0的單邊檢驗(μ0表示原假設);當var.equal=TRUE時,則是雙樣本方差相同的情況,默認為不同 var.test(x,y)——雙樣本方差比的區間估計獨立性檢驗(原假設H0:X與Y獨立)
chisq.test(x,correct=FALSE)——卡方檢驗,x為矩陣,dim(x)=c(2,2),對于大樣本(頻數大于5) fisher.test()——單元頻數小于5,列聯表為2*2相關性檢驗(原假設H0:X與Y相互獨立)
cor.test(x,y,method=c("pearson","kendall","spearman"))——相關性檢驗,觀察p-value小于0.05則相關。method選擇相關性檢驗方法秩
rank()——秩統計量 cor.test()——秩相關檢驗:Spearman,Kendall wilcox.test(x,y=NULL,mu,alternative,paired=FALSE,exact=FALSE,correct=FALSE,conf.int=FALSE)——秩顯著性檢驗(一個樣本來源于總體的檢驗,顯著性差異的檢驗),Wilcoxon秩和檢驗(非成對樣本的秩次和檢驗),mu是待檢測參數,比如中值,paired邏輯變量,說明變量x,y是否為成對數據,exact說民是否精確計算P值,correct是邏輯變量,說明是否對p值采用連續性修正,conf.int是邏輯變量,給出相應的置信區間。 uniroot(f,interval=c(1,2))——求一元方程根的函數,f是方程,interval是求解根的區間內,返回值root為解 optimize()或 optimise()——求一維變量函數的極小點 nlm(f,p)——求解無約束問題,求解最小值,f是極小的目標函數,p是所有參數的初值,采用Newton型算法求極小,函數返回值是一個列表,包含極小值、極小點的估計值、極小點處的梯度、Hesse矩陣以及求解所需的迭代次數等。顯著性差異檢驗(方差分析,原假設:相同,相關性)
mcnemar.test(x,y,correct=FALSE)——相同個體上的兩次檢驗,檢驗兩元數據的兩個相關分布的頻數比變化的顯著性,即原假設是相關分布是相同的。y是又因子構成的對象,當x是矩陣時此值無效。 binom.test(x,n,p,alternative=c("two.sided","less","greater"),conf.level=0.95)——二項分布,符號檢驗(一個樣本來源于總體的檢驗,顯著性差異的檢驗) aov(x~f)——計算方差分析表,x是與(因子)f對應因素水平的取值,用summary()函數查看信息 aov(x~A+B+A:B)——雙因素方差,其中X~A+B中A和B是不同因素的水平因子(不考慮交互作用),A:B代表交互作用生成的因子 p.adjust()——P值調整函數 pairwise.t.test(x,g,p.adjust.method="holm")——多重t檢驗,p.adjust.method是P值的調整方法,其方法由p.adjust()給出,默認值按Holm方法(”holm“)調整,若為”none“,表示P值不做任何調整。雙因素交互作用時g=A:B shapiro.test(x)——數據的正態W檢驗 bartlett.test(x~f,data)——Bartlett檢驗,方差齊性檢驗 kruskal.test(x~f,data)——Kruskal-Wallis秩和檢驗,非參數檢驗法,不滿足正態分布 friedman.test(x,f1,f2,data)——Friedman秩和檢驗,不滿足正態分布和方差齊性,f1是不同水平的因子,f2是試驗次數的因子- 常用模型
1、回歸模型
lm(y~.,<data>)——線性回歸模型,“.”代表數據中所有除y列以外的變量,變量可以是名義變量(虛擬變量,k個水平因子,生成k-1個輔助變量(值為0或1)) summary()——給出建模的診斷信息: 1、數據擬合的殘差(Residual standard error,RSE),殘差應該符合N(0,1)正態的,值越小越好 2、檢驗多元回歸方程系數(變量)的重要性,t檢驗法,Pr>|t|, Pr值越小該系數越重要(拒絕原假設) 3、多元R方或者調整R2方,標識模型與數據的擬合程度,即模型所能解釋的數據變差比例,R方越接近1模型擬合越好,越小,越差。調整R方考慮回歸模型中參數的數量,更加嚴格 4、檢驗解釋變量x與目標變量y之間存在的依賴關系,統計量F,用p-value值,p值越小越好 5、繪圖檢驗plot(<lm>)——繪制線性模型,和qq.plot誤差的正態QQ圖 6、精簡線性模型,向后消元法 線性回歸模型基礎 lm(formula=x~y,data,subset)——回歸分析,x是因變量(響應變量),y是自變量(指示變量),formular=y~x是公式,其中若是有x^2項時,應把公式改寫為y~I(x^2),subset為可選擇向量,表示觀察值的子集。例:lm(Y ~ X1 + X2 + I(X2^2) + X1:X2, data = data) predict(lm(y~x),new,interval=“prediction”,level=0.95)——預測,new為待預測的輸入數據,其類型必須為數據框data.frame,如new<-data.frame(x=7),interval=“prediction”表示同時要給出相應的預測區間 predict(lm(y~x))——直接用用原模型的自變量做預測,生成估計值 ? 篩選模型自變量 lm.new<-update(lm.sol,sqrt(.)~.)——修正原有的回歸模型,將響應變量做開方變換 update(<lm>, .~. - x1)——移除變量x1后的模型 coef(lm.new)——提取回歸系數 回歸診斷 1、正態性(QQ圖) plot(x,which)——回歸模型殘差圖,which=1~4分別代表畫普通殘差與擬合值的殘差圖,畫正態QQ的殘差圖,畫標準化殘差的開方與擬合值的殘差圖,畫Cook統 norm.test()——正態性檢驗,p-value>0.05為正態 計量的殘差圖 residuals()和resid()——殘差 rstandard()——標準化殘差 rstudent()——學生化殘差 influence.measures(model)——model是由lm或者glm構成的對象,對回歸診斷作總括,返回列表中包括,廣義線性模型也可以使用 ? anova(<lm>)——簡單線性模型擬合的方差分析(確定各個變量的作用) anova(<lm1>,<lm2>)——比較兩個模型(檢驗原假設為不同) 2、誤差的獨立性——car包提供Duerbin_Watson檢驗函數 3、線性——car包crPlots()繪制成分殘差圖(偏殘差圖)可以看因變量與自變量之間是否呈線性 4、同方差性——car包ncvTest()原假設為誤差方差不變,若拒絕原假設,則說明存在異方差性 5、多重共線性——car包中的vif()函數計算VIF方差膨脹因子,一般vif>2存在多重共線性問題 異常點分析(影響分析) hatvalues()和hat()——帽子矩陣 dffits()——DFFITS準則 cooks.distance()——Cook統計量,值越大越有可能是異常值點 covratio()——COVRATIO準則 kappa(z,exact=FALSE)——多重共線性,計算矩陣的條件數k,若k<100則認為多重共線性的程度很小;100<=k<=1000則認為存在中等程度或較強的多重共線性;若k>1000則認為存在嚴重的多重共線性。z是自變量矩陣(標準化,中心化的?相關矩陣),exact是邏輯變量,當其為TRUE時計算精準條件數,否則計算近似條件數。用eigen(z)計算特征值和特征向量,最小的特征值對應的特征向量為共線的系數。 step()——逐步回歸,觀察AIC和殘差平方和最小,廣義線性模型也可以使用 add1()——前進法 drop()——后退法 stepAIC(sol,direction="backward")——MASS包,可以實現逐步回歸(向前、向后、向前向后) 預測 predict(<sol>,<newdataframe>,level=0.95,interval="prediction")——回歸預測,sol是模型,newdataframe是待預測數據框,level設置置信度,interval="prediction"表示結果要計算置信區間 glm(formula,family=binomial(link=logit),data=data.frame)——廣義線性模型,logit默認為二項分布族的鏈接函數,formula有兩種輸入方法,一種方法是輸入成功和失敗的次數,另一種像線性模型的公式輸入方式 predict(glm(),data.frame(x=3.5),type="response")——預測廣義線性回歸模型,type=“response”表示結果為概率值,否則為預測值y inv.logit()——預測值y的反logit,boot包的函數 glmnet()——正則化glm函數,glmnet包,執行結果的行數越前正則化越強。其輸出結果的意義是: 1)DF是指明非0權重個數,但不包括截距項。可以認為大部分輸入特征的權重為0時,這個模型就是稀疏的(sparse)。 2)%Dev就是模型的R2 3)超參數(lambda)是正則化參數。lambda越大,說明越在意模型的復雜度,其懲罰越大,使得模型所有權重趨向于0。 plot(lm(y~x),which=1:4,caption=c(“Residuals vs Fitted”,“Normal Q-Q plot”,“Scale-Location plot”,“Cook's distance plot”))——畫回歸模型殘差圖,which為1表示畫普通殘差與擬合值的殘差圖,2表示畫正態QQ的殘差圖,3表示畫標準化殘差的開方與擬合值的殘差圖,4表示畫Cook統計量的殘差圖;caption是圖題的內容。 avova(sol1,sol2,test="Chisq")——比較模型兩個模型,廣義線性模型可用卡方檢驗(分類變量),不拒絕原假設說明兩個沒有顯著差異,即用較少自變量模型就可以。 非線性模型 poly(想,degree=1)——計算正交多現實,x是數值向量,degree是正交多項式的階數,并且degree<length(x)樣本個數,例如建立二次正交式回歸模型:lm(y~1+poly(x,2)) nls(formula,data,start)——求解非線性最小二乘問題,formula是包括變量和非線性擬合的公式,start是初始點,用列表形式給出 nlm(f,p)——非線性最小二乘,構造最小目標函數,方程移項2為0,f是極小的目標函數,p是所有參數的初值,采用Newton型算法求極小,函數返回值是一個列表,minimum的值便是極小值,estimate是參數的估計值。例如: fn<-function(p,x,y){ f<-y-p[1]*exp(p[2]*x) res<-sum(f^2) } nlm.sol<-nlm(fn,p=c(3,-0.1),x,y)2、回歸樹
rpart( y ~., <data>)——rpart包,回歸樹,葉結點目標變量的平均值就是樹的預測值。生成一棵樹,再做修剪(防止過度擬合),內部10折交叉驗證 printcp(<rt>)——查看回歸樹結果,rt是指rpart()函數的運行結果模型,plotcp(<rt>)以圖形方式顯示回歸樹的參數信息 參數如下: cp——當偏差的減少小于某一個給定界限值,默認0.01 minsplit——當結點中的樣本數量小于某個給定界限時,默認20 maxdepth——當樹的深度大于一個給定的界限值,默認30 prune(<rt>,cp)——自行設置cp值的建樹 snip.rpart(<rt>, c(4,7))——修剪,需要修剪的那個地方的是結點號c(4,7),指出輸出樹對象來需要修剪的樹的結點號 snip.rpart(<rt>)——交互修剪,點擊結點,右擊結束3、隨機森林
randomForest(y ~., <data>)——組合模型,由大量樹模型構成,回歸任務采用預測結果的平均值。4、支持向量機
svm(<formula>,<data>,gamma=1/ncol(<data>),<cost>)——e1071包,回歸任務,<gamma>=0.01,<cost>=100違反邊際所引入的損失?5、時間序列分析
ts(<data>, frequency=12, start=(2006,1))——把一個向量轉化為時間序列對象,<data>向量,frequency表示頻率,start表示時間起始點 decompose(<data>,type)——把時間序列分解成長期趨勢和周期性變化,<data>是設置了頻率(周期長度)的時間序列數據,type="additive"為累加形式:長期趨勢+周期性變化+隨機變化;"multiplicative"分解為累乘形式:長期趨勢*周期性變化*隨機變化。默認使用"additive"累加形式。函數返回值sol<-decompose()中,sol$trend是時間序列趨勢,seasonal是季節性周期變化,random是隨機誤差。 stl(<data>,"per")——分解時間序列,返回值sol<-stl()中,sol$time.series[, "seasonal"]讀取周期性序列seasonal,sol$time.series[, "trend"]讀取長期趨勢trend。誤差可以使用sol$time.series[,?"remainder"]讀取。 增長率: diff(data,lag=1)——差分,上下做差,lag控制變量上下間隔為1 ring.growth[t]=(data[t]-data[t-1])/data[t-1]——同比增長率,描述指標變化趨勢 sam.per.grown[t]=(data[t]-data[t-T])/data[t-T]——環比增長率,分析周期性變化,避免周期性變化給數據分析帶來的影響,T一般以周為單位 移動平均: filter(x, filter, method=c("convolution", "recursive"), side=2,...)——線性過濾函數,x待轉化的向量數據,method=convolution(卷積方法):使用x內部樣本組成線性模型(系數ai由filter參數設置的,side參數設置卷積方法是單邊或者雙邊),recursive(遞歸方法):使用y內部樣本以及當前階段的x樣本組成線性模型(系數ai由filter設置)y遞歸[t]=x[t]+sum(ai*y[t-i])。side為1(單邊卷積)y卷積[t]=a1*x[t]+...+a(k+1)*x[t-k],side為2(雙邊卷積)y卷積[t]=a1*x[t+m]+...+a(m+1)*x[t] 指數平滑: sol<-HoltWinters(<data>)——實現二次平滑和三次平滑指數。 sol.forst<-forecast.HoltWinters(sol, h=12)——預測HoltWinters函數產生的模型的新時間序列,h表示頻率?預測未來12個月 plot.forecast(sol.forst, include=10)——繪制預測圖,include=10表明繪制預測前10個月的數據和未來12個月的預測數據ARIMA模型
ymd()——lubridate包,將"年-月-日"格式的字符串轉換成日期對象,(可以比較前后時間) 自相關性 cov(data.frame(x,y))——協方差矩陣S cor(data.frame(x,y))——相關系數矩陣R rnorm(n,<mean>,<sd>) arima.sim(n=100,list(ar=,ma=))——模擬100個樣本的模擬序列 lag.plot(data,lag=k,do.line=FALSE)——繪制原始數據和k階滯后的散點圖 acf(data,lag.max=16,ci.type="ma")——計算并繪制自相關圖,0階自相關系數是rxx,所以恒等于1。ci.type="ma"主要是慨率acf的標準誤的問題,以使acf圖等準確。 pacf(data,lag.max=16)——偏自相關圖,消除Xt-1,...,Xt-k+1的影響后,研究Xt和Xt-k的相關性。 Box.test(data,type="Ljung-Box",lag=16,fitdf=p+q)——自相關性檢驗,p-value<0.05,標識數據data具有自相關,fitdf為自由度參數p+q arima(data,order=c(p,d,q))——計算模型參數并建模,TSA包中,order設置AR過程的階數p,差分過程的d(用于穩定化)和MA過程的階數q。當p=d=0時,表示只使用MA過程對序列建模。結果sol<-arima()調用predict(sol,n.ahead=5)$pred進行預測,n.ahead參數用于設置預測新階段的數據量(未來5個月),predict(...)$se標準誤差SE,用于計算預測范圍(預測范圍=預測值+-置信度(alpha)*標準誤差SE。 eacf(data)——根據凸顯中三角區域頂點的行坐標和列坐標分別確定ARMA的p和q norm.test()——正態性檢驗,p-value>0.05為正態 tsdiag(sol)——繪制模型殘差的散點圖、自相關圖和不同階數下的Box.test體檢驗p-value值 模型評估 RMSE(lm,<?which>)——qpcR包中計算均方根誤差,計算子集subset- 聚類分析
- 主成分分析
數據集
data()——查看R自帶數據列表 iris——鳶尾花數據集總共150行3種類別 iris3[1:50, 1:4, 1:3]——每50行一組,分3個類別分別 volcano——87x61 matrix with elevation value模型函數
神經網絡 nnet()——在nnet包中BP神經網絡,存在一層的隱藏層。 參數: size=0,設置隱藏層中神經元數,設置為0時,表示建立一層神經網絡?沒有隱藏層 Wts:初始系數,不設定則使用隨機數設定 linout:為TRUE時,模型輸出(目標變量)為連續型實數,一般用于回歸分析;如果為FALSE(默認取值)則輸出為邏輯數據,一般用于(目標變量為分類型)分類分析,也可以把linout設為TRUE再添加一個階躍函數轉為邏輯型輸出。 maxit:最大迭代次數iterations,默認為100次,一般盡量將maxit設置大于觀測結果final value上顯示的迭代次數。 skip:是否跳過隱藏層,如果為FALSE(默認),則不跳過 decay:加權系數的衰減 隱藏層中神經單元數目的確定 支持向量機 svm()——e1071包中回歸非線性 ksvm()——kernlab包中分類,分類時用的默認參數樹徑向基核函數 多元自適應回歸樣條 mars()——mda包 earth()——earth包,具有更多優勢 決策樹 RWeka包:C4.5(分類,輸入變量是分類型或連續型,輸出變量是分類型) J48() rpart包:分類回歸樹(CART)算法(輸入、輸出分類或連續變量) rpart()——擬合樹模型,參數xval設置k折交叉驗證 prune()——剪枝 party包:條件推理決策樹(CHAID)算法(輸入、輸出分類或連續變量) ctree() 隨機森林 randomForest包:分類與回歸樹的隨機森林 randomForest()——隨機森林,預測,分類,估計變量的重要性(通過計算每個變量被移除后隨機森林誤差的增加(選擇變量需要用到模型的信息,但用其它模型來做預測) party包:條件推理決策樹的隨機森林 cforest() 時間序列 ts——在stats包中創建一個時間序列 xts包——時間序列 xts(<data>,<label>)——時間數列,可以是單元的也可以是多元的。<data>時間序列數據,<label>時間標簽。as.xts(read.zoo("abc.csv", header = T)) seq.POSIXct() 和 Date——標識時間信息的規格的類 index() 和 time()——獲取對象的時間標簽 coredata()——獲取時間序列的數值 貝葉斯分類 e1071包: nativeBayes()——樸素貝葉斯分類器,可以處理分類型和連續型自變量 knn knn()——class包 TTR包——技術指標集合 quantmod包——分析金融數據 tserise包特殊字符
formula=y~.——"."是除y以外數據中的所有變量 function(fromula, train, test,...)——特殊參數“...",允許特定函數具有可變參數,這個參數結構是一個列表,用來獲取傳遞給前三個命名參數之后的所有參數。這個結構用于給實際模型傳遞所需要的額外參數。 <model.object>@pars——(模型)對象的屬性用操作符“@”訪問,比如對象object的屬性是pars?
轉載于:https://www.cnblogs.com/think-and-do/p/6549422.html
總結
- 上一篇: matlab如何输出恒定值,《工程与科学
- 下一篇: java核心技术 第11版 集合