Bradley-Terry Model: paired comparison models
동기 세상에는 비교할 것이 많습니다. 여러분에게 3가지 옵션이 주어져 있다면 전부 세 번 비교를 할 수 있습니다. 예를 들어, 사과, 바나나, 파인애플 중에서 무엇을 더 좋아하는지 물어볼 수 있습니다. 사과를 A, 바나나를 B, 파인애플을 C라고 하면 A 와 B B 와 C A 와 C 이렇게 비교할 수 있습니다. 비교는 어렵지 않지만, 만약 여러분이 채식을 좋아하는지 육식을 좋아하는지에 따라 비교의 결과가 다른지 알아보려면 어떠한 방법을 써야 할까요? Bradley-Terry의 로그선형모델(Log-Linear Bradley-Terry model, LLBT Model)을 사용하면 답을 얻을 수 있습니다. Paired-comparison 분석 방법은 Categorical data analysis의 일종으로 연구에 응용할 수 있는 여지가 많은 분석 방법입니다. Worth Parameter 우선 worth parameter에 대해 설명을 해야겠습니다. 위의 식은 객체 j를 객체 k보다 좋아할 확률을 계산하는 함수를 보여줍니다. 이때 계산에 사용되는 파이를 worth parameter라고 합니다. worth parameter가 주어져 있다면 선호하는 확률을 계산할 수 있다는 의미입니다. 예를 들어 j의 worth parameter가 7이고, k의 worth parameter가 3이리면 j를 k보다 좋아하는 확률은 0.7(=7/(7+3))입니다. Design Structure LLBT에 관련된 자세한 연구는 Fienberg & Larntz (1976)이나 Dittrich et al. (1998)을 참조하시고... 여기서는 간단히 데이터를 정리해서 {prefmod} 패키지로 LLBT를 사용하는 방법에 초점을 맞추겠습니다. 우선 Response는 결과값을 기록하는 방법입니다. 비교의 앞쪽을 선호하면 1, 뒤쪽을 선호하면 -1이라고 기록했습니다. 미리 설명하지만 {prefmod}에서는 앞쪽을 선호하면 1,
교수님 오늘 수업해주셨던 내용중에 {car:ncvTest}가 glm객체에서는 실행되지 않는 것 같습니다.
답글삭제(Error in ncvTest.glm(fit) : requires lm object)
{car.ncvTest}말고 분산 동질성 검사를 할 수 있는 다른 함수가 있는지요?
또 http://www.ats.ucla.edu/stat/r/dae/logit.htm 여기에 따르면, logistic regression 회귀진단은 OLS와 다르다고 하는데, 어떤 부분이 다르고 R에서는 어떻게 할 수 있는지 궁금합니다.
제가 된다고 했던가요... ncvTest() 도 glm 객체를 받기는 하지만 (ncvTest.glm()이 있다는 의미) 그냥 에러 토하고 실행 종료될 것입니다. GLM에서는 잔차 구조에 대한 가정만 잘 세우면 되고, 선형성 가정은 만족시켜야 합니다. Breusch-Pagan test를 수행할 이유는 없답니다. 분산동질보다는 분산안정화라고 이야기하지요. logit regression 역시 GLM의 일종이라서 다음 가정을 만족하면 됩니다: independence of each data points; correct distribution of the residuals; correct specification of the variance structure; linear relationship between response and predictors.
삭제교수님 marginal r-squared와 conditional r-squared가 뭔가요? 뭐가 다른가요?
삭제Mix model? Marginal R^2는 fixed effect과 관련된 것이고 Conditional R^2는 mixed effect과 random effect을 함께 고려한 것입니다.
삭제참고로 {lme4} 패키지의 lmer()의 객체를 받아서 R> mf <- lmer(...) 이렇게 되면 {MuMIn} 패키지의 r.squaredGLMM(mf)로 R2m (= marginal), R2c(= conditional)을 계산해 볼 수 있습니다.
삭제그럼 컨디셔널을 써야겠군요. {MuMIn} 패키지로 계산해 보았답니다. 감사합니다.
삭제답변 감사드립니다!
삭제덧글을 여기에 써야 하는군요.
답글삭제교수님 안녕하세요~ 항상 좋은 강의 감사드립니다.
답글삭제간단한 질문이 있는데, 어제 3번째 강의 슬라이드에 추가해 주신 부분 중에
OLS model and output 슬라이드에서
reg.model <- lm(log(wege) ~ school + female)로 만든 lm객체가 있는데, 어떤 데이터를 사용한건지 궁금합니다.
require(car) / require(mass) / require(faraway)를 하고, data()로 각 package에 포함되어 있는 data set을 봤는데 어떤 data set인지 잘 모르겠네요 ㅠㅠ
어제 말씀하신 plspm 책 좀 공유 부탁드립니다. minhui2@empas.com
답글삭제latent variable analysis 의 저자는 누구이죠?
삭제A. Alexander Beaujean. 2014. Latent Variable Modeling Using R -A Step-by-Step Guide-. Routledge.
삭제아마존에서 구매 가능합니다.
오~~ 고맙습니다.
삭제도서관에 신청했습니다. 3월 이후에 구매 가능하다네요.
삭제저희 방에서 구매한거 있으니 급히 필요하시면 보셔요 :)
삭제작성자가 댓글을 삭제했습니다.
답글삭제{plspm}에서 missing value를 어떻게 처리하는지 궁금합니다..
답글삭제다음과 같은 코드를 통해 기존에 갖고 있는 데이터에서 factor score를 뽑아내려고 했는데
이런 에러메세지가 뜹니다.
Error in if (w_dif < specs$tol || iter == specs$maxiter) break :
missing value where TRUE/FALSE needed
plspm함수의 scaling인자를 통해 missing value를 걸러내려 했는데, 잘 안되는 것 같습니다..
factor <- read.csv(file.choose(), header=T)
head(factor)
factor[factor==-1] <- NA
enha = rep(0, 14)
soci = rep(0, 14)
conf = rep(0, 14)
cop = rep(0, 14)
opl = rep(0, 14)
opf = rep(0, 14)
crea_choi = rep(0, 14)
unpop_choi = rep(0, 14)
avoid_sim = rep(0, 14)
self = rep(0, 14)
pcon = rep(0, 14)
pview = rep(0, 14)
acon = rep(0, 14)
aviewl = rep(0, 14)
path=rbind(enha, soci, conf, cop, opl, opf, crea_choi, unpop_choi, avoid_sim, self, pcon, pview, acon, aviewl)
blocks = list(1:5, 6:10, 11:15, 16:20, 21:26, 27:32, 33:36, 37:40, 41:44, 45:54, 55:59, 60:65, 66:70, 71:75)
scal = list(c(rep("NUM",5)),c(rep("NUM",5)),c(rep("NUM",5)),c(rep("NUM",5)),c(rep("NUM",6)),c(rep("NUM",6)),
c(rep("NUM",4)),c(rep("NUM",4)),c(rep("NUM",4)),c(rep("NUM",10)),c(rep("NUM",5)),c(rep("NUM",6)),
c(rep("NUM",5)),c(rep("NUM",5)))
modes = rep("A", 14)
factor.scores = plspm(factor2, path, blocks, modes = modes, scaling = scal)
R에서 엑셀의 vlookup함수 기능을 사용할 수 있는 패키지나 방법이 있는지도 궁금합니다!
답글삭제마지막 6회차 수업 ppt5페이지에 선 그래프 그리는 법 코드 중 오류가 있습니다.
답글삭제for문으로 tree의 종류를 구분해서 line을 그리는 코드입니다.
for (i in 1:ntrees) {
tree <- subset(Orange, Tree=i)
lines(tree$age, tree$circumference, type="b", lwd=1.5,
lty=linetype[i], col=colors[i], pch=plotchar[i])
}
두 번째 줄에 원래는 tree <- subset(Orange, Tree=i)로 되어 있는데, for문이 돌아가는데는 문제가 없으나, subset 함수가 제대로 돌아가지 않아 Orange의 tree별 5가지 subset이 만들어 지는 것이 아니라, Orange object자체가 그냥 나와버립니다.
두 번째 줄에 subset(Orange, Tree=i)을 subset(Orange,Tree==i)로 바꾸면 문제없이 돌아갑니다.
혹시나 연습삼아 해볼때 참고바랍니다 :)