############################これ以降をRGuiに貼り付けてください######################## cohen.kappa1<- function (classif, type = c("score", "count")) { if (missing(classif)) stop("Usage: cohen.kappa(classif, type=\"score\")\n") if (!is.numeric(classif)) classif <- apply(apply(classif, 2, as.factor), 2, as.numeric) if (type[1] == "score") classif.mat <- scores.to.counts(classif) else classif.mat <- as.matrix(classif) minclassif <- min(classif.mat) classdim <- dim(classif) k <- apply(classif.mat, 1, sum) if (any(k != k[1])) { classif.mat <- cbind(classif.mat, max(k) - k) k <- apply(classif.mat, 1, sum) cat("Different row sums, a no-classification category was added.\n\n") } matdim <- dim(classif.mat) N <- matdim[1] ncat <- matdim[2] if (type[1] == "score") { if (any(is.na(classif))) { cat("Can't use Cohen's method with NAs\n") PEc <- NA } else { pj <- apply(apply(classif, 2, tabulate, nbins = ncat)/N, 1, prod) PEc <- sum(pj) } } else PEc <- NA Cj <- apply(classif.mat, 2, sum) pj <- Cj/(N * k[1]) PEsc <- sum(pj^2) Si <- 1/(k[1] * (k[1] - 1)) * sum(classif.mat * (classif.mat - 1)) PA <- (1/N) * sum(Si) Ksc <- (PA - PEsc)/(1 - PEsc) if (type[1] == "score") { Kc <- (PA - PEc)/(1 - PEc) varKc <- (2/(N * k[1] * (k[1] - 1))) * (PEc - (2 * k[1] - 3) * PEc^2 + 2 * (k[1] - 2) * sum(pj^3))/(1 - PEc)^2 Zc <- Kc/sqrt(varKc) pc <- 1 - pnorm(Zc) } else { Kc <- NA Zc <- NA pc <- NA } varKsc <- (2/(N * k[1] * (k[1] - 1))) * (PEsc - (2 * k[1] - 3) * PEsc^2 + 2 * (k[1] - 2) * sum(pj^3))/(1 - PEsc)^2 Zsc <- Ksc/sqrt(varKsc) psc <- 1 - pnorm(Zsc) Kbbc <- 2 * PA - 1 Q0<-1-PA Qe<-1-PEc Qe.sc<-1-PEsc sigma.k<-sqrt((PA*Q0)/(N*Qe^2)) Kc.upper<-Kc+qnorm(0.975)*sigma.k Kc.lower<-Kc-qnorm(0.975)*sigma.k sigma.ksc<-sqrt((PA*Q0)/(N*Qe.sc^2)) Ksc.upper<-Ksc+qnorm(0.975)*sigma.ksc Ksc.lower<-Ksc-qnorm(0.975)*sigma.ksc k<-c(kappa.c = Kc, Zc = Zc,pc = pc,Kc.lower=Kc.lower,Kc.upper=Kc.upper,kappa.sc = Ksc, Zsc = Zsc, kappa.bbc = psc,Ksc.lower=Ksc.lower,Ksc.upper=Ksc.upper) kr<-t(matrix(k,5,2)) dimnames(kr)<-list(c("Kappa(Cohen)","Kappa(Siegel)"),c("coef.","Z","p","95%CI-lower","95%CI-upper")) kr } scores.to.counts<- function (scores) { if (is.data.frame(scores)) score.names <- levels(as.factor(as.vector(unlist(scores)))) if (is.matrix(scores)) score.names <- levels(as.factor(as.vector(scores))) if (missing(score.names)) stop("scores must be a data frame or matrix") score.levels <- as.numeric(score.names) nlevels <- length(score.levels) nobj <- length(scores[, 1]) counts <- matrix(0, nrow = nobj, ncol = nlevels) colnames(counts) <- score.names for (i in 1:nobj) { for (j in 1:nlevels) counts[i, j] <- sum(scores[i, ] == score.levels[j], na.rm = TRUE) } return(counts) } cohen.kappa.r<- function(x,xcol=2)# xcolはソートしたい列番号.デフォルトで2列目 { X<-NULL for(i in 1:nrow(x)) { x1<-x[-c(i),] X<-rbind(X,c(i,cohen.kappa1(x1)[1,],cohen.kappa1(x1)[2,])) } dimnames(X)[[2]]<-c("No.(omit)","Cohen coef.","Cohen Z","Cohen p","Cohen 95%CI-lower","Cohen 95%CI-upper","Siegel coef.","Siegel Z","Siegel p","Siegel 95%CI-lower","Siegel 95%CI-upper") list("各行番号の行を除いた係数が降順にソートされて出力される(行名が「5」のときは5行目のデータ以外で計算)"=X[order(X[,xcol],decreasing=T),] ) }