Девід Гарріс дав чудову відповідь , але оскільки питання продовжує редагуватись, можливо, це допоможе розібратися в деталях його рішення. Основні моменти наступного аналізу:
Найменш зважені квадрати, ймовірно, більш доречні, ніж звичайні найменші квадрати.
Оскільки оцінки можуть відображати різницю в продуктивності, що не відповідає контролю будь-якої людини, будьте обережні, використовуючи їх для оцінки окремих працівників.
Для цього давайте створимо реалістичні дані за допомогою заданих формул, щоб ми могли оцінити точність рішення. Це робиться за допомогою 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)
У цих початкових кроках ми:
Встановіть насіння для генератора випадкових чисел, щоб кожен міг точно відтворити результати.
Вкажіть, скільки там працівників n.names
.
Сформулюйте очікувану кількість працівників на групу groupSize
.
Вкажіть, скільки випадків (спостережень) доступні n.cases
. (Пізніше деякі з них будуть ліквідовані, оскільки вони відповідають, як це відбувається випадково) жодному з працівників нашої синтетичної робочої сили.)
Упорядкуйте, щоб обсяги робіт були випадковими, ніж те, що було б передбачено, виходячи з суми роботи кожної групи "вміння". Значення cv
- типова пропорційна зміна; Наприклад , наведений тут відповідає типовому 10% -ному варіанту (який може перевищувати 30% у кількох випадках).0.10
Створіть робочу силу людей із різними професійними рівнями. Наведені тут параметри для обчислень proficiency
створюють діапазон понад 4: 1 між найкращими та найгіршими працівниками (що, на мій досвід, навіть може бути трохи вузьким для технологій та професійних завдань, але, можливо, є широким для звичайних виробничих робіт).
Маючи цю синтетичну робочу силу в роботі, давайте змоделюємо їхню роботу . Це означає створення групи кожного робітника ( schedule
) для кожного спостереження (усунення будь-яких спостережень, в яких взагалі не задіяні робітники), підсумовування кваліфікацій працівників кожної групи та множення цієї суми на випадкове значення (в середньому рівно ) відобразити варіації, які неминуче відбудуться. (Якби взагалі не було варіацій, ми б передали це питання на сайт Математика, де респонденти могли б вказати, що ця проблема є лише набором одночасних лінійних рівнянь, які можна було б вирішити саме для знань.)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)
Я виявив, що зручно розміщувати всі дані робочої групи в одному кадрі для аналізу, але зберігати окремі робочі значення:
data <- data.frame(schedule)
Тут ми б почали з реальних даних: у нас групування робітників буде закодовано data
(або schedule
) та спостережувані результати роботи в work
масиві.
На жаль, якщо деякі робочі завжди парні, R
«s lm
процедура просто завершується з помилкою. Спершу слід перевірити наявність таких пар. Один із способів - знайти ідеально співвіднесених працівників у графіку:
correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) &
correlations >= 0.999999)]
Результатом буде перераховано пари пар, що працюють завжди в парі: це можна використовувати для об'єднання цих робітників у групи, тому що принаймні ми можемо оцінити продуктивність кожної групи, якщо не окремих людей у ній. Ми сподіваємось, що це просто випльовується character(0)
. Припустимо, це так і є.
Один тонкий момент, виразний у вищенаведеному поясненні, полягає в тому, що варіація виконуваних робіт є мультипликативною, а не адитивною. Це реально: коливання у виробництві великої групи працівників, в абсолютній шкалі, буде більше, ніж коливання у менших групах. Відповідно, ми отримаємо кращі оцінки, використовуючи найменш зважені квадрати, а не звичайні найменші квадрати. Найкращі ваги, що використовуються в цій конкретній моделі, - це зворотні суми робіт. (Якщо деякі обсяги роботи дорівнюють нулю, я підробляю це, додаючи невелику кількість, щоб уникнути ділення на нуль.)
fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)
Це займе лише одну-дві секунди.
Перш ніж продовжувати, нам слід провести деякі діагностичні тести придатності. Хоча обговорення цих питань перенесло б нас далеко далеко, одна R
команда для створення корисної діагностики є
plot(fit)
(Це займе кілька секунд: це великий набір даних!)
Хоча ці декілька рядків коду виконують всю роботу і випльовують орієнтовні знання для кожного працівника, ми не хотіли б просканувати всі 1000 рядків продукції - принаймні, не відразу. Давайте використовувати графіку для відображення результатів .
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")])
Гістограма (ліва нижня панель рисунку нижче) відрізняється між розрахованими та фактичними знаннями, вираженими у вигляді кратних стандартних помилок оцінки. Для гарної процедури ці значення майже завжди будуть лежати між ними- 2 і 2 і бути симетрично розподіленими навколо 0. З 1000 зайнятих працівників, однак, ми сподіваємось побачити, що деякі з цих стандартизованих відмінностей будуть розширюватися3 і навіть 4 осторонь 0. Тут саме так: гістограма така гарна, як можна було сподіватися. (Можна, звичайно, це приємно. Зрештою, це симульовані дані. Але симетрія підтверджує, що ваги виконують свою роботу правильно. Використання неправильних ваг, як правило, створює асиметричну гістограму.)
Розсіювач (нижній правий панель рисунка) безпосередньо порівнює оцінені знання з фактичними. Звичайно, це було б недоступне насправді, оскільки ми не знаємо фактичних знань: у цьому полягає сила комп'ютерного моделювання. Дотримуйтесь:
Якби не було випадкових змін у роботі (встановіть cv=0
і повторіть код, щоб побачити це), розсіювач був би ідеальною діагональною лінією. Усі оцінки були б абсолютно точними. Таким чином, розсіяний тут розкид відображає цю варіацію.
Інколи оцінене значення досить далеко від фактичного значення. Наприклад, є одна точка поблизу (110, 160), де орієнтовна кваліфікація приблизно на 50% більша від фактичної. Це майже неминуче в будь-якій великій партії даних. Майте це на увазі, якщо кошториси будуть використовуватися на індивідуальній основі, наприклад, для оцінки робітників. В цілому ці оцінки можуть бути чудовими, але наскільки різниця в продуктивності праці обумовлена причинами, що не підлягають контролю будь-якої людини, то для деяких працівників оцінка буде помилковою: деякі занадто високі, а інші занадто низькі. І немає способу точно сказати, на кого це постраждало.
Ось чотири сюжети, згенеровані під час цього процесу.
Нарешті, зауважте, що цей метод регресії легко адаптується до контролю інших змінних, які, можливо, можуть бути пов'язані з груповою продуктивністю. Вони можуть включати розмір групи, тривалість кожного трудового зусилля, змінну часу, коефіцієнт для керівника кожної групи тощо. Просто включіть їх як додаткові змінні в регресію.