डेविड हैरिस ने एक शानदार उत्तर प्रदान किया है , लेकिन चूंकि प्रश्न संपादित किया जाना जारी है, शायद यह उसके समाधान का विवरण देखने में मदद करेगा। निम्नलिखित विश्लेषण की मुख्य विशेषताएं हैं:
भारित कम से कम वर्ग शायद सामान्य से कम वर्गों की तुलना में अधिक उपयुक्त है।
क्योंकि अनुमान किसी भी व्यक्ति के नियंत्रण से परे उत्पादकता में भिन्नता को दर्शा सकते हैं, व्यक्तिगत श्रमिकों का मूल्यांकन करने के लिए उनका उपयोग करने के बारे में सतर्क रहें।
इसे पूरा करने के लिए, आइए निर्दिष्ट सूत्रों का उपयोग करके कुछ यथार्थवादी डेटा बनाएं ताकि हम समाधान की सटीकता का मूल्यांकन कर सकें। इसके साथ किया जाता है 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
एक विशिष्ट आनुपातिक भिन्नता है; जैसे , द0.10 यहाँ दिया गया है एक विशिष्ट 10% भिन्नता (जो कुछ मामलों में 30% से अधिक हो सकती है) से मेल खाती है।
भिन्न कार्य-क्षमता वाले लोगों का कार्यबल बनाएं। कंप्यूटिंग के 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
की 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 और सममित रूप से चारों ओर वितरित किया जाए 0। हालांकि 1000 श्रमिकों को शामिल किया गया है, हम पूरी तरह से इनमें से कुछ मानकीकृत अंतरों को देखने की उम्मीद करते हैं3 और भी 4 से दूर 0। यह वास्तव में यहाँ मामला है: हिस्टोग्राम उतना ही सुंदर है जितना कोई उम्मीद कर सकता है। (एक बात यह अच्छी हो सकती है: ये नकली डेटा हैं, आखिरकार। लेकिन समरूपता पुष्टि करती है कि वज़न सही ढंग से अपना काम कर रहा है। गलत वज़न का उपयोग करने से एक असममित हिस्टोग्राम बन जाएगा।)
स्कैप्लॉट (आकृति का निचला दायां पैनल) सीधे वास्तविक लोगों की अनुमानित दक्षता की तुलना करता है। बेशक, यह वास्तविकता में उपलब्ध नहीं होगा, क्योंकि हम वास्तविक दक्षताओं को नहीं जानते हैं: इसमें कंप्यूटर सिमुलेशन की शक्ति निहित है। का निरीक्षण करें:
यदि कार्य में कोई यादृच्छिक भिन्नता नहीं थी ( cv=0
इसे देखने के लिए कोड सेट करें और फिर से चलाएँ), तो स्कैप्लेट एक पूर्ण विकर्ण रेखा होगी। सभी अनुमान पूरी तरह से सही होंगे। इस प्रकार, यहाँ देखा गया बिखराव उस भिन्नता को दर्शाता है।
कभी-कभी, एक अनुमानित मूल्य वास्तविक मूल्य से बहुत दूर होता है। उदाहरण के लिए, वहाँ एक बिंदु (110, 160) के पास है जहाँ अनुमानित प्रवीणता वास्तविक प्रवीणता से लगभग 50% अधिक है। डेटा के किसी भी बड़े बैच में यह लगभग अपरिहार्य है। इसे ध्यान में रखें यदि अनुमानों का उपयोग व्यक्तिगत आधार पर किया जाएगा , जैसे श्रमिकों के मूल्यांकन के लिए। पूरे तौर पर ये अनुमान उत्कृष्ट हो सकते हैं, लेकिन किसी व्यक्ति के नियंत्रण से परे कारणों की वजह से कार्य उत्पादकता में भिन्नता है, तो कुछ श्रमिकों के लिए अनुमान गलत होंगे: कुछ बहुत अधिक, कुछ बहुत कम। और यह बताने का कोई तरीका नहीं है कि कौन प्रभावित हुआ है।
यहां इस प्रक्रिया के दौरान उत्पन्न चार भूखंड हैं।
अंत में, ध्यान दें कि इस प्रतिगमन विधि को आसानी से अन्य चर के लिए नियंत्रित करने के लिए अनुकूलित किया जाता है, जो संभवतः समूह उत्पादकता के साथ जुड़ा हो सकता है। इनमें समूह आकार, प्रत्येक कार्य प्रयास की अवधि, एक समय चर, प्रत्येक समूह के प्रबंधक के लिए एक कारक और इसी तरह शामिल हो सकता है। बस उन्हें प्रतिगमन में अतिरिक्त चर के रूप में शामिल करें।