회귀 분석의 종속 변수로 백분율 추정


13

저는 38 개의 시험에서 학생의 순위 비율이 제 연구의 종속 변수입니다. 순위 비율은 (시험에서 학생의 순위 / 학생 수)에 의해 계산됩니다. 이 종속 변수는 분포가 거의 균일하며 일부 변수가 종속 변수에 미치는 영향을 추정하고 싶습니다.

어떤 회귀 접근법을 사용합니까?


2
정규 (OLS) 회귀 분석은 종속 변수의 분포에 대한 가정을하지 않으며 모형의 오차 (잔차로 추정 된) 분포에 대한 가정을합니다. 시험 당 학생 수가 다른 경우 OLS 회귀로 시작하여 가정을 확인할 수 있습니다.
Peter Flom-Monica Monica 복원

2
@Peter는 좋은 제안이지만 OLS 가정에 대한 미묘하지만 중요한 위반에 대해 우려하고 있습니다. 시험에서 학생의 순위는 시험을 치르는 다른 모든 학생들의 속성에 따라 달라집니다. 이 상호 의존성은 OLS의 (루틴) 응용 프로그램에 의해 캡처되지 않습니다.
whuber

여기서 무슨 일이 일어나고 있는지 알 수있는 또 다른 방법은이 문제의 가장 단순한 예를 고려하는 것입니다. 여기서 각 "시험"에는 정확히 두 명의 학생이 포함됩니다. 종속 변수는 어느 학생이 더 잘했는지 나타냅니다. 각 시험을 컨테스트로 생각하면 토너먼트를 개최하는 것과 같습니다. 실제로이 질문은 일부 설명 변수 측면에서 각 플레이어의 "강도"에 대한 공식을 제시하고자합니다.
whuber

당신은 맞습니다 @whuber. 이것을 해결하는 방법? 나는 IRT 모델이 그렇게 할 것이라고 생각하지만, 그것들을 연구 한 지 오래되었습니다.
Peter Flom-Monica Monica 복원

@ whuber IRT는 가능성이 있다고 생각합니다. 예를 들어 프로 빗 (또는 로짓). 그러나 백분율 순위를 제한된 연속 변수 (마이크가 제안한 로지스틱 회귀와 같은)로 간주하는 것도 가능합니다.이 순서 는 유효한 근사치 이며, 정렬 된 프로 빗은 문제의 직선 모델입니다. 물류의 장점은 parsimony입니다. 학생들의 상관 관계를 설명하기 위해 화이트 또는 샌드위치 분산 추정기가 구현 될 수 있습니다. 나는 샘플에 여러 명의 학생 (세로)에 대한 38 가지 시험이 있으므로 이것이 가능해야한다는 것을 이해했습니다.
JDav

답변:


3

Stata를 사용하는 경우 다음 예를 살펴보십시오. http://www.ats.ucla.edu/stat/stata/faq/proportion.htm

이 웹 페이지에서 인용 한 내용은 다음과 같습니다.

"종속 변수가 비례 일 때 어떻게 회귀를 하는가?

비율 데이터에는 0과 1 사이의 값이 있습니다. 당연히 예측 된 값도 0과 1 사이에있는 것이 좋습니다. 이를 달성하는 한 가지 방법은 로짓 링크와 이항 군과 함께 일반 선형 모형 (glm)을 사용하는 것입니다. 우리는 분포 표준을 잘못 지정했을 때 특히 유용한 강력한 표준 오류를 얻기 위해 glm 모델에 강력한 옵션을 포함시킬 것입니다. "


2
그것은 좋으며 다른 상황에서는 훌륭한 조언이 될 것입니다. 그러나 glm을 사용하면 내 대답에서 식별 된 문제를 해결할 수 없습니다.
whuber


9

개요

신중하게 해석하면 회귀 결과에 일부 값이 제한 될 수 있습니다. 피할 수없는 형태의 변동으로 인해 계수 추정치가 실질적으로 0으로 줄어 듭니다. 보다 적절한 방식으로 변형을 처리하는 더 나은 모델이 필요합니다.

(최대 우도 모델을 구성 할 수 있지만 다차원 적분의 수치 평가가 필요한 계산으로 인해 실행 불가능할 수 있습니다. 치수의 수는 수업에 등록한 학생의 수와 같습니다.)

소개

직감에 대한 이야기로,이 38 개의 시험이 200 명의 대학생이 등록 된 소규모 학교에서 한 학기 동안 38 개의 개별 코스에서 제공되었다고 상상해보십시오. 현실적인 상황에서 학생들은 다양한 능력과 경험을 갖게 될 것입니다. 이러한 능력과 경험에 대한 대리 척도로서 SAT 수학 및 언어 시험 점수와 대학 1 년 (1-4)에 대한 점수를받을 수 있습니다.

일반적으로 학생들은 자신의 능력과 관심에 따라 과정에 등록합니다. 신입생은 입문 과정을 수강하며 입문 과정은 주로 신입생이 채 웁니다. 상급생과 유능한 신입생 및 2 학년 학생들은 고급 및 대학원 수준의 과정을 수강합니다. 이 선택은 학생들을 부분적으로 구성하여 모든 수업 내 학생의 타고난 능력이 일반적으로 학교 전체의 능력 확산보다 더 균일합니다.

따라서 가장 유능한 학생들은 자신이 등록하기 어려운 어려운 고급 수업의 바닥 근처에서 점수를 얻는 반면, 가장 유능한 학생들은 자신이 수강하기 쉬운 수업의 최상위 근처에서 점수를 얻을 수 있습니다. 이것은 시험 등급을 학생과 수업의 속성과 직접 관련시키려는 직접적인 시도를 혼란스럽게 할 수 있습니다.

분석

인덱스는 학생들 학생의 특성하자 내가 벡터에 의해 부여는 X 전을 . 색인으로 클래스 J 와 클래스의 속성하자 J는 벡터에 의해 주어 Z의 J . j 클래스에 등록한 학생 세트 는 A j 입니다.iixijjzjjAj

각 학생의 "힘"을 가정 그 속성의 함수 플러스뿐만 아니라 제로 평균있을 수 있습니다 어떤 임의의 값입니다 :si

si=f(xi,β)+εi.

우리는 수업에 등록한 각 학생의 힘에 독립적 인 임의의 값을 추가하고 이들을 순위로 변환하여 클래스 의 시험을 모델링합니다 . 학생 i 가 클래스 j에 등록 된 경우 상대 순위 r i , j 는 정렬 된 값 배열에서의 위치에 따라 결정됩니다.jijri,j

(sk+δk,j,kAj).

이 위치 는 전체 클래스 등록보다 하나 더 나눠 종속 변수 인 백분율 순위를 제공합니다.ri,j

pi,j=ri,j1+|Aj|.

나는 회귀 결과가 임의의 (관찰되지 않은) 값 δ i , j 의 크기와 구조에 의존한다고 주장한다 . εiδ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δi,jj

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")

εibetabeta

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δi,j.01.2

classesspreadassignments <-...0

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)))

이 단계에서 수행 한 작업의 예는 아래 그림을 참조하십시오.

n1/(n+1)n/(n+1)1/(n+1)01

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))은 빠르다. 잔차는 균등하고 아름답다 (약간의 꼬리는 있지만 문제 없음). 특이 치 없음; 어떤 관측에도 영향을 미치지 않습니다.

3.5(9,1.6,3.4,3.9,0.009,0.007,0.7)(,1,3,4,0.010,0.010,) 명시 적으로 지정되지 않은 계수를 나타냅니다).

level07level

그런데 회귀 분석에서 변환되지 않은 백분율 순위를 사용한다고해서 아래에보고 된 결과가 질적으로 변경되지는 않습니다.

spread138

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

수업 배정도

spread38spread1

이번에는 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%

spread38ability21abilitysigma0εiδi,jlevel

이 빠른 분석은 회귀 분석이 적어도 여기에서 수행 된 것처럼 불가피한 형태의 계수와 계수를 혼동 할 것임을 보여줍니다 . 또한, 계수는 또한 학생들이 수업에 어떻게 배분되는지에 달려 있습니다. 여기에서와 같이 회귀에 독립 변수 중 클래스 속성을 포함시켜 부분적으로 수용 할 수 있지만 학생 분포의 영향은 사라지지 않습니다.

실제 학생 성취도에 대한 예측 성이 부족하고, 학생 학습 및 시험에 대한 실제 성과의 변동으로 인해 계수 추정치가 0으로 줄어 듭니다. 이들은 상대적으로 균일 한 것으로 보이며 상대 계수가 여전히 의미가있을 수 있음을 나타냅니다.


εivipijyijyij

시뮬레이션이 관찰되지 않은 능력과 SAT 및 다른 점수 간의 양의 상관 관계를 유지하는 경우 OLS 매개 변수가 오른쪽으로 편향 될 수 있습니까? 0쪽으로 끌어 당겼습니까?
JDav

+1, 저는 통계적 아이디어를 다루는 데 도움을주기 위해 시뮬레이션을 사용하는 것을 좋아합니다.
gung-모니 티 복원

3

yij

μij

ln(yij/(1yij))=μij+eij+vi

vieijeijμij

(이것은 나의 편견 경험, 의견 및 비평가의 아이디어 일뿐입니다.)

μijvi


1
로지스틱 변환을 사용하는 아이디어는 좋은 것이지만 이러한 회귀 모델에는 문제가 있습니다 (내 대답에 설명되어 있음).
whuber

μij

2

ln(p1p)


로지스틱 회귀는 이진 반응 변수 에만 적용 되며 여기에는 해당되지 않습니다. 계급 비율의 로짓에 대한 일반적인 회귀를 제안 하고 있습니까?
whuber

1
여기서 whuber가 제공 한 이유로 로지스틱 회귀 분석이나 일반 선형 회귀 분석이 적합하지 않습니다. 또한 모델에 가우스 잔차가있는 경우 어떻게 반응에 대해 거의 균일 한 분포로 변환되는지 알 수 없습니다. 순위에서 개별 학생 간의 의존성은 내가 분석에 가장 중요하다고 생각합니다.
Michael R. Chernick

ln(p/1p)=βxi+uipi

@J Dav 당신이 묘사하는 의미에서 "논리 회귀"를 사용하는 어떤 참조도 찾을 수 없습니다.
whuber

1
그는 조건부 가우스 분포와 평균에 대한 로짓 링크를 사용하여 일반 선형 모형을 수행 할 것이라고 생각합니다. (적어도 나는 그것이 그가 의도 한 것이라고 가정 할 것입니다.)
Shea Parkes

0

이 경우 완벽한 모델은 입력 값 (공변량에 상관없이)을 출력값 (수업에서 학생의 순위)에 매핑합니다. 이것을 생각하는 또 다른 방법은 먼저 점수에 매핑 한 다음 해당 점수를 순위에 매핑하는 것입니다. 지금은 오류를 무시하겠습니다.

y=βx

r=R(y)

RRyR(y)

이것은 일반화 된 선형 모델의 기능적 형태와 매우 유사합니다. 이것이 @Mike Anderson이 로지스틱 회귀 접근법을 제안한 이유라고 생각합니다. 시험 점수가 논리적으로 분포 된 경우 사용할 링크 함수는 로짓이됩니다 (반대되는 것은 우리가 신경 쓰는 누적 밀도 함수입니다). 마찬가지로, 점수가 정규 분포를 따르는 경우 프로 빗 기능이 링크 기능이됩니다.

회귀 분석에서 순위를 추정 할 수있는 유일한 방법은 "내 데이터가 X로 분포되어 있으므로이 시점은 34 번째 백분위 수입니다"라고 말하는 것입니다. 그렇지 않으면, 시험 점수가 2 점 증가하여 랭크 측면에서 어떤 의미가 있는지 어떻게 알 수 있습니까? 주의 할 점은 링크 기능을 선택하기 위해 해당 분포를 추정해야한다는 것입니다 (특정한 기능 형태로 인해 삶이 ​​훨씬 쉬워집니다). 또한,이 모델은 "38 등급 중 6 위를 차지했습니다."라고 말하지 않고 "시험 점수가 우리가 생각하는 방식으로 분포되면 점수가 15 번째 백분위 수에 도달하게됩니다."

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.