variacion transformar tablas tabla studio sesgo recodificar moda hallar frecuencias cruzadas coeficiente calcular r statistics data-manipulation

transformar - tablas cruzadas en r



Cálculo de tamaños de efectos entre 3 grupos para un conjunto de variables en un conjunto de datos (1)

Me gustaría calcular el tamaño del efecto de 3 tratamientos en 3 variables (x1, x2, x3). Supongamos que tengo el siguiente conjunto de datos:

set.seed(1234) data <- data.frame( dose=factor(c(rep(1,25), rep(2,35), rep(3,40)), labels = c("low", "middle", "high")), x1 = rnorm(100, 0, 2), x2 = rnorm(100, 3, 3), x3 = rnorm(100, 9, 4) )

Ahora, me gustaría calcular, para cada combinación de tratamientos, el tamaño del efecto. Encontré esta función para calcular la d de Cohen.

cohens_d <- function(x, y) { lx <- length(x)- 1 ly <- length(y)- 1 md <- abs(mean(x) - mean(y)) csd <- lx * var(x) + ly * var(y) csd <- csd/(lx + ly) csd <- sqrt(csd) cd <- md/csd # Hedges''g cd*(1-(3/(4*(length(x)+length(y)-9)))) #print(cd) }

Muchas gracias por su ayuda.

EDITAR:

Por ejemplo, a continuación puedo calcular el tamaño del efecto de los tres tratamientos (por parejas) en una variable x1. Idealmente, me gustaría una forma generalizable de obtener estas comparaciones por pares para todas las variables en mi conjunto de datos.

cohens_d(data$x1[data$dose=="low"], data$x1[data$dose=="middle"]) cohens_d(data$x1[data$dose=="low"], data$x1[data$dose=="high"]) cohens_d(data$x1[data$dose=="middle"], data$x1[data$dose=="high"])


df1$dose <- as.character(df1$dose) # convert dose from factor to character selected_cols <- colnames( df1 )[2:4] # select columns prefixed with ''x'' library("reshape2") # load reshape2 library df1 <- melt( data = df1, id = "dose", measure.vars =selected_cols , value.name = ''value'') # melt df1 data frame # compute cohensD cohens_df1 <- with(df1, sapply( selected_cols, # loop through column names function( x ) combn( unique(dose), 2 , # loop through pairs of dose combinations function( y ) cohens_d( df1[ variable %in% x & dose %in% y[1], ''value'' ], df1[ variable %in% x & dose %in% y[2], ''value'' ] )))) # assign row names rownames(cohens_df1) <- combn( unique(df1$dose), 2 , function( y ) paste( y, collapse = ''_'' ) ) cohens_df1 # x1 x2 x3 # low_middle 0.3319591 0.09511378 0.321519422 # low_high 0.4982017 0.03265765 0.337651450 # middle_high 0.8221889 0.10799662 0.006570862

Datos:

set.seed(1234) df1 <- data.frame( dose = factor(c(rep(1,25), rep(2,35), rep(3,40)), levels = c(1, 2, 3), labels = c("low", "middle", "high")), x1 = rnorm(100, 0, 2), x2 = rnorm(100, 3, 3), x3 = rnorm(100, 9, 4))