No sé mucho sobre estadísticas, así que tengan paciencia conmigo. Digamos que tengo un conjunto de 1000 trabajadores. Quiero averiguar quién es el trabajador más duro, pero solo puedo medir la cantidad de trabajo que se realiza en grupos de 1 a 100 durante más de una hora de trabajo. Suponiendo que cada trabajador siempre realiza la misma cantidad de trabajo, en una gran cantidad de ensayos y combinaciones, ¿puedo clasificar a mis trabajadores según quién trabaja más duro?
Nota: esto es solo una metáfora, así que no te preocupes por ejecutar las pruebas, solo asume que ya tengo un gran conjunto de datos.
Editar: Cuando digo "Asumiendo que cada trabajador siempre hace la misma cantidad de trabajo", me refiero a que cada individuo hace aproximadamente la misma cantidad de trabajo en el día a día. Entonces, Joey hará alrededor de 100 unidades de trabajo cada día y Greg hará alrededor de 50. El problema es que solo puedo observar la cantidad de unidades de trabajo realizadas por el grupo.
Más ediciones: en cuanto a la cantidad de trabajadores que trabajan a la vez y la frecuencia con la que trabajan. Podría haber cualquier número de trabajadores trabajando al mismo tiempo. Algunos trabajadores probablemente terminarán trabajando mucho más que otros, es decir, podemos suponer que algunos trabajadores estarán trabajando casi el 90% del tiempo y otros casi nunca.
Sé que eso lo hace difícil, pero tendré un conjunto de datos muy grande, así que espero que lo haga un poco más fácil.
Por cada hora sabemos qué trabajadores están trabajando y cuánto trabajo se realizó. A partir de esa información, quiero saber quién está haciendo más trabajo.
Si los datos estuvieran en formato JSON, se vería así:
[
{
"work_done": 12345,
"Workers": [ "andy", "bob", "cameron", "david" ]
},
{
"work_done": 432,
"Workers": [ "steve", "joe", "andy"]
},
{
"work_done": 59042,
"Workers": [ "bob", "aaron", "michelle", "scott", "henry" ]
},
...
]
fuente
Respuestas:
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
: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 de0.10
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).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 (1
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).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:
Aquí es donde comenzaríamos con datos reales: tendríamos la agrupación de trabajadores codificada por
data
(oschedule
) y los resultados de trabajo observados en lawork
matriz.Desafortunadamente, si algunos trabajadores siempre están emparejados,
R
ellm
procedimiento simplemente falla con un error. Deberíamos verificar primero para tales emparejamientos. Una forma es encontrar trabajadores perfectamente correlacionados en el horario: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).
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(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 .
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−2 2 0 3 4 0 . 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.
fuente
results
): puede ordenarla por valor estimado. Puede exportarlo a una hoja de cálculo, etc.Desea configurar sus datos de esta manera, con 1 indicando que la persona era parte del equipo que hizo el trabajo de esa fila:
Luego, puede hacer una regresión lineal (suponiendo que todo sea aditivo, etc., como mencionó en los comentarios). En
R
, el comando seríalm(work.done ~ . + 0, data = my.data)
La "fórmula"
work.done ~ . + 0
dice, en inglés, que la cantidad de trabajo realizado depende de todas las otras columnas (ese es el ".") Y que los grupos sin trabajadores no trabajarían (ese es el "+ 0"). Esto le dará la contribución aproximada de cada trabajador al producto promedio del grupo.Como se discutió en los comentarios, si tiene un par de trabajadores que siempre están juntos, el modelo no distinguirá las contribuciones de los dos trabajadores entre sí, y uno de ellos obtendrá un "NA".
fuente