Last active
August 29, 2015 13:56
-
-
Save tukachev/8871947 to your computer and use it in GitHub Desktop.
Функция для вычисления Фи-коэффициента Гилфорда для четырехклеточных таблиц
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Функция для вычисления Фи-коэффициента Гилфорда для четырехклеточных таблиц | |
#Guilford J. P. The phi-coefficient and chi-square as indices of item validity. — Psychometrika. 1941. VI. P. 11—19. | |
phi.coeff <- function(x){ | |
#Проверка | |
if (!is.matrix(x)) | |
stop("Function only defined for 2-way tables.") | |
a <- x[1,1] | |
b <- x[1,2] | |
c <- x[2,1] | |
d <- x[2,2] | |
n <- sum(x) | |
#Вводим поправку для числителя в виде половинной численности элементов таблицы | |
#как это сделал сам Guilford (1941) | |
phi.coeff <- ((a*d - b*c) - 0.5*n) / sqrt(((a + b)*(c + d)*(a + c)*(b + d))) | |
chi.sq <- phi.coeff^2*n | |
phi.coeff <- round(phi.coeff, 4) | |
pval <- round(1 - pchisq(chi.sq, df = 1), 4) #Р-уровень | |
structure(list(table = x, chisq_statistic = chi.sq, phi = phi.coeff, p = pval)) | |
} | |
#Данные четырехклеточной таблицы | |
x <- matrix(c(15, 6, 8, 13),ncol=2) | |
#Пробуем нашу функцию | |
phi.coeff(x) | |
#Karl Pearson’s smallpox recovery data | |
#Source: Metropolitan Asylums Board: Small-pox epidemic 1893. (Pearson, 1900) | |
x <- matrix(c(1562, 383, 42, 94),ncol=2, | |
dimnames = list(c("Vaccinated", "Unvaccinated"), | |
c("Recovery", "Death"))) | |
#Дополнение в функцию (?) | |
#Pearson’s contingency coefficient (C) | |
C <- sqrt(chi.sq / (chi.sq + n)) | |
Cadj <- C / 0.71 | |
w <- sqrt(C^2 / (1 - C^2)) | |
#The Odds-Ratio (OR) | |
ln <- function(x) { log(x, 2.718281828)} | |
OR <- (a*d) / (b*c) | |
#Test of significance for an odds ratio | |
SE <- sqrt(1/a + 1/b + 1/c + 1/d) | |
Z <- ln(OR) / SE | |
Zpval <- round(1 - pnorm(Z), 4) | |
#d Cox effect size | |
d.Cox <- ln(OR) / 1.65 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment