David Harris는 큰 대답 을했지만 질문을 계속 편집 한 후 솔루션의 세부 정보를 보는 것이 도움이 될 것입니다. 다음 분석의 주요 내용은 다음과 같습니다.
이를 수행하기 위해 솔루션의 정확성을 평가할 수 있도록 지정된 수식을 사용하여 현실적인 데이터 를 만들어 보겠습니다 . 이것은 다음과 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)
. 그렇게 가정하자.
전술 한 설명에서 암시하는 하나의 미묘한 점은 수행되는 작업의 변화가 부가적인 것이 아니라 곱셈이라는 것이다. 이는 현실적입니다. 대규모 근로자 그룹의 생산량 변동은 절대 규모로 소규모 그룹의 변동량보다 클 것입니다. 따라서 일반 최소 제곱보다는 가중치 최소 최소 제곱 을 사용하여 더 나은 추정치를 얻을 수 있습니다. 이 특정 모델 에 사용하기 에 가장 적합한 가중치 는 작업량의 역수입니다. (일부 작업량이 0 인 경우 소량을 추가하여 0으로 나누지 않도록하십시오.)
fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)
이 과정은 1-2 초 밖에 걸리지 않습니다.
계속하기 전에 적합성 진단 테스트를 수행해야합니다. 이것에 대해 논의하면 여기에 너무 멀어 지지만 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 명의 근로자가 참여하면서 이러한 표준화 된 차이점 중 일부가 확대 될 것으로 예상됩니다.삼 심지어 4 멀리 떨어져 0. 이것이 바로 여기에 해당합니다. 히스토그램은 원하는만큼 아름답습니다. (물론 이것은 좋은 일입니다. 결국 시뮬레이션 된 데이터입니다. 그러나 대칭은 가중치가 올바르게 작업을 수행하고 있음을 확인합니다. 잘못된 가중치를 사용하면 비대칭 히스토그램을 만드는 경향이 있습니다.)
산점도 (그림의 오른쪽 아래 패널)는 예상 능력을 실제 능력과 직접 비교합니다. 물론 실제 실력을 모르기 때문에 실제로는 사용할 수 없습니다. 여기에는 컴퓨터 시뮬레이션의 힘이 있습니다. 관찰 :
작업에 임의의 변형이 없었 으면 ( cv=0
코드를 설정 한 후 다시 실행하여) 산점도는 완전한 대각선이됩니다. 모든 추정치는 완벽하게 정확합니다. 따라서 여기에 보이는 산란은 그 변화를 반영합니다.
때때로, 추정값이 실제 값과 거리가 멀다. 예를 들어, 예상 숙련도가 실제 숙련보다 약 50 % 더 큰 (110, 160) 근처에 한 지점이 있습니다. 이것은 대량의 데이터에서 거의 불가피합니다. 추정치가 근로자 평가와 같이 개별적 으로 사용될 경우이를 명심하십시오 . 전체적으로 이러한 추정치는 우수 할 수 있지만 작업 생산성의 변동이 개인의 통제 범위를 벗어난 원인으로 인한 정도까지는 일부 근로자의 경우 추정치가 잘못 될 수 있습니다. 누가 영향을 받는지 정확하게 알 수있는 방법이 없습니다.
이 과정에서 생성 된 4 가지 플롯이 있습니다.
마지막으로,이 회귀 방법은 그룹 생산성과 관련이있을 수있는 다른 변수를 제어하는 데 쉽게 적용 할 수 있습니다. 여기에는 그룹 규모, 각 작업 기간, 시간 변수, 각 그룹 관리자의 요인 등이 포함될 수 있습니다. 회귀 분석에 추가 변수로 포함 시키면됩니다.