저는 38 개의 시험에서 학생의 순위 비율이 제 연구의 종속 변수입니다. 순위 비율은 (시험에서 학생의 순위 / 학생 수)에 의해 계산됩니다. 이 종속 변수는 분포가 거의 균일하며 일부 변수가 종속 변수에 미치는 영향을 추정하고 싶습니다.
어떤 회귀 접근법을 사용합니까?
저는 38 개의 시험에서 학생의 순위 비율이 제 연구의 종속 변수입니다. 순위 비율은 (시험에서 학생의 순위 / 학생 수)에 의해 계산됩니다. 이 종속 변수는 분포가 거의 균일하며 일부 변수가 종속 변수에 미치는 영향을 추정하고 싶습니다.
어떤 회귀 접근법을 사용합니까?
답변:
Stata를 사용하는 경우 다음 예를 살펴보십시오. http://www.ats.ucla.edu/stat/stata/faq/proportion.htm
이 웹 페이지에서 인용 한 내용은 다음과 같습니다.
"종속 변수가 비례 일 때 어떻게 회귀를 하는가?
비율 데이터에는 0과 1 사이의 값이 있습니다. 당연히 예측 된 값도 0과 1 사이에있는 것이 좋습니다. 이를 달성하는 한 가지 방법은 로짓 링크와 이항 군과 함께 일반 선형 모형 (glm)을 사용하는 것입니다. 우리는 분포 표준을 잘못 지정했을 때 특히 유용한 강력한 표준 오류를 얻기 위해 glm 모델에 강력한 옵션을 포함시킬 것입니다. "
신중하게 해석하면 회귀 결과에 일부 값이 제한 될 수 있습니다. 피할 수없는 형태의 변동으로 인해 계수 추정치가 실질적으로 0으로 줄어 듭니다. 보다 적절한 방식으로 변형을 처리하는 더 나은 모델이 필요합니다.
(최대 우도 모델을 구성 할 수 있지만 다차원 적분의 수치 평가가 필요한 계산으로 인해 실행 불가능할 수 있습니다. 치수의 수는 수업에 등록한 학생의 수와 같습니다.)
직감에 대한 이야기로,이 38 개의 시험이 200 명의 대학생이 등록 된 소규모 학교에서 한 학기 동안 38 개의 개별 코스에서 제공되었다고 상상해보십시오. 현실적인 상황에서 학생들은 다양한 능력과 경험을 갖게 될 것입니다. 이러한 능력과 경험에 대한 대리 척도로서 SAT 수학 및 언어 시험 점수와 대학 1 년 (1-4)에 대한 점수를받을 수 있습니다.
일반적으로 학생들은 자신의 능력과 관심에 따라 과정에 등록합니다. 신입생은 입문 과정을 수강하며 입문 과정은 주로 신입생이 채 웁니다. 상급생과 유능한 신입생 및 2 학년 학생들은 고급 및 대학원 수준의 과정을 수강합니다. 이 선택은 학생들을 부분적으로 구성하여 모든 수업 내 학생의 타고난 능력이 일반적으로 학교 전체의 능력 확산보다 더 균일합니다.
따라서 가장 유능한 학생들은 자신이 등록하기 어려운 어려운 고급 수업의 바닥 근처에서 점수를 얻는 반면, 가장 유능한 학생들은 자신이 수강하기 쉬운 수업의 최상위 근처에서 점수를 얻을 수 있습니다. 이것은 시험 등급을 학생과 수업의 속성과 직접 관련시키려는 직접적인 시도를 혼란스럽게 할 수 있습니다.
인덱스는 학생들 학생의 특성하자 내가 벡터에 의해 부여는 X 전을 . 색인으로 클래스 J 와 클래스의 속성하자 J는 벡터에 의해 주어 Z의 J . j 클래스에 등록한 학생 세트 는 A j 입니다.
각 학생의 "힘"을 가정 그 속성의 함수 플러스뿐만 아니라 제로 평균있을 수 있습니다 어떤 임의의 값입니다 :
우리는 수업에 등록한 각 학생의 힘에 독립적 인 임의의 값을 추가하고 이들을 순위로 변환하여 클래스 의 시험을 모델링합니다 . 학생 i 가 클래스 j에 등록 된 경우 상대 순위 r i , j 는 정렬 된 값 배열에서의 위치에 따라 결정됩니다.
이 위치 는 전체 클래스 등록보다 하나 더 나눠 종속 변수 인 백분율 순위를 제공합니다.
나는 회귀 결과가 임의의 (관찰되지 않은) 값 및 δ i , j 의 크기와 구조에 의존한다고 주장한다 . 결과는 학생들이 어떻게 수업에 등록했는지에 달려 있습니다. 이 직관적으로 명백하지만, 그렇게 명확하지 않다 무엇을해야 - 이론적으로 분석하기 어려운 나타납니다 - 인 방식 과 얼마나 많은 관찰되지 값과 클래스 구조가 회귀에 영향을 미칩니다.
너무 많은 노력없이이 상황 을 시뮬레이션 하여 일부 샘플 데이터를 생성 및 분석 할 수 있습니다 . 시뮬레이션의 한 가지 장점은 실제로 관찰 할 수없는 학생들 의 진정한 강점을 통합 할 수 있다는 것 입니다. 또 하나는 클래스 할당뿐만 아니라 관찰되지 않은 값의 일반적인 크기를 변경할 수 있다는 것입니다. 이것은 회귀와 같은 제안 된 분석 방법을 평가하기위한 "샌드 박스"를 제공합니다.
시작하기 위해 재현 가능한 결과에 대한 난수 생성기를 설정하고 문제의 크기를 지정하겠습니다. 내가 사용하는 R것이 사람에게 사용할 수 있기 때문이다.
set.seed(17)
n.pop <- 200 # Number of students
n.classes <- 38 # Number of classes
courseload <- 4.5 # Expected number of classes per student
n.classes
classes <- data.frame(cbind(
math <- runif(n.classes),
rbeta(n.classes, shape1=(verbal <- (1-math)*5), shape2=5-verbal),
runif(n.classes, min=0, max=7),
rgamma(n.classes, 10, 10)))
rm(math, verbal)
colnames(classes) <- c("math.dif", "verbal.dif", "level", "ease")
classes <- classes[order(classes$math.dif + classes$verbal.dif + classes$level), ]
row.names(classes) <- 1:n.classes
plot(classes, main="Classes")
학생들은 4 년 동안 퍼져 나가며 그들의 속성에 임의의 가치를 부여합니다. 이 속성들 사이에는 상관 관계가 없습니다.
students <- data.frame(cbind(
as.factor(ceiling(runif(n.pop, max=4))),
sapply(rnorm(n.pop, mean=60, sd=10), function(x) 10*median(c(20, 80, floor(x)))),
sapply(rnorm(n.pop, mean=55, sd=10), function(x) 10*median(c(00, 80, floor(x)))),
rnorm(n.pop)
))
colnames(students) <- c("year", "math", "verbal", "ability")
plot(students, main="Students")
betabeta
beta <- list(year.1=0, year.2=1, year.3=3, year.4=4, math=1/100, verbal=1/100, ability=2, sigma=0.01)
students$strength <- (students$year==1)*beta$year.1 +
(students$year==2)*beta$year.2 +
(students$year==3)*beta$year.3 +
(students$year==4)*beta$year.4 +
students$math*beta$math +
students$verbal*beta$verbal +
students$ability*beta$ability
students <- students[order(students$strength), ]
row.names(students) <- 1:n.pop
students$abilitybeta$abilitybeta$sigmaease
classesspreadassignments <-...
pick.classes <- function(i, k, spread) {
# i is student strength rank
# k is number to pick
p <- pmin(0.05, diff(pbeta(0:n.classes/n.classes, i/spread, (1+n.pop-i)/spread)))
sample(1:n.classes, k, prob=p)
}
students$n.classes <- floor(1/2 + 2 * rbeta(n.pop,10,10) * courseload)
assignments <- lapply(1:n.pop, function(i) pick.classes(i, students$n.classes[i], spread=1))
enrolment <- function(k) length(seq(1, n.pop)[sapply(assignments, function(x) !is.na(match(k, x)))])
classes$size <- sapply(1:n.classes, enrolment)
classes$variation <- by(data, data$Class, function(x) diff(range(x$strength)))
이 단계에서 수행 한 작업의 예는 아래 그림을 참조하십시오.
exam.do <- function(k) {
s <- seq(1, n.pop)[sapply(assignments, function(x) !is.na(match(k, x)))]
e <- classes$ease[k]
rv <- cbind(rep(k, length(s)), s, order(rnorm(length(s), students$strength[s], sd=e*beta$sigma*classes$variation[k])))
rv <- cbind(rv, rv[,3] / (length(s)+1))
dimnames(rv) <- list(NULL, c("Class", "Student", "Rank", "Prank"))
rv
}
data.raw <- do.call(rbind, sapply(1:n.classes, exam.do))
이러한 원시 데이터에 학생 및 클래스 속성을 첨부하여 분석에 적합한 데이터 세트를 작성하십시오.
data <- merge(data.raw, classes, by.x="Class", by.y="row.names")
data <- merge(data, students, by.x="Student", by.y="row.names")
임의의 데이터 샘플을 검사하여 방향을 정해 봅시다.
> data[sort(sample(1:dim(data)[1], 5)),]
Row Student Class Rank Prank math.dif verbal.dif level ease Size year math verbal ability strength n.classes
118 28 1 22 0.957 0.77997 6.95e-02 0.0523 1.032 22 2 590 380 0.576 16.9 4
248 55 5 24 0.889 0.96838 1.32e-07 0.5217 0.956 26 3 460 520 -2.163 19.0 5
278 62 6 22 0.917 0.15505 9.54e-01 0.4112 0.497 23 2 640 510 -0.673 19.7 4
400 89 10 16 0.800 0.00227 1.00e+00 1.3880 0.579 19 1 800 350 0.598 21.6 5
806 182 35 18 0.692 0.88116 5.44e-02 6.1747 0.800 25 4 610 580 0.776 30.7 4
예를 들어, 레코드 118은 학생 # 28이 클래스 # 1에 등록하고 0.957의 백분율 순위로 시험에서 22 위 (하단부터)를 기록했다고 말합니다. 이 클래스의 전체 난이도는 0.0523 (매우 쉬움)입니다. 총 22 명의 학생들이 등록했습니다. 이 학생은 수학 590 개, 언어 SAT 380 개로 2 학년입니다. 그들의 전반적인 학문적 강점은 16.9입니다. 그들은 당시 4 개의 수업에 등록했습니다.
이 데이터 세트는 문제의 설명과 일치합니다. 예를 들어, 단일 등급에 대한 비율 순위는 불연속 분포가 있기 때문에 전체 데이터 세트에 대해 필요하므로 비율 순위는 거의 균일합니다.
의 계수로 인해이 beta모델은 시험 점수와이 데이터 세트에 표시된 변수 사이 의 강력한 연관성 을 가정했습니다 . 그러나 회귀는 무엇을 보여줍니까? 자신의 능력과 관련된 모든 관찰 가능한 학생 특성과 수업 난이도의 지표에 대한 비율 순위의 물류를 회귀합시다.
logistic <- function(p) log(p / (1-p))
fit <- lm(logistic(Prank) ~ as.factor(year) + math + verbal + level, data=data)
summary(fit)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.577788 0.421579 -6.11 1.5e-09 ***
as.factor(year)2 0.467846 0.150670 3.11 0.0020 **
as.factor(year)3 0.984671 0.164614 5.98 3.2e-09 ***
as.factor(year)4 1.109897 0.171704 6.46 1.7e-10 ***
math 0.002599 0.000538 4.83 1.6e-06 ***
verbal 0.002130 0.000514 4.14 3.8e-05 ***
level -0.208495 0.036365 -5.73 1.4e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.48 on 883 degrees of freedom
Multiple R-squared: 0.0661, Adjusted R-squared: 0.0598
F-statistic: 10.4 on 6 and 883 DF, p-value: 3.51e-11
진단 플롯 ( plot(fit))은 빠르다. 잔차는 균등하고 아름답다 (약간의 꼬리는 있지만 문제 없음). 특이 치 없음; 어떤 관측에도 영향을 미치지 않습니다.
명시 적으로 지정되지 않은 계수를 나타냅니다).
levellevel
그런데 회귀 분석에서 변환되지 않은 백분율 순위를 사용한다고해서 아래에보고 된 결과가 질적으로 변경되지는 않습니다.
spread
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.902006 0.349924 -14.01 < 2e-16 ***
as.factor(year)2 0.605444 0.130355 4.64 3.9e-06 ***
as.factor(year)3 1.707590 0.134649 12.68 < 2e-16 ***
as.factor(year)4 1.926272 0.136595 14.10 < 2e-16 ***
math 0.004667 0.000448 10.41 < 2e-16 ***
verbal 0.004019 0.000434 9.25 < 2e-16 ***
level -0.299475 0.026415 -11.34 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.3 on 883 degrees of freedom
Multiple R-squared: 0.282, Adjusted R-squared: 0.277
F-statistic: 57.9 on 6 and 883 DF, p-value: <2e-16

spreadspread1
이번에는 R 제곱이 훨씬 향상되었습니다 (아직 크지는 않지만). 그러나 모든 계수는 20-100 % 증가했습니다. 이 표는 이들을 몇 가지 추가 시뮬레이션과 비교합니다.
Simulation Intercept Year.2 Year.3 Year.4 Math Verbal Level R^2
Beta * 1.0 3.0 4.0 .010 .010 * *
Spread=1 -2.6 0.5 1.0 1.1 .003 .002 -0.21 7%
Spread=38 -4.9 0.6 1.7 1.9 .005 .004 -0.30 25%
Ability=1 -8.3 0.9 2.6 3.3 .008 .008 -0.63 58%
No error -11.2 1.1 3.3 4.4 .011 .011 -0.09 88%
spreadabilityabilitysigmalevel
이 빠른 분석은 회귀 분석이 적어도 여기에서 수행 된 것처럼 불가피한 형태의 계수와 계수를 혼동 할 것임을 보여줍니다 . 또한, 계수는 또한 학생들이 수업에 어떻게 배분되는지에 달려 있습니다. 여기에서와 같이 회귀에 독립 변수 중 클래스 속성을 포함시켜 부분적으로 수용 할 수 있지만 학생 분포의 영향은 사라지지 않습니다.
실제 학생 성취도에 대한 예측 성이 부족하고, 학생 학습 및 시험에 대한 실제 성과의 변동으로 인해 계수 추정치가 0으로 줄어 듭니다. 이들은 상대적으로 균일 한 것으로 보이며 상대 계수가 여전히 의미가있을 수 있음을 나타냅니다.
이 경우 완벽한 모델은 입력 값 (공변량에 상관없이)을 출력값 (수업에서 학생의 순위)에 매핑합니다. 이것을 생각하는 또 다른 방법은 먼저 점수에 매핑 한 다음 해당 점수를 순위에 매핑하는 것입니다. 지금은 오류를 무시하겠습니다.
이것은 일반화 된 선형 모델의 기능적 형태와 매우 유사합니다. 이것이 @Mike Anderson이 로지스틱 회귀 접근법을 제안한 이유라고 생각합니다. 시험 점수가 논리적으로 분포 된 경우 사용할 링크 함수는 로짓이됩니다 (반대되는 것은 우리가 신경 쓰는 누적 밀도 함수입니다). 마찬가지로, 점수가 정규 분포를 따르는 경우 프로 빗 기능이 링크 기능이됩니다.
회귀 분석에서 순위를 추정 할 수있는 유일한 방법은 "내 데이터가 X로 분포되어 있으므로이 시점은 34 번째 백분위 수입니다"라고 말하는 것입니다. 그렇지 않으면, 시험 점수가 2 점 증가하여 랭크 측면에서 어떤 의미가 있는지 어떻게 알 수 있습니까? 주의 할 점은 링크 기능을 선택하기 위해 해당 분포를 추정해야한다는 것입니다 (특정한 기능 형태로 인해 삶이 훨씬 쉬워집니다). 또한,이 모델은 "38 등급 중 6 위를 차지했습니다."라고 말하지 않고 "시험 점수가 우리가 생각하는 방식으로 분포되면 점수가 15 번째 백분위 수에 도달하게됩니다."