David Harris ha proporcionado una gran respuesta , pero dado que la pregunta continúa siendo editada, tal vez sería útil ver los detalles de su solución. Los aspectos más destacados del siguiente análisis son:
Los mínimos cuadrados ponderados son probablemente más apropiados que los mínimos cuadrados ordinarios.
Debido a que las estimaciones pueden reflejar una variación en la productividad más allá del control de cualquier individuo, tenga cuidado al usarlas para evaluar a los trabajadores individuales.
Para llevar esto a cabo, creemos algunos datos realistas utilizando fórmulas específicas para que podamos evaluar la precisión de la solución. Esto se hace con R
:
set.seed(17)
n.names <- 1000
groupSize <- 3.5
n.cases <- 5 * n.names # Should exceed n.names
cv <- 0.10 # Must be 0 or greater
groupSize <- 3.5 # Must be greater than 0
proficiency <- round(rgamma(n.names, 20, scale=5)); hist(proficiency)
En estos pasos iniciales, nosotros:
Establezca una semilla para el generador de números aleatorios para que cualquiera pueda reproducir exactamente los resultados.
Especifique cuántos trabajadores hay con n.names
.
Estipular el número esperado de trabajadores por grupo con groupSize
.
Especifique cuántos casos (observaciones) están disponibles con n.cases
. (Más adelante, algunos de estos serán eliminados porque no corresponden, como sucede al azar, a ninguno de los trabajadores de nuestra fuerza laboral sintética).
Haga arreglos para que las cantidades de trabajo difieran aleatoriamente de lo que se predeciría según la suma de las "competencias" de trabajo de cada grupo. El valor de cv
es una variación proporcional típica; Por ejemplo , el dado aquí corresponde a una variación típica del 10% (que podría variar más allá del 30% en algunos casos).0.10
Crear una fuerza laboral de personas con diferentes competencias laborales. Los parámetros dados aquí para la computación proficiency
crean un rango de más de 4: 1 entre los mejores y los peores trabajadores (que, en mi experiencia, incluso pueden ser un poco estrechos para la tecnología y los trabajos profesionales, pero tal vez sea amplio para los trabajos de fabricación de rutina).
Con esta mano de obra sintética en la mano, simulemos su trabajo . Esto equivale a crear un grupo de cada trabajador ( schedule
) para cada observación (eliminando cualquier observación en la que no haya trabajadores involucrados), sumando las competencias de los trabajadores en cada grupo y multiplicando esa suma por un valor aleatorio (promediando exactamente ) para reflejar las variaciones que inevitablemente ocurrirán. (Si no hubiera variación alguna, remitiríamos esta pregunta al sitio de Matemáticas, donde los encuestados podrían señalar que este problema es solo un conjunto de ecuaciones lineales simultáneas que podrían resolverse exactamente para las competencias).1
schedule <- matrix(rbinom(n.cases * n.names, 1, groupSize/n.names), nrow=n.cases)
schedule <- schedule[apply(schedule, 1, sum) > 0, ]
work <- round(schedule %*% proficiency * exp(rnorm(dim(schedule)[1], -cv^2/2, cv)))
hist(work)
He encontrado que es conveniente poner todos los datos del grupo de trabajo en un solo marco de datos para su análisis, pero para mantener separados los valores de trabajo:
data <- data.frame(schedule)
Aquí es donde comenzaríamos con datos reales: tendríamos la agrupación de trabajadores codificada por data
(o schedule
) y los resultados de trabajo observados en la work
matriz.
Desafortunadamente, si algunos trabajadores siempre están emparejados, R
el lm
procedimiento simplemente falla con un error. Deberíamos verificar primero para tales emparejamientos. Una forma es encontrar trabajadores perfectamente correlacionados en el horario:
correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) &
correlations >= 0.999999)]
El resultado enumerará pares de trabajadores siempre pareados: esto se puede usar para combinar estos trabajadores en grupos, porque al menos podemos estimar la productividad de cada grupo, si no los individuos dentro de él. Esperamos que solo se escupe character(0)
. Supongamos que sí.
Un punto sutil, implícito en la explicación anterior, es que la variación en el trabajo realizado es multiplicativa, no aditiva. Esto es realista: la variación en la producción de un gran grupo de trabajadores será, en escala absoluta, mayor que la variación en grupos más pequeños. En consecuencia, obtendremos mejores estimaciones mediante el uso de mínimos cuadrados ponderados en lugar de mínimos cuadrados ordinarios. Los mejores pesos para usar en este modelo en particular son los recíprocos de las cantidades de trabajo. (En el caso de que algunas cantidades de trabajo sean cero, evito esto agregando una pequeña cantidad para evitar dividir por cero).
fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)
Esto debería tomar solo uno o dos segundos.
Antes de continuar, debemos realizar algunas pruebas de diagnóstico del ajuste. Aunque discutir eso nos llevaría demasiado lejos aquí, un R
comando para producir diagnósticos útiles es
plot(fit)
(Esto tomará unos segundos: ¡es un gran conjunto de datos!)
Aunque estas pocas líneas de código hacen todo el trabajo y escupen las competencias estimadas para cada trabajador, no nos gustaría escanear a través de las 1000 líneas de salida, al menos no de inmediato. Usemos gráficos para mostrar los resultados .
fit.coef <- coef(fit.sum)
results <- cbind(fit.coef[, c("Estimate", "Std. Error")],
Actual=proficiency,
Difference=fit.coef[, "Estimate"] - proficiency,
Residual=(fit.coef[, "Estimate"] - proficiency)/fit.coef[, "Std. Error"])
hist(results[, "Residual"])
plot(results[, c("Actual", "Estimate")])
El histograma (panel inferior izquierdo de la figura a continuación) muestra las diferencias entre las competencias estimadas y reales , expresadas como múltiplos del error estándar de estimación. Para un buen procedimiento, estos valores casi siempre estarán entre y y se distribuirán simétricamente alrededor de . Sin embargo, con 1000 trabajadores involucrados, esperamos ver algunas de estas diferencias estandarizadas para extender e incluso lejos de2 0 3 4 0−220340. Este es exactamente el caso aquí: el histograma es tan bonito como uno podría esperar. (Una cosa podría ser, por supuesto, agradable: estos son datos simulados, después de todo. Pero la simetría confirma que los pesos están haciendo su trabajo correctamente. Usar los pesos incorrectos tenderá a crear un histograma asimétrico).
El diagrama de dispersión (panel inferior derecho de la figura) compara directamente las competencias estimadas con las reales. Por supuesto, esto no estaría disponible en realidad, porque no conocemos las competencias reales: aquí radica el poder de la simulación por computadora. Observar:
Si no hubiera habido una variación aleatoria en el trabajo (configure cv=0
y vuelva a ejecutar el código para ver esto), el diagrama de dispersión sería una línea diagonal perfecta. Todas las estimaciones serían perfectamente precisas. Por lo tanto, la dispersión que se ve aquí refleja esa variación.
Ocasionalmente, un valor estimado está bastante lejos del valor real. Por ejemplo, hay un punto cercano (110, 160) donde la competencia estimada es aproximadamente un 50% mayor que la competencia real. Esto es casi inevitable en cualquier gran lote de datos. Tenga esto en cuenta si las estimaciones se utilizarán de forma individual , como para evaluar a los trabajadores. En general, estas estimaciones pueden ser excelentes, pero en la medida en que la variación en la productividad del trabajo se deba a causas más allá del control de cualquier individuo, entonces, para algunos de los trabajadores, las estimaciones serán erróneas: algunas demasiado altas, otras demasiado bajas. Y no hay forma de saber con precisión quién se ve afectado.
Aquí están las cuatro parcelas generadas durante este proceso.
Finalmente, tenga en cuenta que este método de regresión se adapta fácilmente para controlar otras variables que podrían estar asociadas con la productividad del grupo. Estos podrían incluir el tamaño del grupo, la duración de cada esfuerzo de trabajo, una variable de tiempo, un factor para el gerente de cada grupo, etc. Solo inclúyalos como variables adicionales en la regresión.