前言
本篇文章將繼續(xù)對數(shù)據(jù)的類型做介紹,本片也是最后一個介紹數(shù)據(jù)的。
多變量數(shù)據(jù)
掌握描述多變量數(shù)據(jù)的分析方法:多維列聯(lián)表、復式條形圖、并列箱線圖、點帶圖、多變量散點圖(重疊散點圖和矩陣式散點圖)。
多維列聯(lián)表
除了一維表、二維表,在實際中更多的是多維表,也就是多個變量交叉生成的表格。
R中的table()函數(shù)也可以生成多維表。
假設(shè)存在x、y、z三個變量,table(x,y)則生成x、 y二維表,table(x,y,z)生成每個z值關(guān)于x、y的二維表(由于計算機作三維及三維以上的表格不方便,所以就用這種方式顯示)。
例題1:
為了了解不同年齡的男性,吸煙與呼吸系統(tǒng)疾病之間的關(guān)系,青原博士獲得如下的調(diào)查數(shù)據(jù)。
這是一個2×2×2的三維列聯(lián)表,因為每個變量的水平數(shù)均為2。
age=c(rep("40歲",4),rep("40~59",4))
smoke=rep(c("吸煙","不吸煙"),4)
breath=rep(c("呼吸正常","呼吸正常","呼吸不正常","呼吸不正常"),2)
freq=c(874,567,28,14,780,328,68,2)
接下來分析breath變量的頻數(shù)分布,分析后再作breath與smoke的二維表,最后作breath、smoke與age的三維表
xtabs (freq~breath)
breath
呼吸不正常 呼吸正常
112 2549
xtabs(freq~breath+smoke)
smoke
breath 不吸煙 吸煙
呼吸不正常 16 96
呼吸正常 895 1654
xtabs(freq~breath+smoke+age)
, , age = <40歲
smoke
breath 不吸煙 吸煙
呼吸不正常 14 28
呼吸正常 567 874
, , age = 40~59
smoke
breath 不吸煙 吸煙
呼吸不正常 2 68
呼吸正常 328 780
復式條形圖
對breath按不同的smoke作復式條形圖。
從下圖可以看出,首先按smoke分成"吸煙",“不吸煙” 2組,每組里又按breath分成"呼吸正常","呼吸不正常"2類
par(mfrow=c(1,2))
barplot(xtabs(freq~breath+smoke))
barplot(xtabs(freq~breath+smoke),beside=T)
breath按照smoke作的復式條形圖,黑色的方塊代表不健康。
對smoke按照不同的breath做復式條形圖,首先按breath分 成“呼吸正?!?,“呼吸不正?!?組;然后,每組里又分成“吸煙”,“不吸煙”等2類。結(jié)果如下圖所示
par(mfrow=c(1,2))
barplot(xtabs(freq~smoke+breath))
barplot(xtabs(freq~smoke+breath),beside=T)
黑色的方塊代表不吸煙。
并列箱線圖
用并列箱線圖考察年齡與吸煙、年齡與呼吸的關(guān)系
為了畫出并列箱線圖,此處需要沒有分組的年齡變量。 不失一般性,假設(shè)兩個年齡段"<40歲","40~59"的男性的年齡均值分別為20歲和49.5歲
按照下面的程序產(chǎn)生年齡的連續(xù)觀測值
set.seed(500)
age.value=round(c(rnorm(1483,mean=20,sd=6.5),rnorm(1178,mean=49.5,sd=3)))
set.seed()函數(shù)是為了保證隨機生成的隨機數(shù)前后一致
首先,不設(shè)置該種子函數(shù)
x=rnorm(10)
plot(x)
繪出的圖如下:
重新運行一遍這兩行,就是另外的圖
x=rnorm(10)
plot(x)
為了在下次運行時,產(chǎn)生一樣的隨機數(shù),就得使用set.seed()函數(shù)了,如下
set.seed(1)
x=rnorm(10)
plot(x)
畫圖如下:
那么此時,我們重復運行上面的代碼
set.seed(1)
x=rnorm(10)
plot(x)
那么set.seed(1)換為set.seed(2)時還一樣嗎?我們運行下面程序
set.seed(2)
x=rnorm(10)
plot(x)
顯然是不一樣的,因此,set.seed()括號里面的參數(shù)可以是任意數(shù)字,是代表你設(shè)置的第幾號種子而已,不會參與運算,是個標記而已。
rnorm(n, mean = 0, sd = 1)
n 為產(chǎn)生隨機值個數(shù)(長度),mean 是平均數(shù), sd 是標準差 。
使用該函數(shù)的時候后,一般要賦予它 3個值.
rnorm() 函數(shù)會隨機正態(tài)分布,然后隨機抽樣或者取值 n 次,
rnorm(5,0,1) 以N(0,1)的正態(tài)分布,分別列出5個值。
函數(shù)形式:rep(x, time = , length = , each = ,)
參數(shù)說明:
x:代表的是你要進行復制的對象,可以是一個向量或者是一個因子。
times:代表的是復制的次數(shù),只能為正數(shù)。負數(shù)以及空值都會為錯誤值。復制是指的是對整個向量進行復制。
each:代表的是對向量中的每個元素進行復制的次數(shù)。
length.out:代表的是最終輸出向量的長度。
例題1:
用并列箱線圖考察年齡與吸煙、年齡與呼吸的關(guān)系
為了畫出并列箱線圖,此處需要沒有分組的年齡變量。 不失一般性,假設(shè)兩個年齡段"<40歲","40~59"的男性的年齡均值分別為20歲和49.5歲
按照下面的程序產(chǎn)生年齡的連續(xù)觀測值
set.seed(500)
age.value=round(c(rnorm(1483,mean=20,sd=6.5),rnorm(1178,mean=49.5,sd=3)))
還需要給出每一個男性的吸煙狀態(tài)、呼吸狀態(tài),這由下面的程序來實現(xiàn):
age1=c(rep("<40歲",1483),rep("40~59",1178))
breath1=c(rep(" 呼吸正常",1441),rep("呼吸不正常",42),rep(" 呼吸正常",1108),rep("呼吸不正常",70))
smoke1=c(rep("吸煙",874),rep("不吸煙",567),rep("吸煙",28),rep("不吸煙",14),rep("吸煙",780),rep("不吸煙",328),rep("吸煙",68),rep("不吸煙",2))
基于age.value,分別做出age.value按smoke1和breath1分類的箱線圖
par(mfrow=c(1,2))
boxplot(age.value ~smoke1)
boxplot(age.value ~breath1)
從箱線圖可以發(fā)現(xiàn),吸煙的男性平均年齡高于不吸煙的男性,呼吸不正常的男性平均年齡高于呼吸正常的男性。
例題2:
為了比較乘坐公交車上班快還是自己開車快,青原博士對兩種方式所用時間各進行了10次記錄,具體數(shù)據(jù)見下表。
目的是比較兩種交通方式所需時間是否有差異,從并列箱線圖可以看出兩個交通方式所需時間存在較大差異
x1=c(48,47,44,45,46,47,43,47,42,48)
x2=c(36,45,47,38,39,42,36,42,46,35)
time=c(x1,x2)
transportation=c(rep(1,10),rep(2,10))
traffic.time=cbind(time,transportation)
boxplot(time ~transportation
cbind: 根據(jù)列進行合并,即疊加所有列,m列的矩陣與n列的矩陣cbind()最后變成m+n列,合并前提:cbind(a, c)中矩陣a、c的行數(shù)必需相符。
rbind: 根據(jù)行進行合并,就是行的疊加,m行的矩陣與n行的矩陣rbind()最后變成m+n行,合并前提:rbind(a, c)中矩陣a、c的列數(shù)必需相符。
例題三:
模擬1000個標準正態(tài)分布隨機數(shù),分成10組,作10個并列箱線圖這里利用rep()函數(shù)重復100次生成1:10的1000個數(shù),再利 用factor()函數(shù)生成10個因子。
r1= rnorm(1000)
f1=factor(rep(1:10,100))
boxplot(r1~f1)
R語言中取整運算主要包括以下五種:
floor():向下取整;ceiling(): 向上取整;round(): 四舍五入取整;turnc(): 向0取整;signif(): 保留給定位數(shù)的精度。
floor返回對應(yīng)數(shù)字的’地板’值,即不大于該數(shù)字的最大值;
ceiling返回對應(yīng)數(shù)字的’天花板’值,就是不小于該數(shù)字的最小整數(shù);
round是R里的’四舍五入’函數(shù),round的原型是round(x, digits = 0), digits設(shè)定小數(shù)點位置,默認為零即小數(shù)點后零位(取整)。
trun的特性是’向零截取’, 也就是說對于一個數(shù)字a,它將數(shù)軸分成兩側(cè),trunc(a)將返回數(shù)軸上包含數(shù)字0的那一側(cè)離a最近的那個整數(shù)。
signif是保留有效數(shù)字的函數(shù)。常用于科學計數(shù)。
點帶圖
點帶圖(StripChart)經(jīng)常用來比較各變量的分布情況,點帶圖主要用在當樣本觀測值較少時。
R作點帶圖的函數(shù)是stripchart(),對于雙變量數(shù)據(jù)其用法是stripchart(z~t),z變量在t變量上的分布情況,不同的是這里z變量刻度在x軸上,而t 變量在y軸上。
例題1:
對呼吸正常與否按吸煙與否分類作點帶圖。
結(jié)果如下圖所示,呼吸的各個類型都描在了圖上。
smoke1[ smokel1=="吸煙"]=1
smoke1[ smokel1=="不吸煙"]=0
par(mfrow =c(1,1))
stripchart(as. numeric( smoke1)~ breath1,xlab="吸煙")
x軸用1 , 0 代表" 吸煙" 和"不吸煙"等2組
該例中的兩個變量都是二分類,關(guān)系比較簡單。下面再看一個復雜一點兒的點帶圖例子。
一般只要是數(shù)字,不管是什么類型的,都可以通過as.numeric()函數(shù)轉(zhuǎn)換為對應(yīng)的numeric類型的數(shù)字,例如
x<-“123”,x為character類型,而as.numeric(x)則為numeric類型的123。
但是因子(factor)類型卻不一樣。
a<-factor(c(100,200,300,301,302,400,10)),
它們的值分別為100 200 300 301 302 400 10,然而as.numeric(a)對應(yīng)的值并非100 200 300 301 302 400 10,而是2 3 4 5 6 7 1。
因子(factor)轉(zhuǎn)換成數(shù)值型(numeric)的規(guī)則是這樣的:
一共有n個數(shù),那么轉(zhuǎn)換后的數(shù)字就會在1—n中取值,數(shù)字最小的取一,次小的取二,以此類推。那么如何讓因子(factor)類型里的數(shù)值轉(zhuǎn)換對應(yīng)的數(shù)值型呢?
mean(as.numeric(as.character(factorname)))
mean(as.numeric(levels(factorname)[factorname]))
以上代碼就可以實現(xiàn)將因子(factor)類型里的數(shù)值轉(zhuǎn)換對應(yīng)的數(shù)值型,思路都是先轉(zhuǎn)換成字符型然后再轉(zhuǎn)換成數(shù)值型。
例題2:
模擬100個標準正態(tài)分布的隨機數(shù),分成5組,作點帶圖
r2= rnorm(100)
f2=factor(rep(1:5,20))
stripchart(r2~f2)
反映了各隨機數(shù)在各組上的分布情況,而且絕大 部分集中在[-1,1]上,當樣本觀察值較多時,點帶圖就顯得有點凌亂,沒有箱線圖清晰直觀。這是點帶圖的局限性,當樣本觀察值較多時,建議使用箱線圖。
多變量散點圖
多變量散點包括重疊散點圖和矩陣式散點圖。我們使用R自帶的著名的鳶尾花(iris)數(shù)據(jù)集來介紹如何繪制多變量散點圖。
例題1:
R內(nèi)置的鳶尾花(iris)數(shù)據(jù)集是Fisher關(guān)于 150個植物分類的數(shù)據(jù),是判別分析的經(jīng)典案例。
該數(shù)據(jù)集內(nèi)有五個變量:Sepal.Length(花萼長度)、 Sepal.Width(花萼寬度)、Petal.Length(花瓣長度) Petal.Width(花瓣寬度)、Species(品種)。
品種有三個:setosa,versicolor和virginica。每種品種有50 個樣本。
iris
levels(iris $ Species)#種類的水平
[1] “setosa” “versicolor” “virginica”
共有三種植物,
分別是setosa,versicolor和virginica
為了在圖中方便顯示,
重新標示它們?yōu)?、2和3
iris.lab=rep(c("1","2","3"),rep(50,3))
重疊散點圖
有時出于研究的需要,將兩個或多組兩個變量的散點圖繪制在同一個圖中, 可以更好的比較它們之間的相關(guān)關(guān)系,這時就可以繪制重疊散點圖
par(mfrow=c(1,2))
plot(iris[,1],iris[,3],type="n") #繪制iris第1列和第3列的散點圖,type="n"不顯示點
text(iris[,1],iris[,3],cex=0.6) #顯示樣本序號,縮小字體cex=0.6
plot(iris[,1],iris[,3],type="n")
text(iris[,1],iris[,3],iris.lab,cex=0.6)
矩陣式散點圖
同時考察三個或三個以上的數(shù)值變量間的相關(guān)關(guān)系時, 一一繪制它們之間的簡單散點圖就十分麻煩
利用矩陣式散點圖則比較合適,這樣可以快速發(fā)現(xiàn)多個 變量間的主要相關(guān)性,這一點在多元線性回歸中顯得尤為重要
R作矩陣式散點圖的函數(shù)是pairs()。
pairs(iris)
pairs(iris [1:4],pch=21,bg=iris.lab) #按iris.lab分類
練習
1、(數(shù)據(jù): example2_4. RData)下表是隨機抽取的20家醫(yī)藥企業(yè)銷售收入、銷售網(wǎng)點數(shù)、銷售人員數(shù)以及廣告費用的數(shù)據(jù)。
1 . 繪制帶有箱線圖的散點圖觀察這些變量間的關(guān)系,并描述每個變量的分布狀況
par(fig=c(0,0.8,0,0.8),mai=c(0.9,0.9,0.1,0.1))
plot(廣告費用,銷售收入,xlab="廣告費用",ylab="銷售收入",cex.lab=0.7,cex.axis=0.7)
abline(lm(銷售收入~廣告費用,data=example2_4),col="red")
par(fig=c(0,0.8,0.5,1),new=TRUE)
boxplot(廣告費用,horizontal=TRUE,axes=FALSE)
par(fig=c(0.52,1,0,0.9),new=TRUE)
boxplot(銷售收入,axes=FALSE)
從圖中的兩個箱線圖可以看出,銷售收入和廣告費用均為右偏分布。
2 . 繪制關(guān)于銷售收入與銷售網(wǎng)點數(shù)、銷售人員數(shù)及廣告費用的重疊散點圖
par(mai=c(0.5,0.85,0.1,0.1))
plot(廣告費用,銷售收入,xlab="",ylab="銷售收入")
abline(lm(銷售收入~廣告費用,data=example2_4))
points(銷售網(wǎng)點數(shù),銷售收入,pch=2,col="blue")
abline(lm(銷售收入~銷售網(wǎng)點數(shù),data=example2_4),col="blue")
points(銷售人員數(shù),銷售收入,pch=3,col="red")
abline(lm(銷售收入~銷售人員數(shù),data=example2_4),col="red")
legend("bottomright",legend=c("廣告費用","銷售網(wǎng)點數(shù)","銷售人員數(shù)"),pch=1:3,col=c("black","blue","red"))
3 . 繪制矩陣散點圖
load("C:/example/ch2/example2_4.RData")
plot(example2_4,cex=0.8,gap=0.5)
pairs(example2_4)
文章來源:http://www.zghlxwxcb.cn/news/detail-789398.html
圖顯示,銷售收入、銷售網(wǎng)點數(shù)、銷售人員數(shù)、廣告費用兩兩之間都有較強的線性關(guān)系。文章來源地址http://www.zghlxwxcb.cn/news/detail-789398.html
到了這里,關(guān)于統(tǒng)計學-R語言-4.5的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!