R에서 다항 로짓 모형을 설정하고 추정하는 방법?


20

JMP에서 다항 로짓 모델을 실행하고 각 매개 변수 추정치에 대한 카이 제곱 p- 값과 AIC를 포함하는 결과를 얻었습니다. 이 모델에는 하나의 범주 형 결과와 7 개의 범주 형 설명 변수가 있습니다.

그런 다음 nnet 패키지 의 multinom함수를 사용하여 R에서 동일한 모델을 만들 것이라고 생각한 것을 맞았습니다 .

코드는 기본적으로 다음과 같습니다.

fit1 <- multinom(y ~ x1+x2+...xn,data=mydata);
summary(fit1);

그러나 두 가지 결과가 다릅니다. JMP에서 AIC는 2923.21이고 nnet::multinomAIC는 3116.588입니다.

내 그래서 첫 번째 질문이 있습니다 : 모델의 잘못 중 하나입니다?

두 번째는 JMP가 필요한 각 모수 추정치에 대해 카이 제곱 p- 값을 제공한다는 것입니다. 다항식에 대한 요약을 실행하는 fit1것은 아닙니다. 단지 추정치, AIC 및 편차를 제공합니다.

두 번째 질문은 따라서이다 사용하는 경우 모델 및 추정에 대한 P-값을 얻을 수있는 방법이 있나요 nnet::multinom?

나는 mlogit 이 이것에 대한 또 다른 R 패키지 라는 것을 알고 있으며 출력에 p- 값이 포함 된 것처럼 보인다. 그러나 mlogit데이터를 사용하여 실행할 수 없었습니다 . 데이터 형식이 올바른 것 같지만 잘못된 수식이 있다고합니다. 에 사용한 것과 동일한 수식을 사용 multinom했지만 파이프를 사용하는 다른 형식이 필요한 것 같고 작동 방식을 이해할 수 없습니다.

감사.


2
Hess = TRUE 인수를 설정하여 다항식에서 Hessian을 다시 가져온 다음 p- 값을 수동으로 계산할 수 있습니다. 그러나 mlogit 라이브러리를 사용하는 것이 좋습니다 (공변량이 올바르게 조정되지 않으면 nnet에 수렴 문제가 발생할 수 있음). mlogit의 비 네트는 꽤 좋으며 데이터를 올바르게 설정하는 데 도움이됩니다. 비 네트는 일반적인 장소에서 찾을 수 있습니다 : cran.r-project.org/web/packages/mlogit
Jason Morgan

답변:


9

이 게시물이 매우 오래되었으므로 이미 솔루션을 찾았지만 솔루션을 찾고있는 사람들을 위해 이미 http://youtu.be/-Cp_KP9mq94 는 방법에 대한 지침을 제공하는 훌륭한 소스입니다. mlogit 패키지를 사용하여 R에서 다항 로지스틱 회귀 모델을 실행합니다. 계량 경제학 아카데미 웹 사이트를 방문하면 R 및 SAS 및 STATA에 대한 모든 스크립트, 데이터 또는 SPSS가 있습니다.

데이터를 "long"형식과 "wide"형식으로 변환하는 방법과 이유 및 수행 할 작업에 대해 설명합니다. 대부분 형식이 다양하므로 변환이 필요합니다.

https://sites.google.com/site/econometricsacademy/econometrics-models/multinomial-probit-and-logit-models


3

일반적으로, 두 개의 서로 다른 소프트웨어 간의 AIC 값의 차이가 완전히 놀라운 것은 아닙니다. 가능성 계산에는 종종 동일한 데이터의 서로 다른 모델간에 동일한 상수가 포함됩니다. 서로 다른 개발자는 그 상수를 유지하거나 떠나는 것에 대해 다른 선택을 할 수 있습니다. 걱정할 때는 두 모델 간의 AIC 값의 차이가 다른 경우입니다. 실제로 나는 multinom()동일한 X 값을 가진 행이 축소되는 방식을 변경할 수 있다는 논쟁에 주목했습니다 . summ 인수의 다른 값을 시도하여 그 차이가 일치하는지 확인할 수 있습니다. 우리는 JMP가 무엇을하고 있는지 모른다. :)

추정 계수와 표준 오차가 동일하면 좋습니다. 계수가 동일하지 않은 경우 JMP가 계수를 계산하기 위해 다른 기준 결과를 선택할 수 있음을 잊지 마십시오. 예를 multinom()들어와는 다른 선택을 mlogit()합니다.

multinom ()의 summary () 결과에서 p- 값을 얻는 것은 매우 쉽습니다. 모델을 재현 할 수 없으므로 다음은 multinom ()의 도움말 페이지에있는 예입니다.

library("nnet")
data("Fishing", package = "mlogit")
fishing.mu <- multinom(mode ~ income, data = Fishing)
sum.fishing <- summary(fishing.mu) # gives a table of outcomes by covariates for coef and SE
str(sum.fishing)
# now get the p values by first getting the t values
pt(abs(sum.fishing$coefficients / sum.fishing$standard.errors),
  df=nrow(Fishing)-6,lower=FALSE)

mlogit 패키지를 알아내는 것이 약간의 어려움에 동의합니다! 비 네트를주의 깊게 읽으십시오. 그들은 도와줍니다.


Fishingmultinom과 함께 데이터 세트 의 다른 (일반) 변수를 어떻게 사용 합니까?
gregmacfarlane

@gmacfarlane 그냥 multinom (mode ~ 수입 + price.beach, ...에서 공식에 원하는 변수를 추가하십시오
atiretoo

@atiretoo 나는 내 pvals를 얻을 수있는 방법을 찾고 있었으므로 감사합니다! 그러나 명확히하기 위해-6은 df와 함께 어디에서 왔습니까? 내 df를 얻기 위해 무엇을 계산해야합니까? 모델에 연속 변수와 범주 형 변수 (4 가지 범주)가 있습니다. 그렇다면 5의 df일까요? 또한 낚시는 전체 데이터 세트가 맞습니까? 표본 크기 자유도입니다.
Kerry

@atiretoo 사과합니다. 방금 nnet 패키지를 사용하여 로짓 회귀를 실행하면 실제로 효과적인 df를 계산하고 nnet 객체 내에 저장됩니다. 따라서 모델에서 df를 추출하여 사용할 수 있습니다. mlogit 객체에 동일한 정보가 있는지 확인하지 않았습니다.
Kerry

@ 케리 당신이 그것을 발견 기쁘다.
atiretoo

1

glmnet 패키지를 사용하여 다항 로짓을 실행할 수도 있습니다. 모든 변수를 유지하도록 강제하는 방법을 모르겠지만 가능할 것이라고 확신합니다.

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