myNICERindex <- function(){
# 各指標のベクトルを作っておいて、できたものをデータフレームにまとめる
# ベクトルの初期化
typeV <- c()
tokenV <- c()
ttrV <- c()
giV <- c()
awlV <- c()
aslV <- c()
nosV <- c()
mattrV <- c() # MATTR追加 以下同じ
scoreV <- c()
idV <- c()
topicV <- c()
files <- list.files()
for (i in files) {
lines.tmp <- scan(i, what="char", sep="\n")
body.tmp <- grep("^\\*\\w+:\t", lines.tmp, value=T)
data.tmp <- gsub("^\\*\\w+:\t", "", body.tmp)
data.tmp <- data.tmp[data.tmp != ""]
tmp4 <- gsub("[[:punct:]]", " ", data.tmp)
tmp5 <- gsub(" +", " ", tmp4)
tmp6 <- tolower(tmp5)
tmp7 <- strsplit(tmp6, " ")
tmp8 <- unlist(tmp7)
token <- sort(tmp8)
type <- unique(token)
ttr <- length(type)/length(token)
gi <- length(type)/sqrt(length(token))
tmp <- paste(token, collapse = "")
awl <- nchar(tmp)/length(token)
asl <- length(token)/length(data.tmp)
nos <- length(body.tmp) # Number of Sentences
#MATTR 追加
numwords <- length(token)
token <- c(token,token)
ttrsum <- 0 # ttrsum の初期化
mattr <- 0 # mattr の初期化
for(i in 1:numwords){
mado <- token[i:(99+i)]
wttr <- length(unique(sort(mado)))/100
ttrsum <- ttrsum + wttr
}
mattr <- ttrsum/numwords # mattrに代入
mattrV <- c(mattrV, mattr) # ベクトルデータとして保存
#スコア 追加
criterion.tmp <- grep("@Criterion", lines.tmp, value = T) # @Criterionの行を検索
score <- gsub("@Criterion:\t", "", criterion.tmp) # スコアのみに
scoreV <- c(scoreV , score) # ベクトルデータとして保存
#ID 追加
id.tmp <- grep("@Participants:", lines.tmp, value = T) # @Participantsの行を検索
id <- gsub("@Participants:\t", "", id.tmp) # IDのみに
idV <- c(idV , id) # ベクトルデータとして保存
#Topic 追加
topic.tmp <- grep("@Topic:", lines.tmp, value = T) # @Participantsの行を検索
topic <- gsub("@Topic:\t", "", topic.tmp) # IDのみに
topicV <- c(topicV , topic) # ベクトルデータとして保存
# 各数値をベクトルに入れる
typeV <- c(typeV, length(type))
tokenV <- c(tokenV, length(token))
ttrV <- c(ttrV, ttr)
giV <- c(giV, gi)
awlV <- c(awlV, awl)
aslV <- c(aslV, asl)
nosV <- c(nosV, nos)
}
# 最後に全部をデータフレームにまとめる
data.frame(idV, topicV, scoreV, typeV, tokenV, ttrV, giV, mattrV, awlV, aslV, nosV)
}
setwd("NICER1_3/NICER_NS")
ns_indexes.df <- myNICERindex()
head(ns_indexes.df )
names(ns_indexes.df ) <- c("ID", "Topic", "Score", "Type", "Token", "TTR", "GI", "MATTR", "AWL","ASL", "NoS")
head(ns_indexes.df )
setwd("NICER1_3/NICER_NNS") # ディレクトリーを変える NNS
jp_indexes.df <- myNICERindex()
names(jp_indexes.df ) <- c("ID", "Topic", "Score", "Type", "Token", "TTR", "GI", "MATTR", "AWL","ASL", "NoS")
head(jp_indexes.df )
統合した後、カテゴリーでデータを分けることができるように
新しいカラムを追加:使ってない見出しを設定し、そこに入れたいものを代入
jp_indexes.df$Lang <- 2
head(jp_indexes.df)
ns_indexes.df$Lang <- 1
head(ns_indexes.df)
all_indexes.df <- rbind(jp_indexes.df, ns_indexes.df)
head(all_indexes.df)
tail(all_indexes.df)
head(all_indexes.df)
source("http://aoki2.si.gunma-u.ac.jp/R/src/sdis.R", encoding="euc-jp")
str(all_indexes.df)
## 'data.frame': 452 obs. of 12 variables:
## $ ID : chr "JPN501" "JPN502" "JPN503" "JPN504" ...
## $ Topic: chr "sports" "education" "education" "sports" ...
## $ Score: chr "4" "4" "3" "4" ...
## $ Type : int 134 160 121 139 175 124 151 98 104 99 ...
## $ Token: int 638 712 402 520 840 522 724 396 526 366 ...
## $ TTR : num 0.42 0.449 0.602 0.535 0.417 ...
## $ GI : num 7.5 8.48 8.53 8.62 8.54 ...
## $ MATTR: num 0.426 0.455 0.606 0.539 0.423 ...
## $ AWL : num 4.3 4.23 4.75 4.77 4 ...
## $ ASL : num 10.63 12.28 15.46 9.63 16.8 ...
## $ NoS : int 30 29 13 27 25 20 26 20 19 14 ...
## $ Lang : num 2 2 2 2 2 2 2 2 2 2 ...
disc.data <- data.frame(all_indexes.df$Lang, all_indexes.df$Type, all_indexes.df$Token, all_indexes.df$TTR, all_indexes.df$GI, all_indexes.df$MATTR, all_indexes.df$AWL, all_indexes.df$ASL, all_indexes.df$NoS)
head(disc.data)
names(disc.data) <- c("Lang", "Type", "Token", "TTR", "GI", "MATTR", "AWL", "ASL", "NoS")
str(disc.data)
## 'data.frame': 452 obs. of 9 variables:
## $ Lang : num 2 2 2 2 2 2 2 2 2 2 ...
## $ Type : int 134 160 121 139 175 124 151 98 104 99 ...
## $ Token: int 638 712 402 520 840 522 724 396 526 366 ...
## $ TTR : num 0.42 0.449 0.602 0.535 0.417 ...
## $ GI : num 7.5 8.48 8.53 8.62 8.54 ...
## $ MATTR: num 0.426 0.455 0.606 0.539 0.423 ...
## $ AWL : num 4.3 4.23 4.75 4.77 4 ...
## $ ASL : num 10.63 12.28 15.46 9.63 16.8 ...
## $ NoS : int 30 29 13 27 25 20 26 20 19 14 ...
sdis(disc.data[2:9], disc.data[1])
## 有効ケース数: 452
## 群を表す変数: Lang
##
## ***** 平均値 *****
## 1 2 全体
## Type 387.2676056 126.2047244 167.2123894
## Token 1973.0985915 558.2729659 780.5132743
## TTR 0.4043734 0.4659975 0.4563176
## GI 12.3755946 7.5712339 8.3259012
## MATTR 0.4103297 0.4711800 0.4616217
## AWL 4.7513327 4.3616860 4.4228916
## ASL 22.5918585 12.8783357 14.4041325
## NoS 45.6619718 22.0708661 25.7765487
##
## ***** プールされた群内相関係数行列 *****
##
## Type Token TTR GI MATTR AWL
## Type 1.00000000 0.9038437 -0.2650459 0.7684888 -0.2620129 -0.04599798
## Token 0.90384365 1.0000000 -0.5369182 0.4496672 -0.5352956 -0.14020319
## TTR -0.26504587 -0.5369182 1.0000000 0.2767775 0.9990026 0.26528585
## GI 0.76848885 0.4496672 0.2767775 1.0000000 0.2820958 0.13306480
## MATTR -0.26201292 -0.5352956 0.9990026 0.2820958 1.0000000 0.26961977
## AWL -0.04599798 -0.1402032 0.2652858 0.1330648 0.2696198 1.00000000
## ASL 0.25439161 0.2503935 -0.1879469 0.1712081 -0.1847674 0.20885683
## NoS 0.66654538 0.7401234 -0.4418606 0.3455667 -0.4406046 -0.25872513
## ASL NoS
## Type 0.2543916 0.6665454
## Token 0.2503935 0.7401234
## TTR -0.1879469 -0.4418606
## GI 0.1712081 0.3455667
## MATTR -0.1847674 -0.4406046
## AWL 0.2088568 -0.2587251
## ASL 1.0000000 -0.3552959
## NoS -0.3552959 1.0000000
##
## 変数編入基準 Pin: 0.05
## 変数除去基準 Pout: 0.05
## 編入候補変数: Type P : <0.001 ***** 編入されました
##
## ***** ステップ 1 ***** 編入変数: Type
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.37745 -0.1230 1987.7 <0.001
## 定数項 73.08687 7.7619
## ウィルクスのΛ: 0.1846
## 等価なF値: 1987.7
## 自由度: (1, 450.00)
## P値: <0.001
##
## 除去候補変数: Type P : <0.001 ***** 除去されませんでした
## 編入候補変数: NoS P : <0.001 ***** 編入されました
##
## ***** ステップ 2 ***** 編入変数: NoS
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.43780 -0.10466 1087.27 <0.001
## NoS 0.40949 -0.12447 43.81 <0.001
## 定数項 75.42422 7.97787
## ウィルクスのΛ: 0.16819
## 等価なF値: 1110.3
## 自由度: (2, 449.00)
## P値: <0.001
##
## 除去候補変数: NoS P : <0.001 ***** 除去されませんでした
## 編入候補変数: AWL P : 0.00688 ***** 編入されました
##
## ***** ステップ 3 ***** 編入変数: AWL
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.28143 0.042656 791.6104 < 0.001
## NoS -0.86598 -1.326043 28.0055 < 0.001
## AWL -92.70888 -87.336950 7.3713 0.00688
## 定数項 294.51016 202.409928
## ウィルクスのΛ: 0.16547
## 等価なF値: 753.16
## 自由度: (3, 448.00)
## P値: <0.001
##
## 除去候補変数: AWL P : 0.00688 ***** 除去されませんでした
## 編入候補変数: GI P : 0.194 ***** 編入されませんでした
##
## ===================== 結果 =====================
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.28143 0.042656 791.6104 < 0.001
## NoS -0.86598 -1.326043 28.0055 < 0.001
## AWL -92.70888 -87.336950 7.3713 0.00688
## 定数項 294.51016 202.409928
##
## ***** 判別関数 *****
##
## 1 と 2 の判別
## マハラノビスの汎距離: 6.15815
## 理論的誤判別率: 0.00104
##
## 判別係数 標準化判別係数
## Type 0.16204 17.04662
## NoS -0.23003 -3.03062
## AWL 2.68597 0.97717
## 定数項 -46.05012
##
## ***** 判別結果集計表 ****
##
## 判別された群
## 実際の群 1 2
## 1 69 2
## 2 0 381
disc.result <- sdis(disc.data[2:9], disc.data[1])
## 有効ケース数: 452
## 群を表す変数: Lang
##
## ***** 平均値 *****
## 1 2 全体
## Type 387.2676056 126.2047244 167.2123894
## Token 1973.0985915 558.2729659 780.5132743
## TTR 0.4043734 0.4659975 0.4563176
## GI 12.3755946 7.5712339 8.3259012
## MATTR 0.4103297 0.4711800 0.4616217
## AWL 4.7513327 4.3616860 4.4228916
## ASL 22.5918585 12.8783357 14.4041325
## NoS 45.6619718 22.0708661 25.7765487
##
## ***** プールされた群内相関係数行列 *****
##
## Type Token TTR GI MATTR AWL
## Type 1.00000000 0.9038437 -0.2650459 0.7684888 -0.2620129 -0.04599798
## Token 0.90384365 1.0000000 -0.5369182 0.4496672 -0.5352956 -0.14020319
## TTR -0.26504587 -0.5369182 1.0000000 0.2767775 0.9990026 0.26528585
## GI 0.76848885 0.4496672 0.2767775 1.0000000 0.2820958 0.13306480
## MATTR -0.26201292 -0.5352956 0.9990026 0.2820958 1.0000000 0.26961977
## AWL -0.04599798 -0.1402032 0.2652858 0.1330648 0.2696198 1.00000000
## ASL 0.25439161 0.2503935 -0.1879469 0.1712081 -0.1847674 0.20885683
## NoS 0.66654538 0.7401234 -0.4418606 0.3455667 -0.4406046 -0.25872513
## ASL NoS
## Type 0.2543916 0.6665454
## Token 0.2503935 0.7401234
## TTR -0.1879469 -0.4418606
## GI 0.1712081 0.3455667
## MATTR -0.1847674 -0.4406046
## AWL 0.2088568 -0.2587251
## ASL 1.0000000 -0.3552959
## NoS -0.3552959 1.0000000
##
## 変数編入基準 Pin: 0.05
## 変数除去基準 Pout: 0.05
## 編入候補変数: Type P : <0.001 ***** 編入されました
##
## ***** ステップ 1 ***** 編入変数: Type
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.37745 -0.1230 1987.7 <0.001
## 定数項 73.08687 7.7619
## ウィルクスのΛ: 0.1846
## 等価なF値: 1987.7
## 自由度: (1, 450.00)
## P値: <0.001
##
## 除去候補変数: Type P : <0.001 ***** 除去されませんでした
## 編入候補変数: NoS P : <0.001 ***** 編入されました
##
## ***** ステップ 2 ***** 編入変数: NoS
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.43780 -0.10466 1087.27 <0.001
## NoS 0.40949 -0.12447 43.81 <0.001
## 定数項 75.42422 7.97787
## ウィルクスのΛ: 0.16819
## 等価なF値: 1110.3
## 自由度: (2, 449.00)
## P値: <0.001
##
## 除去候補変数: NoS P : <0.001 ***** 除去されませんでした
## 編入候補変数: AWL P : 0.00688 ***** 編入されました
##
## ***** ステップ 3 ***** 編入変数: AWL
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.28143 0.042656 791.6104 < 0.001
## NoS -0.86598 -1.326043 28.0055 < 0.001
## AWL -92.70888 -87.336950 7.3713 0.00688
## 定数項 294.51016 202.409928
## ウィルクスのΛ: 0.16547
## 等価なF値: 753.16
## 自由度: (3, 448.00)
## P値: <0.001
##
## 除去候補変数: AWL P : 0.00688 ***** 除去されませんでした
## 編入候補変数: GI P : 0.194 ***** 編入されませんでした
##
## ===================== 結果 =====================
##
## ***** 分類関数 *****
##
## 1 2 偏F値 P値
## Type -0.28143 0.042656 791.6104 < 0.001
## NoS -0.86598 -1.326043 28.0055 < 0.001
## AWL -92.70888 -87.336950 7.3713 0.00688
## 定数項 294.51016 202.409928
##
## ***** 判別関数 *****
##
## 1 と 2 の判別
## マハラノビスの汎距離: 6.15815
## 理論的誤判別率: 0.00104
##
## 判別係数 標準化判別係数
## Type 0.16204 17.04662
## NoS -0.23003 -3.03062
## AWL 2.68597 0.97717
## 定数項 -46.05012
##
## ***** 判別結果集計表 ****
##
## 判別された群
## 実際の群 1 2
## 1 69 2
## 2 0 381
plot(disc.result, which="scatterplot", xpos="topright")
1 2 偏F値 P値
Type -0.28143 0.042656 791.6104 < 0.001
NoS -0.86598 -1.326043 28.0055 < 0.001
AWL -92.70888 -87.336950 7.3713 0.00688
plot(disc.data$Type, disc.data$Nos)
# plot(disc.data$NoS, disc.data$Type, col= ifelse(disc.data$Lang==1, "red", "blue")) # これで自動的に
discJ.data <- subset(disc.data, Lang==2) # 学習者
discN.data <- subset(disc.data, Lang==1) # 母語話者
plot(discJ.data$Type, discJ.data$NoS)
plot(discN.data$Type, discN.data$NoS)
plot(discJ.data$NoS, discJ.data$Type, xlab="", ylab="", xlim=c(0,180), ylim=c(0,800), col="blue") # 学習者
par(new=T)
plot(discN.data$NoS, discN.data$Type, xlab="Nos", ylab="Type", xlim=c(0,180), ylim=c(0,800), col="red") # 母語話者
群馬大学の青木先生のサイト
http://aoki2.si.gunma-u.ac.jp/R/
度数に関する検定
カイ二乗分布を使用する独立性の検定と残差分析
> source("http://aoki2.si.gunma-u.ac.jp/R/src/my-chisq-test.R", encoding="euc-jp")
★my-chisq-test.Rというファイル名だが、関数名はmy.chisq.test()
http://aoki2.si.gunma-u.ac.jp/R/src/G2.R“, encoding=”euc-jp
> fisher.test(therefore.data)
Fisher's Exact Test for Count Data
data: therefore.data
p-value = 9.958e-06
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.1021974 0.4526589
sample estimates:
odds ratio
0.2196899
> install.packages("lsr", dependencies = T)
> library(lsr)
> cramersV(therefore.data)
[1] 0.3081308
> tmp.data <- c(38, 15, 53, 96)
> cramersV(tmp.data)
[1] 0.3378448
> tmp.data2 <- c(38, 15, 53, 956)
> cramersV(tmp.data2)
[1] 0.8674172