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を利用