A. 如何用r軟體對給定數據進行回歸分析(不能用lm函數)
可以試著探索一下summary(lm(y~x))到底是什麼。 首先看一下summary(lm(y~x))是什麼數據類型: > m class(summary(m)) [1] "summary.lm" #可以看到,lm的結果是一個"summary.lm" 對象。這有些顯而易見。好吧,繼續探索。 R語言中所有的對象都建立在一些native data structures之上,那麼summary(lm(y~x)的native data structure是什麼呢?可以用mode()命令查看。
B. R語言相關性分析圖。想知道怎麼分析這些數據
框內的數字是行變數和列變數之間的相關系數R,相關系數R絕對值越大,顏色越深(紅正,藍負)。統計學中,P值越小相關性越顯著,一般來說 一個*代表顯著相關(P值為0.01,選取不同參數可能不一樣)、兩個**代表極顯著相關(P值為0.001)、三個***代表極極顯著相關(P值為0.0001). 圖中還可以看出,相關系數R的絕對值0.67(變數P50與T之間)以上的都顯著相關,至少一個*。符合一般關於相關系數R值的顯著性統計。
C. 怎麼學慣用 R 語言進行數據挖掘
什麼是R語言?應該如何開始學習/使用R語言呢?
學習R有幾個月了,總算是摸著了一點門道。
寫一些自己的心得和經驗,方便自己進一步鼓搗R。如果有人看到我寫的東西而得到了幫助,那就更好了。
什麼是R?R的優點何在?
R是一個數據分析軟體。簡單點說,R可以看做MATLAB的「替代品」,而且具有免費開源的優勢。R可以像MATLAB一樣解決有關數值計算的問題,而且具有強大的數據處理,繪圖功能。
R擁有大量的統計分析工具包,我的感覺是——只有我們沒聽說過的工具,絕對沒有R沒有的工具包。配合著各種各樣的工具包,你可以毀滅任何關於數據和統計的問題。因為數據包的數量龐大,所以查找自己需要的數據包,可能很煩惱。
如果有以下技能,學R會很方便:
1.已經了解些高級程序語言(非常重要)
2.英語不壞
3.概率統計理論基礎
4.看數據不頭疼
5.看cmd or terminal 也不頭疼
你需要一本適合你的R語言教材
我開始學習R的時候,找到了這個帖子
非常強大的關於R語言教材綜述。我非常感謝原帖作者。你可以參考這個帖子選一本適合你的教材。
我這里在說一下我主要使用的幾本教材的心得:
1. 統計建模與R軟體(薛毅著):非常優秀的R語言入門教材,涵蓋了所有R的基礎應用&方法,示例代碼也很優秀。作為一本中文的程序語言教材,絕對是最優秀的之一。但是要看懂這本書,還是需要「已經了解些高級程序語言」。PS:我親愛的吉林大學圖書館,有兩本該教材流通,我常年霸佔一本。
2. R in Nutshell:從講解內容上看,與上一本差別不大,在R語言的應用上都是比較初級的入門,但是有些R軟體&語言上的特性,寫得比薛毅老師的教材深刻。這本書最大的優點就是工具書,方便開始入門時候,對有些「模稜兩可」的東西的查詢。PS:我將這本書列印了出來,簡單的從頭到尾翻過,最大的用途就是像一本字典一樣查詢。
3. ggplot2 Elegant Graphics for Data:這是一本介紹如何使用ggplot2包,進行繪圖的書。ggplot2包,非常強大的繪圖工具,幾乎可以操作任何圖中的元素,而且是提供添加圖層的方式讓我們可以一步步的作圖。提到ggplot2包,應該提到一個詞——「潛力無窮」,每一個介紹
ggplot2的人,都會用這個形容詞。這本書最大的作用也是當做一本繪圖相關的工具書,書中講解詳細,細致,每個小參數的變動都會配圖幫你理解。PS:這本書我也列印出來了,非常適合查詢。
幾個可以逐步提高R能力的網站
1.R-bloggers: 這里有關於R和數據的一切討論,前沿的問題,基礎的問題,應有盡有。可以說這些傢伙們讓R變得越來越強大。我RSS了這個網站,每天都看一下有什麼我感興趣的方法和話題,慢慢的積累一些知識,是一個很有意思的過程。
2.統計之都: 這是一個有大量R使用者交流的論壇,你可以上去提問題,總有好心人來幫助你的。
3.R客: 是關於R的一個博客,更新不快,偏重國內R的一些發展。
R的使用環境
如果你看見terminal or cmd就打怵的話,一定要使用Rstudio。Rstudio的優點是,集成了Rconsole、腳本編輯器、可視化的數據查詢、歷史命令、幫助查詢等,還有的完美的腳本和console的互動。畢竟是可視化的界面,有許多按鈕可以用。R 的腳本編輯器很蛋疼,就比記事本多了個顏色高亮吧,不適合編寫腳本,但適合調試腳本。
最後,說一下,剛開始學習R或者其他什麼語言,都有一個通病,就是一些小細節的不知道,或者是記得不清楚,往往一個蛋疼的bug就可以耗掉大量的時間,這是一個讓人想砸電腦的過程。我往後,會在博客里記錄一些讓我蛋很疼的小細節。本文分為6個部分,分別介紹初級入門,高級入門,繪圖與可視化,計量經濟學,時間序列分析,金融等。
1.初級入門
《An Introction to R》,這是官方的入門小冊子。其有中文版,由丁國徽翻譯,譯名為《R導論》。《R4Beginners》,這本小冊子有中文版應該叫《R入門》。除此之外,還可以去讀劉思喆的《153分鍾學會R》。這本書收集了R初學者提問頻率最高的153個問題。為什麼叫153分鍾呢?因為最初作者寫了153個問題,閱讀一個問題花費1分鍾時間,全局下來也就是153分鍾了。有了這些基礎之後,要去讀一些經典書籍比較全面的入門書籍,比如《統計建模與R軟體》,國外還有《R Cookbook》和《R in action》,本人沒有看過,因此不便評論。
最後推薦,《R in a Nutshell》。對,「果殼裡面的R」!當然,是開玩笑的,in a Nutshell是俚語,意思大致是「簡單的說」。目前,我們正在翻譯這本書的中文版,大概明年三月份交稿!這本書很不錯,大家可以從現在開始期待,並廣而告知一下!
2.高級入門
讀了上述書籍之後,你就可以去高級入門階段了。這時候要讀的書有兩本很經典的。《Statistics with R》和《The R book》。之所以說這兩本書高級,是因為這兩本書已經不再限於R基礎了,而是結合了數據分析的各種常見方法來寫就的,比較系統的介紹了R在線性回歸、方差分析、多元統計、R繪圖、時間序列分析、數據挖掘等各方面的內容,看完之後你會發現,哇,原來R能做的事情這么多,而且做起來是那麼簡潔。讀到這里已經差不多了,剩下的估計就是你要專門攻讀的某個方面內容了。下面大致說一說。
3.繪圖與可視化
亞里斯多德說,「較其他感覺而言,人類更喜歡觀看」。因此,繪圖和可視化得到很多人的關注和重視。那麼,如何學習R畫圖和數據可視化呢?再簡單些,如何畫直方圖?如何往直方圖上添加密度曲線呢?我想讀完下面這幾本書你就大致會明白了。
首先,畫圖入門可以讀《R Graphics》,個人認為這本是比較經典的,全面介紹了R中繪圖系統。該書對應的有一個網站,google之就可以了。更深入的可以讀《Lattice:Multivariate Data Visualization with R》。上面這些都是比較普通的。當然,有比較文藝和優雅的——ggplot2系統,看《ggplot2:Elegant Graphics for Data Analysis》。還有數據挖掘方面的書:《Data Mining with Rattle and R》,主要是用Rattle軟體,個人比較喜歡Rattle!當然,Rattle不是最好的,Rweka也很棒!再有就是交互圖形的書了,著名的交互系統是ggobi,這個我已經喜歡兩年多了,關於ggobi的書有《Interactive and Dynamic Graphics for Data Analysis With R and GGobi》,不過,也只是適宜入門,更多更全面的還是去ggobi的主頁吧,上面有各種資料以及包的更新信息!
特別推薦一下,中文版繪圖書籍有《現代統計圖形》。
4.計量經濟學
關於計量經濟學,首先推薦一本很薄的小冊子:《Econometrics In R》,做入門用。然後,是《Applied Econometrics with R》,該書對應的R包是AER,可以安裝之後配合使用,效果甚佳。計量經濟學中很大一部分是關於時間序列分析的,這一塊內容在下面的地方說。
5.時間序列分析
時間序列書籍的書籍分兩類,一種是比較普適的書籍,典型的代表是:《Time Series Analysis and Its Applications :with R examples》。該書介紹了各種時間序列分析的經典方法及實現各種經典方法的R代碼,該書有中文版。如果不想買的話,建議去作者主頁直接下載,英文版其實讀起來很簡單。時間序列分析中有一大塊兒是關於金融時間序列分析的。這方面比較流行的書有兩本《Analysis of financial time series》,這本書的最初是用的S-plus代碼,不過新版已經以R代碼為主了。這本書適合有時間序列分析基礎和金融基礎的人來看,因為書中關於時間序列分析的理論以及各種金融知識講解的不是特別清楚,將極值理論計算VaR的部分就比較難看懂。另外一個比較有意思的是Rmetrics推出的《TimeSeriesFAQ》,這本書是金融時間序列入門的東西,講的很基礎,但是很難懂。對應的中文版有《金融時間序列分析常見問題集》,當然,目前還沒有發出來。經濟領域的時間序列有一種特殊的情況叫協整,很多人很關注這方面的理論,關心這個的可以看《Analysis of Integrated and Cointegrated Time Series with R》。最後,比較高級的一本書是關於小波分析的,看《Wavelet Methods in Statistics with R》。附加一點,關於時間序列聚類的書籍目前比較少見,是一個處女地,有志之士可以開墾之!
6.金融
金融的領域很廣泛,如果是大金融的話,保險也要被納入此間。用R做金融更多地需要掌握的是金融知識,只會數據分析技術意義寥寥。我覺得這些書對於懂金融、不同數據分析技術的人比較有用,只懂數據分析技術而不動金融知識的人看起來肯定如霧里看花,甚至有人會覺得金融分析比較低級。這方面比較經典的書籍有:《Advanced Topics in Analysis of Economic and Financial Data Using R》以及《Modelling Financial Time Series With S-plus》。金融產品定價之類的常常要用到隨機微分方程,有一本叫《Simulation Inference Stochastic Differential Equations:with R examples》的書是關於這方面的內容的,有實例,內容還算詳實!此外,是風險度量與管理類。比較經典的有《Simulation Techniques in Financial Risk Management》、《Modern Actuarial Risk Theory Using R》和《Quantitative Risk Management:Concepts, Techniques and Tools》。投資組合分析類和期權定價類可以分別看《Portfolio Optimization with R》和《Option Pricing and Estimation of Financial Models with R》。
7.數據挖掘
這方面的書不多,只有《Data Mining with R:learing with case studies》。不過,R中數據挖掘方面的包已經足夠多了,參考包中的幫助文檔就足夠了。
D. 如何用R 語言 建立 股票價格的時間序列
在下想用R語言對股票價格進行時間序列分析。
問題出在第一步,如何將股票價格轉換為時間序列。
我想用的語句是 pri <- ts (data, start=(), frequency= )
但是我不知道frequency 項該如何填?
因為股票的交易日是一周五天的。 那麼這個frequency 該如何設置呢?
我知道通常frequency= 12 為月度數據,frequency= 4 為季度數據,frequency= 1 為年度數據 但日數據怎麼寫我就不知道了
初學R語言,還望各位大俠多多幫助。
E. 用r語言做數據分析好學嗎
非常好學。輸入幾行代碼,即可得到結果。
R不但數據分析好用,而且作圖能力極好,推薦你用。
下面是R數據分析的一些代碼,包括數據導入、方差分析、卡方測驗、線性模型及其誤差分析。希望可以幫到你:
1.1導入數據
install.packages('xslx')
library(xlsx)
Sys.setlocale("LC_ALL", "zh_cn.utf-8")
a=read.xlsx2('d:/1.xlsx',1,header=F)
head(a)顯示前六行
class(a$y)/str(a)查看列/全集數據類型
a$y=as.numeric(a$y)轉換數據類型
1.2方差分析(F test)
with(a,tapply(liqi,tan,shapiro.test))正態性檢驗
library(car)leveneTest(liqi~tan,a)方差齊性檢驗
q=aov(liqi~tan*chong,a)方差分析(正態型)
summary(q)
TukeyHSD(q)多重比較
1.3卡方測驗(Pearson Chisq)
a1=summarySE(a,measurevar='y', groupvars=c('x1','x2'))卡方檢驗(邏輯型/計數型)
aa=a1$y
aaa=matrix(a2,ncol=2)
aaa= as.table(rbind(c(56,44), c(36,64), c(48,52),c(58,42)))
dimnames(aaa)= list(group=c("不添加抗性","不添加敏感","添加抗性","添加敏感"),effect=c("存活","死亡"))
aaa=xtabs(data=a,~x+y)
chisq.test(a)誤差分析(卡方測驗,Pearson法)
install.packages("rcompanion")
library(rcompanion)
pairwiseNominalIndependence(a)多重比較
1.4線性模型及其誤差分析(Wald Chisq)
q=lm(data=a,y~x1*x2)一般線性模型(正態性)
summary(q)
q=glm(data=a,y~x1*x2,family = gaussian(link='identity'))廣義線性模型(正態性)
summary(q)
q=glm(data=a,y~x1*x2,family = binomial(link='logit'))廣義線性模型(邏輯型,二項分布)
summary(q)
q=glm(data=a,y~x1*x2,family = poisson(link='log'))廣義線性模型(計數型,泊松分布)
summary(q)
install.packages('lmerTest')一般線性混合效應模型(正態性)
library(lmerTest)
install packages(『lme4』)
library(lme4)
q=lmer(data=a,y~x1*(1|x2))
q=lmer(data=a,y~x1*(1|x2),family = gaussian(link='identity'))廣義線性混合效應模型(正態性)
q=glmer(data=a,y~x1*(1|x2),family = binomial(link='logit'))廣義線性混合效應模型(邏輯型,二項分布)
q=glmer(data=a,y~x1*(1|x2),family = poisson(link='log'))廣義線性混合效應模型(計數型,泊松分布)
summary(q)
install.packages('car')
install.packages('openxlsx')
library(car)
install.packages('nlme')
library(nlme)
Anova(q,test='Chisq')線性模型的誤差分析(似然比卡方測驗,Wald法)
lsmeans(q,pairwise~chuli,adjust = "tukey")線性模型的多重比較(tukey法)
F. 用R語言進行關聯分析
用R語言進行關聯分析
關聯是兩個或多個變數取值之間存在的一類重要的可被發現的某種規律性。關聯分析目的是尋找給定數據記錄集中數據項之間隱藏的關聯關系,描述數據之間的密切度。
幾個基本概念
1. 項集
這是一個集合的概念,在一籃子商品中的一件消費品即為一項(Item),則若干項的集合為項集,如{啤酒,尿布}構成一個二元項集。
2. 關聯規則
一般記為的形式,X為先決條件,Y為相應的關聯結果,用於表示數據內隱含的關聯性。如:,表示購買了尿布的消費者往往也會購買啤酒。
關聯性強度如何,由三個概念——支持度、置信度、提升度來控制和評價。
例:有10000個消費者購買了商品,其中購買尿布1000個,購買啤酒2000個,購買麵包500個,同時購買尿布和麵包800個,同時購買尿布和麵包100個。
3. 支持度(Support)
支持度是指在所有項集中{X, Y}出現的可能性,即項集中同時含有X和Y的概率:
該指標作為建立強關聯規則的第一個門檻,衡量了所考察關聯規則在「量」上的多少。通過設定最小閾值(minsup),剔除「出鏡率」較低的無意義規則,保留出現較為頻繁的項集所隱含的規則。
設定最小閾值為5%,由於{尿布,啤酒}的支持度為800/10000=8%,滿足基本輸了要求,成為頻繁項集,保留規則;而{尿布,麵包}的支持度為100/10000=1%,被剔除。
4. 置信度(Confidence)
置信度表示在先決條件X發生的條件下,關聯結果Y發生的概率:
這是生成強關聯規則的第二個門檻,衡量了所考察的關聯規則在「質」上的可靠性。相似的,我們需要對置信度設定最小閾值(mincon)來實現進一步篩選。
具體的,當設定置信度的最小閾值為70%時,置信度為800/1000=80%,而的置信度為800/2000=40%,被剔除。
5. 提升度(lift)
提升度表示在含有X的條件下同時含有Y的可能性與沒有X這個條件下項集中含有Y的可能性之比:
該指標與置信度同樣衡量規則的可靠性,可以看作是置信度的一種互補指標。
R中Apriori演算法
演算法步驟:
1. 選出滿足支持度最小閾值的所有項集,即頻繁項集;
2. 從頻繁項集中找出滿足最小置信度的所有規則。
> library(arules) #載入arules包
> click_detail =read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1)) #讀取txt文檔(文檔編碼為ANSI)
> rules <- apriori(click_detail, parameter =list(supp=0.01,conf=0.5,target="rules")) #調用apriori演算法
> rules
set of419 rules
> inspect(rules[1:10]) #查看前十條規則
解釋
1) library(arules):載入程序包arules,當然如果你前面沒有下載過這個包,就要先install.packages(arules)
2) click_detail =read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1)):讀入數據
read.transactions(file, format =c("basket", "single"), sep = NULL,
cols = NULL, rm.plicates =FALSE, encoding = "unknown")
file:文件名,對應click_detail中的「click_detail.txt」
format:文件格式,可以有兩種,分別為「basket」,「single」,click_detail.txt中用的是basket。
basket: basket就是籃子,一個顧客買的東西都放到同一個籃子,所有顧客的transactions就是一個個籃子的組合結果。如下形式,每條交易都是獨立的。
文件形式:
item1,item2
item1
item2,item3
讀入後:
items
1 {item1,
item2}
2 {item1}
3 {item2,
item3}
single: single的意思,顧名思義,就是單獨的交易,簡單說,交易記錄為:顧客1買了產品1, 顧客1買了產品2,顧客2買了產品3……(產品1,產品2,產品3中可以是單個產品,也可以是多個產品),如下形式:
trans1 item1
trans2 item1
trans2 item2
讀入後:
items transactionID
1 {item1} trans1
2 {item1,
item2} trans2
sep:文件中數據是怎麼被分隔的,默認為空格,click_detail裡面用逗號分隔
cols:對basket, col=1,表示第一列是數據的transaction ids(交易號),如果col=NULL,則表示數據裡面沒有交易號這一列;對single,col=c(1,2)表示第一列是transaction ids,第二列是item ids
rm.plicates:是否移除重復項,默認為FALSE
encoding:寫到這里研究了encoding是什麼意思,發現前面txt可以不是」ANSI」類型,如果TXT是「UTF-8」,寫encoding=」UTF-8」,就OK了.
3) rules <- apriori(click_detail,parameter = list(supp=0.01,conf=0.5,target="rules")):apriori函數
apriori(data, parameter = NULL, appearance = NULL, control = NULL)
data:數據
parameter:設置參數,默認情況下parameter=list(supp=0.1,conf=0.8,maxlen=10,minlen=1,target=」rules」)
supp:支持度(support)
conf:置信度(confidence)
maxlen,minlen:每個項集所含項數的最大最小值
target:「rules」或「frequent itemsets」(輸出關聯規則/頻繁項集)
apperence:對先決條件X(lhs),關聯結果Y(rhs)中具體包含哪些項進行限制,如:設置lhs=beer,將僅輸出lhs含有beer這一項的關聯規則。默認情況下,所有項都將無限制出現。
control:控制函數性能,如可以設定對項集進行升序sort=1或降序sort=-1排序,是否向使用者報告進程(verbose=F/T)
補充
通過支持度控制:rules.sorted_sup = sort(rules, by=」support」)
通過置信度控制:rules.sorted_con = sort(rules, by=」confidence」)
通過提升度控制:rules.sorted_lift = sort(rules, by=」lift」)
Apriori演算法
兩步法:
1. 頻繁項集的產生:找出所有滿足最小支持度閾值的項集,稱為頻繁項集;
2. 規則的產生:對於每一個頻繁項集l,找出其中所有的非空子集;然後,對於每一個這樣的子集a,如果support(l)與support(a)的比值大於最小可信度,則存在規則a==>(l-a)。
頻繁項集產生所需要的計算開銷遠大於規則產生所需的計算開銷
頻繁項集的產生
幾個概念:
1, 一個包含K個項的數據集,可能產生2^k個候選集
2,先驗原理:如果一個項集是頻繁的,則它的所有子集也是頻繁的(理解了頻繁項集的意義,這句話很容易理解的);相反,如果一個項集是非頻繁的,則它所有子集也一定是非頻繁的。
3基於支持度(SUPPORT)度量的一個關鍵性質:一個項集的支持度不會超過它的子集的支持度(很好理解,支持度是共同發生的概率,假設項集{A,B,C},{A,B}是它的一個自己,A,B,C同時發生的概率肯定不會超過A,B同時發生的概率)。
上面這條規則就是Apriori中使用到的,如下圖,當尋找頻繁項集時,從上往下掃描,當遇到一個項集是非頻繁項集(該項集支持度小於Minsup),那麼它下面的項集肯定就是非頻繁項集,這一部分就剪枝掉了。
一個例子(網路到的一個PPT上的):
當我在理解頻繁項集的意義時,在R上簡單的復現了這個例子,這里採用了eclat演算法,跟apriori應該差不多:
代碼:
item <- list(
c("bread","milk"),
c("bread","diaper","beer","eggs"),
c("milk","diaper","beer","coke"),
c("bread","milk","diaper","beer"),
c("bread","milk","diaper","coke")
)
names(item) <- paste("tr",c(1:5),sep = "")
item
trans <- as(item,"transactions") #將List轉為transactions型
rules = eclat(trans,parameter = list(supp = 0.6,
target ="frequent itemsets"),control = list(sort=1))
inspect(rules) #查看頻繁項集
運行後結果:
>inspect(rules)
items support
1{beer,
diaper} 0.6
2{diaper,
milk} 0.6
3{bread,
diaper} 0.6
4{bread,
milk} 0.6
5{beer} 0.6
6{milk} 0.8
7{bread} 0.8
8{diaper} 0.8
以上就是該例子的所有頻繁項集,然後我發現少了{bread,milk,diaper}這個項集,回到例子一看,這個項集實際上只出現了兩次,所以是沒有這個項集的。
規則的產生
每個頻繁k項集能產生最多2k-2個關聯規則
將項集Y劃分成兩個非空的子集X和Y-X,使得X ->Y-X滿足置信度閾值
定理:如果規則X->Y-X不滿足置信度閾值,則X』->Y-X』的規則一定也不滿足置信度閾值,其中X』是X的子集
Apriori按下圖進行逐層計算,當發現一個不滿足置信度的項集後,該項集所有子集的規則都可以剪枝掉了。
G. R語言怎麼把股票日收盤價轉換成對數收益率
知道一系列收盤價向量X,length=1000,求對數收益率的R語言代碼
acf(int[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int monthly
acf(int.l[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int monthly
log return')
Box.test(int[,2], lag = 5, type = "Ljung-Box")
Box.test(int[,2], lag = 10, type = "Ljung-Box")
Box.test(int.l[,2], lag = 5, type = "Ljung-Box")
Box.test(int.l[,2], lag = 10, type = "Ljung-Box")
運行結錯誤辦
> int <- read.table("d-intc7208.txt", head=T)
錯誤於file(file, "rt") : 打鏈結
外: 警告信息:
In file(file, "rt") :
打文件'd-intc7208.txt': No such file or directory
+ acf(int.l[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int monthly
錯誤: 意外符號 in:
"
acf(int.l[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int"
> log return')
錯誤: 意外符號 in "log return"