David Harris forneceu uma ótima resposta , mas, como a pergunta continua sendo editada, talvez ajude a ver os detalhes de sua solução. Os destaques da análise a seguir são:
Os mínimos quadrados ponderados são provavelmente mais apropriados que os mínimos quadrados comuns.
Como as estimativas podem refletir variações na produtividade além do controle de qualquer indivíduo, tenha cuidado ao usá-las para avaliar trabalhadores individuais.
Para fazer isso, vamos criar alguns dados realistas usando fórmulas especificadas para avaliar a precisão da solução. Isso é feito com 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)
Nestas etapas iniciais, nós:
Defina uma semente para o gerador de números aleatórios para que qualquer pessoa possa reproduzir exatamente os resultados.
Especifique quantos trabalhadores existem n.names
.
Estipule o número esperado de trabalhadores por grupo com groupSize
.
Especifique com quantos casos (observações) estão disponíveis n.cases
. (Mais tarde, alguns deles serão eliminados porque correspondem, como acontece aleatoriamente, a nenhum dos trabalhadores de nossa força de trabalho sintética.)
Organize para que as quantidades de trabalho diferam aleatoriamente do que seria previsto com base na soma das "proficiências" do trabalho de cada grupo. O valor de cv
é uma variação proporcional típica; Por exemplo , o dado aqui corresponde a uma variação típica de 10% (que pode variar além de 30% em alguns casos).0,10
Crie uma força de trabalho de pessoas com diferentes habilidades de trabalho. Os parâmetros dados aqui para a computação proficiency
criam uma faixa de mais de 4: 1 entre os melhores e os piores trabalhadores (que, na minha experiência, podem até ser um pouco estreitos para trabalhos de tecnologia e profissionais, mas talvez sejam amplos para trabalhos rotineiros de fabricação).
Com essa força de trabalho sintética em mãos, vamos simular o trabalho deles . Isso equivale a criar um grupo de cada trabalhador ( schedule
) para cada observação (eliminando as observações em que nenhum trabalhador estava envolvido), somando as proficiências dos trabalhadores em cada grupo e multiplicando essa soma por um valor aleatório (média de exatamente ) para refletir as variações que inevitavelmente ocorrerão. (Se não houvesse variação alguma, encaminharíamos essa questão para o site de Matemática, onde os entrevistados poderiam apontar que esse problema é apenas um conjunto de equações lineares simultâneas que poderiam ser resolvidas exatamente pelas proficiências.)1 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)
Eu achei conveniente colocar todos os dados do grupo de trabalho em um único quadro de dados para análise, mas manter os valores do trabalho separados:
data <- data.frame(schedule)
É aqui que começaríamos com dados reais: teríamos o agrupamento de trabalhadores codificado por data
(ou schedule
) e as saídas de trabalho observadas na work
matriz.
Infelizmente, se alguns trabalhadores estão sempre emparelhados, R
o lm
procedimento simplesmente falha com um erro. Devemos verificar primeiro esses pares. Uma maneira é encontrar trabalhadores perfeitamente correlacionados no cronograma:
correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) &
correlations >= 0.999999)]
A saída listará pares de trabalhadores sempre emparelhados: isso pode ser usado para combinar esses trabalhadores em grupos, porque pelo menos podemos estimar a produtividade de cada grupo, se não os indivíduos dentro dele. Esperamos que isso cuspa character(0)
. Vamos presumir que sim.
Um ponto sutil, implícito na explicação anterior, é que a variação no trabalho realizado é multiplicativa, não aditiva. Isso é realista: a variação na produção de um grande grupo de trabalhadores será, em escala absoluta, maior que a variação em grupos menores. Conseqüentemente, obteremos melhores estimativas usando os mínimos quadrados ponderados em vez dos mínimos quadrados comuns. Os melhores pesos a serem usados nesse modelo específico são os recíprocos dos valores do trabalho. (No caso de algumas quantidades de trabalho serem nulas, eu o refugo adicionando uma pequena quantidade para evitar dividir por zero.)
fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)
Isso deve levar apenas um ou dois segundos.
Antes de prosseguir, devemos realizar alguns testes de diagnóstico do ajuste. Embora discutir isso nos levaria muito longe aqui, um R
comando para produzir diagnósticos úteis é
plot(fit)
(Isso levará alguns segundos: é um grande conjunto de dados!)
Embora essas poucas linhas de código façam todo o trabalho e cuspam as proficiências estimadas para cada trabalhador, não queremos examinar todas as 1000 linhas de saída - pelo menos não imediatamente. Vamos usar gráficos para exibir os 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")])
- 220 0340 0. Este é exatamente o caso aqui: o histograma é o mais bonito que se poderia esperar. (É claro que é bom: são dados simulados, afinal. Mas a simetria confirma que os pesos estão fazendo seu trabalho corretamente. O uso de pesos errados tenderá a criar um histograma assimétrico.)
O gráfico de dispersão (painel inferior direito da figura) compara diretamente as proficiências estimadas às reais. É claro que isso não estaria disponível na realidade, porque não sabemos as proficiências reais: aqui reside o poder da simulação por computador. Observar:
Se não houvesse variação aleatória no trabalho (configure cv=0
e execute novamente o código para ver isso), o gráfico de dispersão seria uma linha diagonal perfeita. Todas as estimativas seriam perfeitamente precisas. Assim, a dispersão vista aqui reflete essa variação.
Ocasionalmente, um valor estimado está bem longe do valor real. Por exemplo, há um ponto próximo (110, 160) em que a proficiência estimada é cerca de 50% maior que a proficiência real. Isso é quase inevitável em qualquer grande lote de dados. Tenha isso em mente se as estimativas serão usadas individualmente , como na avaliação de trabalhadores. No geral, essas estimativas podem ser excelentes, mas, na medida em que a variação na produtividade do trabalho se deve a causas além do controle de qualquer indivíduo, para alguns trabalhadores as estimativas serão errôneas: algumas muito altas, outras muito baixas. E não há como dizer com precisão quem é afetado.
Aqui estão os quatro gráficos gerados durante esse processo.
Por fim, observe que esse método de regressão é facilmente adaptado ao controle de outras variáveis que podem estar associadas à produtividade do grupo. Isso pode incluir o tamanho do grupo, a duração de cada esforço de trabalho, uma variável de tempo, um fator para o gerente de cada grupo e assim por diante. Apenas inclua-os como variáveis adicionais na regressão.