R 初級講座ネタ検討(カテゴリカル・データの変形)

TAccident <- c(0, 0, 0, 0, 0)

colname <- c("Sex","Place","Seatbelt","Injury","Freq")

colnames(TAccident) <- colname

TAccident <- matrix(c('女性','女性','女性','女性','女性','女性','女性','女性','男性','男性','男性','男性','男性','男性','男性','男性','都会','都会','都会','都会','郊外','郊外','郊外','郊外','都会','都会','都会','都会','郊外','郊外','郊外','郊外','なし','なし','あり','あり','なし','なし','あり','あり','なし','なし','あり','あり','なし','なし','あり','あり','なし','あり','なし','あり','なし','あり','なし','あり','なし','あり','なし','あり','なし','あり','なし','あり',7287,996,11587,759,3246,973,6134,757,10381,812,10969,380,6123,1084,6693,513), ncol = 5)

names(TAccident)

 

wayofschool <- matrix(c(21, 12, 17, 6, 17, 5), ncol = 3)

colnames(wayofschool) <- c('徒歩', '自転車', 'バイク')

rownames(wayofschool) <- c('男性','女性')

 

library(vcd)

data(Arthritis)

head(Arthritis)

summary(Arthritis)

class(Arthritis)

 

IMP <- xtabs(~ Improved, data = Arthritis)

barplot(IMP)

 

IMP2 <- IMP[order(IMP, decreasing = TRUE)] #orderはカテゴリー番号を与える関数

barplot(IMP2)

pie(IMP, radius=1, col=gray(seq(0.6,1.0,length=3)), clockwise=TRUE)

pie(IMP, radius=1, col=rainbow(3), clockwise=TRUE)

pie(IMP, radius=1, col=c("pink","red","purple"), clockwise=TRUE)

 

Ctable <- xtabs(~ Treatment + Improved, data=Arthritis)

prop.table(Ctable, margin =2)

class(Ctable)

 

Ctable.p <- prop.table(Ctable,margin=1)

round(Ctable.p, 3)

 

Ctable <- xtabs(~ Treatment + Improved, data=Arthritis)

Ctable.p <- prop.table(Ctable, margin=1)

 

#apermで対象データの縦横の入れ替え、horizはグラフの縦横の返還、axesは座標軸の設定

barplot(aperm(Ctable.p),horiz=T,axes=T,

        col=gray(seq(0.6,1.0,length=3)),

                 xlab="Improved(None Some Marjked)")

axis(1,seq(0,1,by=0.2),paste(seq(0,100,by=20),"%"))

#seqは座標軸のメモリ、pasteはラベル、%は単位

 

Ctable <- xtabs(~ Treatment + Improved, data=Arthritis)

mosaicplot(Ctable, col=TRUE) #colは色

 

mosaicplot(~ Improved + Treatment, data=Arthritis,col=TRUE)

mosaicplot(~ Improved + Treatment + Sex,data=Arthritis,col=TRUE)

mosaicplot(~ I(Sex:Improved) + Treatment,data=Arthritis,col=TRUE)

#SexとImprovedをグループ化して表示

 

DanishWelfare

class(DanishWelfare)

data(DanishWelfare)

head(DanishWelfare)

summary(DanishWelfare)

 

xtabs(Freq ~ Alcohol, data=DanishWelfare)

xtabs(Freq ~ Alcohol+Income+Status+Urban, data=DanishWelfare)

Ctable4 <- xtabs(Freq ~ Status+Alcohol, data=DanishWelfare)

mosaicplot(Ctable4,col=TRUE)

class(Ctable4)

 

dtable <- matrix(c(2,18,3,17,9,11,15,5,18,2),nr=2)

dimnames(dtable)<-list(effect=list("あり","なし"),

dose = list("1","2","3","4","5"))

class(dtable) <- "table"

dtable

 

#table形式のデータをデータフレーム(集計データ)にかえる

dose_effect<-data.frame(dtable)

dose_effect

class(dose_effect)

 

#集計データから個票データに戻す

DW <- data.frame(lapply(DanishWelfare,

                        function(i) rep(i, DanishWelfare[,"Freq"])))

class(DW)

head(DW)

DW2 <- DW[-1]

 

class(DW2)

 

#カテゴリ変数の分類をチェック

levels(DanishWelfare$Income)

#カテゴリ変数の分類を変更する

levels(DanishWelfare$Income) <- c("0-100","0-100","100<","100<")

 

###########################################################

UCdata <- apply(UCBAdmissions, c(1,2), sum)

#2つの変数だけを考え、3つの変数は合計(sum)するという意味

 

UCBAdmissions[,"Male",]

#最初の1列目を除く

UCBAdmissions[,"Male",-1]

 

data(Arthritis)

hist(Arthritis$Age, breaks=c(20:80), col="blue")

#breaksはbinの細分化を調節するパラメータ

 

hist(Arthritis$Age, breaks=c(20:80), col="blue")$counts

boxplot(Arthritis$Age)

# 上下に伸びている線ははこの長さ(第1分位点と第3分位点の差)の

# の1.5倍を計算し、箱の両端からの距離がこの計算した値以下に

# なるデータだけを考えて、その最大値と最小値で一番上と下の線を

# 決めている

 

boxplot(Age ~ Treatment, data = Arthritis)

# 外れ値は、boxplotか残差分析によって探すとよい

 

hist(Arthritis$Age, breaks = c(20,30,40,50,60,70,80),

     xlab='Age',ylab='Frequency',main='Age Distribution',

     xlim=c(10,90),ylim=c(0,40))

###########################################################

#練習問題1

head(Arthritis)

data1 <- xtabs(~Sex, data=Arthritis)

pie(data1)

barplot(data1)

 

data2 <- xtabs(~Sex+Improved, data=Arthritis)

data2

mosaicplot(data2,col=TRUE)

 

#練習問題2

data3 <- xtabs(~Place,data=TAccident)

data3

barplot(data3,col=TRUE)

 

data4 <- xtabs(~Seatbelt+Injury,data=TAccident)

data4

mosaicplot(data4,col=TRUE)

 

data5 <- xtabs(~Sex+Place+Injury,data=TAccident)

data5

mosaicplot(data5,col=TRUE)

 

#練習問題3

library(vcd)

data(JobSatisfaction)

JobSatisfaction

 

data6 <- xtabs(~management+own,data=JobSatisfaction)

data6

 

#練習問題4

library(datasets)

data(Titanic)

head(Titanic)

 

class(Titanic)

#Table形式のデータの場合は,xtabsによる集計ではなくapplyを利用

data7 <- apply(Titanic,c(3,4),sum)

 

data8 <- Titanic[,,"Child",]

data8 <- as.table(data8)

data9 <- xtabs(Freq~Sex+Survived,data=data8)

data9

 

data10 <- xtabs(Freq~Class+Survived,data=Titanic)

data10[-4,]

 

TN <- data.frame(Titanic)

TN1 <- data.frame(lapply(TN, function(i) rep(i, TN[,5])))

 

TN2 <- TN1[,-5]

TN3 <- xtabs(~Class+Sex+Age+Survived,data=TN2)

Titanic == TN3

 

##まとめ##

#カテゴライズデータの種類は3つ。

#1.table,集計データ

#2.data.frame,集計データ

#3.data.frame,個票データ

#1->1:apply(data,c(1,2),sum)

#1->2:data.frame(data)

#2->1:xtabs(Freq~変数1+変数2…,data=data)

#2->3:data.frame(lapply(data,function(i) rep(i,data["Freq",,,]))) & data[-1,,,]

#3->1:xtabs(~変数1+変数2…,data=data)

#data.frameからtableはxtabs,tableからdata.frameはdata.frame

#2->3はdata.frame(apply,),1->1はapplyを利用