David Harris udzielił świetnej odpowiedzi , ale ponieważ pytanie wciąż jest edytowane, być może pomogłoby to zobaczyć szczegóły jego rozwiązania. Najważniejsze cechy poniższej analizy to:
Ważone najmniejsze kwadraty są prawdopodobnie bardziej odpowiednie niż zwykłe najmniejsze kwadraty.
Ponieważ szacunki mogą odzwierciedlać różnice produktywności poza kontrolą jakiejkolwiek osoby, należy zachować ostrożność, używając ich do oceny poszczególnych pracowników.
Aby to zrobić, utwórzmy realistyczne dane przy użyciu określonych formuł, abyśmy mogli ocenić dokładność rozwiązania. Odbywa się to za pomocą 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)
W tych początkowych krokach:
Ustaw ziarno dla generatora liczb losowych, aby każdy mógł dokładnie odtworzyć wyniki.
Określ, ilu jest pracowników n.names.
Podaj oczekiwaną liczbę pracowników w grupie z groupSize.
Określ, ile przypadków (obserwacji) jest dostępnych n.cases. (Później kilka z nich zostanie wyeliminowanych, ponieważ odpowiadają przypadkowo żadnemu z pracowników naszej syntetycznej siły roboczej).
Ustal, aby ilość pracy różniła się losowo od przewidywanej na podstawie sumy „umiejętności” każdej grupy. Wartość cvjest typową odmianą proporcjonalną; Na przykład podana tutaj wartość odpowiada typowej 10% zmienności (która w niektórych przypadkach może przekraczać 30%).0,10
Stwórz siłę roboczą osób o różnych umiejętnościach pracy. Podane tutaj parametry obliczeniowe proficiencytworzą zakres ponad 4: 1 między najlepszymi i najgorszymi pracownikami (co z mojego doświadczenia może być nawet nieco wąskie dla prac technologicznych i zawodowych, ale być może jest szerokie dla rutynowych zadań produkcyjnych).
Mając tę syntetyczną siłę roboczą pod ręką, symulujmy ich pracę . Sprowadza się to do utworzenia grupy każdego pracownika ( schedule) dla każdej obserwacji (eliminując wszelkie obserwacje, w których w ogóle nie uczestniczyli pracownicy), sumując umiejętności pracowników w każdej grupie i mnożąc tę sumę przez wartość losową (średnio dokładnie ) w celu odzwierciedlenia zmian, które nieuchronnie wystąpią. (Gdyby w ogóle nie było żadnych zmian, odesłalibyśmy to pytanie na stronę Matematyki, gdzie respondenci mogliby wskazać, że ten problem to tylko zestaw równań liniowych, które można rozwiązać dokładnie dla biegłości.)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)
Odkryłem, że wygodnie jest umieścić wszystkie dane grupy roboczej w jednej ramce danych do analizy, ale zachować wartości pracy osobno:
data <- data.frame(schedule)
W tym miejscu zaczęlibyśmy od rzeczywistych danych: grupowanie pracowników byłoby zakodowane przez data(lub schedule), a obserwowane wyniki pracy w worktablicy.
Niestety, jeśli niektórzy pracownicy są zawsze w parze, Rjest lmprocedura po prostu nie powiedzie się z powodu błędu. Najpierw powinniśmy sprawdzić takie pary. Jednym ze sposobów jest znalezienie doskonale skorelowanych pracowników w harmonogramie:
correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) &
correlations >= 0.999999)]
W wyniku wyszczególnione zostaną pary zawsze sparowanych pracowników: można tego użyć do połączenia tych pracowników w grupy, ponieważ przynajmniej możemy oszacować produktywność każdej grupy, jeśli nie poszczególnych osób w jej obrębie. Mamy nadzieję, że po prostu wypluje character(0). Załóżmy, że tak.
Jednym subtelnym punktem, wynikającym z powyższego wyjaśnienia, jest to, że zmienność wykonywanej pracy jest multiplikatywna, a nie addytywna. Jest to realistyczne: zróżnicowanie wydajności dużej grupy pracowników, w skali bezwzględnej, będzie większe niż zróżnicowanie w mniejszych grupach. W związku z tym uzyskamy lepsze oszacowania, stosując ważone najmniejsze kwadraty zamiast zwykłych najmniejszych kwadratów. Najlepszymi wagami do zastosowania w tym konkretnym modelu są odwrotności kwot pracy. (W przypadku, gdy niektóre kwoty pracy wynoszą zero, fałszuję to, dodając niewielką ilość, aby uniknąć dzielenia przez zero).
fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)
Powinno to zająć tylko jedną lub dwie sekundy.
Przed kontynuowaniem powinniśmy wykonać testy diagnostyczne dopasowania. Chociaż omawianie ich zabrałoby nas tutaj zbyt daleko, jedno Rpolecenie do stworzenia użytecznej diagnostyki to
plot(fit)
(Zajmie to kilka sekund: to duży zestaw danych!)
Chociaż te kilka wierszy kodu wykonuje całą pracę i wyrzuca szacunkowe biegłości dla każdego pracownika, nie chcielibyśmy skanować wszystkich 1000 wierszy wyników - przynajmniej nie od razu. Użyjmy grafiki do wyświetlenia wyników .
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")])
Histogram (lewy dolny panel na poniższym rysunku) przedstawia różnice między szacunkową a rzeczywistą biegłością, wyrażone jako wielokrotność standardowego błędu oszacowania. Dla dobrej procedury wartości te prawie zawsze będą zawierać się między a i będą symetrycznie rozmieszczone wokół . Jednak przy zaangażowaniu 1000 pracowników w pełni spodziewamy się, że kilka z tych standardowych różnic rozciąga się na a nawet na- 22)03)40. Dokładnie tak jest w tym przypadku: histogram jest tak ładny, jak można by oczekiwać. (Można oczywiście powiedzieć, że to miłe: w końcu są to dane symulowane. Ale symetria potwierdza, że odważniki wykonują swoją pracę poprawnie. Użycie niewłaściwych odważników spowoduje tendencję do tworzenia asymetrycznego histogramu.)
Wykres rozrzutu (prawy dolny panel rysunku) bezpośrednio porównuje szacunkowe sprawności z rzeczywistymi. Oczywiście nie byłoby to możliwe w rzeczywistości, ponieważ nie znamy faktycznych biegłości: w tym tkwi siła symulacji komputerowej. Przestrzegać:
Gdyby nie było przypadkowych zmian w pracy (ustaw cv=0i ponownie uruchom kod, aby to zobaczyć), wykres rozproszenia byłby idealną ukośną linią. Wszystkie szacunki byłyby całkowicie dokładne. Widoczny tutaj rozproszenie odzwierciedla zatem tę zmianę.
Czasami oszacowana wartość jest dość daleka od wartości rzeczywistej. Na przykład, istnieje jeden punkt w pobliżu (110, 160), w którym szacowana biegłość jest o około 50% większa niż faktyczna biegłość. Jest to prawie nieuniknione w przypadku dużej partii danych. Pamiętaj o tym, jeśli szacunki będą wykorzystywane indywidualnie , na przykład do oceny pracowników. Ogólnie rzecz biorąc, te szacunki mogą być doskonałe, ale w zakresie, w jakim zróżnicowanie wydajności pracy jest spowodowane przyczynami niezależnymi od jakiejkolwiek osoby, wówczas dla niektórych pracowników oszacowania będą błędne: niektórzy za wysoko, inni za nisko. I nie ma sposobu, aby dokładnie powiedzieć, kogo to dotyczy.
Oto cztery wykresy wygenerowane podczas tego procesu.

Na koniec zauważ, że ta metoda regresji jest łatwo przystosowana do kontrolowania innych zmiennych, które prawdopodobnie mogą być związane z produktywnością grupy. Mogą one obejmować wielkość grupy, czas trwania każdego wysiłku, zmienną czasową, czynnik dla kierownika każdej grupy i tak dalej. Wystarczy uwzględnić je jako dodatkowe zmienne w regresji.