David Harris ha fornito un'ottima risposta , ma poiché la domanda continua a essere modificata, forse sarebbe d'aiuto vedere i dettagli della sua soluzione. I punti salienti della seguente analisi sono:
I minimi quadrati ponderati sono probabilmente più appropriati dei minimi quadrati ordinari.
Poiché le stime possono riflettere la variazione della produttività al di fuori del controllo di ogni individuo, sii cauto nell'utilizzarle per valutare i singoli lavoratori.
A tale scopo, creiamo alcuni dati realistici utilizzando le formule specificate in modo da poter valutare l'accuratezza della soluzione. Questo viene fatto 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)
In questi passaggi iniziali, noi:
Imposta un seme per il generatore di numeri casuali in modo che chiunque possa riprodurre esattamente i risultati.
Specifica quanti lavoratori ci sono n.names.
Stabilire il numero previsto di lavoratori per gruppo con groupSize.
Specificare quanti casi (osservazioni) sono disponibili con n.cases. (Più tardi alcuni di questi saranno eliminati perché corrispondono, come accade a caso, a nessuno dei lavoratori della nostra forza lavoro sintetica.)
Organizzare che le quantità di lavoro differiscano casualmente da ciò che sarebbe previsto in base alla somma delle "competenze" del lavoro di ciascun gruppo. Il valore di cvè una variazione proporzionale tipica; Ad esempio , lo indicato qui corrisponde a una tipica variazione del 10% (che potrebbe variare oltre il 30% in alcuni casi).0.10
Creare una forza lavoro di persone con diverse competenze lavorative. I parametri qui forniti per il calcolo proficiencycreano un intervallo di oltre 4: 1 tra i lavoratori migliori e quelli peggiori (che nella mia esperienza potrebbe anche essere un po 'stretto per la tecnologia e i lavori professionali, ma forse è ampio per i normali lavori di produzione).
Con questa forza lavoro sintetica in mano, simuliamo il loro lavoro . Ciò equivale a creare un gruppo di ciascun lavoratore ( schedule) per ogni osservazione (eliminando qualsiasi osservazione in cui nessun lavoratore fosse coinvolto), sommando le competenze dei lavoratori in ciascun gruppo e moltiplicando tale somma per un valore casuale (media esattamente ) per riflettere le variazioni che inevitabilmente si verificheranno. (Se non ci fosse alcuna variazione, rimanderemmo questa domanda al sito di Matematica, dove gli intervistati potrebbero sottolineare che questo problema è solo un insieme di equazioni lineari simultanee che potrebbero essere risolte esattamente per le competenze.)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)
Ho trovato conveniente mettere tutti i dati del gruppo di lavoro in un singolo frame di dati per l'analisi, ma per mantenere separati i valori di lavoro:
data <- data.frame(schedule)
È qui che inizieremmo con dati reali: avremmo codificato il raggruppamento di lavoratori da data(o schedule) e gli output di lavoro osservati worknell'array.
Sfortunatamente, se alcuni lavoratori sono sempre accoppiati, Rla lmprocedura fallisce semplicemente con un errore. Dovremmo prima verificare tali accoppiamenti. Un modo è trovare lavoratori perfettamente correlati nel programma:
correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) &
correlations >= 0.999999)]
L'output elencherà le coppie di lavoratori sempre accoppiati: questo può essere usato per combinare questi lavoratori in gruppi, perché almeno possiamo stimare la produttività di ciascun gruppo, se non le persone al suo interno. Speriamo che sputi character(0). Supponiamo che lo faccia.
Un punto sottile, implicito nella precedente spiegazione, è che la variazione del lavoro svolto è moltiplicativa, non additiva. Ciò è realistico: la variazione nella produzione di un grande gruppo di lavoratori sarà, su scala assoluta, maggiore della variazione nei gruppi più piccoli. Di conseguenza, otterremo stime migliori utilizzando i minimi quadrati ponderati anziché i minimi quadrati ordinari. I pesi migliori da utilizzare in questo particolare modello sono i reciproci degli importi di lavoro. (Nel caso in cui alcuni importi di lavoro siano pari a zero, lo fondo aggiungendo un piccolo importo per evitare di dividere per zero.)
fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)
Questo dovrebbe richiedere solo uno o due secondi.
Prima di procedere dovremmo eseguire alcuni test diagnostici di adattamento. Anche se discutere di questi ci porterebbe troppo lontano qui, un Rcomando per produrre una diagnostica utile è
plot(fit)
(Questo richiederà alcuni secondi: è un set di dati di grandi dimensioni!)
Sebbene queste poche righe di codice facciano tutto il lavoro e sputino le competenze stimate per ciascun lavoratore, non vorremmo scansionare tutte le 1000 linee di output - almeno non subito. Usiamo la grafica per visualizzare i risultati .
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")])
L'istogramma (riquadro in basso a sinistra della figura in basso) rappresenta le differenze tra le competenze stimate e effettive , espresse come multipli dell'errore standard della stima. Per una buona procedura, questi valori saranno quasi sempre compresi tra e e saranno distribuiti simmetricamente attorno a . Con 1000 lavoratori coinvolti, tuttavia, ci aspettiamo di vedere alcune di queste differenze standardizzate che si estendono e anche lontano da2 0 3 4 0−220340. Questo è esattamente il caso qui: l'istogramma è bello come si potrebbe sperare. (Ovviamente, una cosa potrebbe essere piacevole: questi sono dati simulati, dopo tutto. Ma la simmetria conferma che i pesi stanno facendo il loro lavoro correttamente. L'uso di pesi sbagliati tenderà a creare un istogramma asimmetrico.)
Il grafico a dispersione (riquadro in basso a destra della figura) confronta direttamente le competenze stimate con quelle effettive. Naturalmente questo non sarebbe disponibile nella realtà, perché non conosciamo le competenze effettive: qui sta il potere della simulazione al computer. Osservare:
Se non ci fosse stata alcuna variazione casuale nel lavoro (impostare cv=0e rieseguire il codice per vederlo), il diagramma a dispersione sarebbe una linea diagonale perfetta. Tutte le stime sarebbero perfettamente accurate. Pertanto, la dispersione vista qui riflette quella variazione.
Occasionalmente, un valore stimato è piuttosto lontano dal valore reale. Ad esempio, c'è un punto vicino (110, 160) in cui la competenza stimata è di circa il 50% superiore alla competenza effettiva. Questo è quasi inevitabile in qualsiasi grande lotto di dati. Tienilo a mente se le stime saranno utilizzate su base individuale , ad esempio per valutare i lavoratori. Nel complesso, queste stime possono essere eccellenti, ma nella misura in cui la variazione della produttività del lavoro è dovuta a cause al di fuori del controllo di ogni individuo, allora per alcuni lavoratori le stime saranno errate: alcune troppo alte, altre troppo basse. E non c'è modo di dire con precisione chi è interessato.
Ecco i quattro grafici generati durante questo processo.

Infine, si noti che questo metodo di regressione si adatta facilmente al controllo di altre variabili che plausibilmente potrebbero essere associate alla produttività del gruppo. Questi potrebbero includere la dimensione del gruppo, la durata di ogni sforzo lavorativo, una variabile temporale, un fattore per il manager di ciascun gruppo e così via. Includili semplicemente come variabili aggiuntive nella regressione.