2017-11-17 1 views
1

이미 여러 회귀 결과가 있습니다. fit1, fit2, fit3. 그리고 apply 함수를 사용하여 회귀 결과에서 BIC를 추출하고 싶습니다. 그것은 오류 표시r에 적용 함수를 사용하여 여러 회귀 결과에서 BIC를 추출하는 방법

fitresult = cbind(fit1, fit2, fit3) 
BIC = apply(fitresult, 2, BIC) 

:

Error in UseMethod("logLik") : no applicable method for 'logLik' 
applied to an object of class "list" 

내가 확인하고 class(fitresult[1]) = 'list'을 찾아 loglik이 '목록'클래스에 적용 할 수 없습니다 나는 다음과 같이 코딩 할 때

질문이다. fitresult[1]이 적합한 결과 개체가 아니기 때문에이 오류는 BIC(fitresult[1])을 사용할 수 없다는 것을 의미합니다.

그럼 적용 기능을 사용하여 fitresult의 각 구성 요소를 apply이 적용되도록 만들 수 있습니까? 각 구성 요소의 class을 변경 하시겠습니까?

+0

A [최소한의 재현 예]를 만드는 방법을 검토하십시오 (https://stackoverflow.com/a/5963610/8386140) 다른 사람들이 당신을 도와 도움 . – duckmayr

답변

1

TL; DR은 :cbind 동작 모델 클래스 스트립 모델 객체로부터 (예를 들어, 모델 개체는 lm 함수로 작성된 경우 클래스 lm 임)하지만 BIC는 모델 클래스 오브젝트 (예상 lm 또는 glm). 대신 lapply(list(fit1, fit2, fit3), BIC)BIC을 사용할 수 있습니다. fit1, fit2fit3 가정


는 이들 개체는 모델 출력을 포함하는리스트이다되는 모델 함수 (같은 lm 또는 glm) 실행의 결과 객체 (예를 들어, str(fit1) 실행할.

BIC 모델 개체가 필요합니다 (예 : 모델이 lm으로 생성 된 경우 출력 개체는 lm 클래스 목록). 그러나 cbind(fit1, fit2, fit3)의 출력은 matrix, a 각 열에는 주어진 모델 객체의 모든 하위 목록 요소가 들어 있습니다 (예 : 콘솔에 fitresult, class(fitresult), fitresult[1, ]fitresult[2, ]을 입력하고 어떤 일이 발생하는지 확인하십시오). 그러나 fitresult의이 열은 더 이상 모델 클래스 lm이 붙어 있지 않으므로 BIC는이 모델을 조작하는 방법을 알지 못합니다. 예를 들어 lm을 사용하여 모델을 만든 경우 class(fit1)lm을 반환합니다. 그러나 cbind 수술 이후. class(fitresult[ ,1])list을 반환합니다.

lapply(list(fit1, fit2, fit3), BIC) 

출력을 각 요소는 주어진 모델에서 BIC하는 목록을해야한다 :

대신,이 모델이 목록에 개체 및 각 모델 객체에 BIC을 실행하는 lapply를 사용했습니다. 당신이 벡터로 출력을 원하는 경우에, 당신이 할 수 있습니다

sapply(list(fit1, fit2, fit3), BIC) 
+0

또는 vapply :'vapply (list (fit1, fit2, fit3), BIC, numeric (1))' – Parfait

관련 문제