2014-01-24 1 views
82

몽상가 (Stargazer)는 작품 (및 기타) 객체를위한 매우 훌륭한 라텍스 테이블을 생성합니다. 모델을 최대 우도로 적합하다고 가정합니다. 나는 몽상가가 내 견적을 위해 작품과 같은 테이블을 제작하길 바란다. 어떻게해야합니까?최대 가능도에 의해 추정 된 계수를 몽상가 테이블로 가져옵니다.

조금 해킹 되긴하지만, 내 견적을 포함하는 "가짜"작품을 만드는 것이 하나의 방법 일 수 있습니다. 요약 (my.fake.lm.object)이 작동하는 한 작동 할 것입니다. 그렇게 쉽게 할 수 있습니까?

예 :

library(stargazer) 

N <- 200 
df <- data.frame(x=runif(N, 0, 50)) 
df$y <- 10 + 2 * df$x + 4 * rt(N, 4) # True params 
plot(df$x, df$y) 

model1 <- lm(y ~ x, data=df) 
stargazer(model1, title="A Model") # I'd like to produce a similar table for the model below 

ll <- function(params) { 
    ## Log likelihood for y ~ x + student's t errors 
    params <- as.list(params) 
    return(sum(dt((df$y - params$const - params$beta*df$x)/params$scale, df=params$degrees.freedom, log=TRUE) - 
       log(params$scale))) 
} 

model2 <- optim(par=c(const=5, beta=1, scale=3, degrees.freedom=5), lower=c(-Inf, -Inf, 0.1, 0.1), 
       fn=ll, method="L-BFGS-B", control=list(fnscale=-1), hessian=TRUE) 
model2.coefs <- data.frame(coefficient=names(model2$par), value=as.numeric(model2$par), 
          se=as.numeric(sqrt(diag(solve(-model2$hessian))))) 

stargazer(model2.coefs, title="Another Model", summary=FALSE) # Works, but how can I mimic what stargazer does with lm objects? 
더 정확하게는

: LM 개체, 몽 상가 좋게 표 상단 종속 변수를 인화 해당 추정 아래 괄호 SE들을 포함하고, R을 갖는다^2와 관측 수를 표의 하단에 표시합니다. 위와 같이 최대 확률로 추정되는 "사용자 지정"모델을 사용하여 동일한 동작을 얻는 쉬운 방법이 있습니까?

다음은 LM 개체로 내 Optim을 출력을 드레싱에 내 미약 한 시도입니다

model2.lm <- list() # Mimic an lm object 
class(model2.lm) <- c(class(model2.lm), "lm") 
model2.lm$rank <- model1$rank # Problematic? 
model2.lm$coefficients <- model2$par 
names(model2.lm$coefficients)[1:2] <- names(model1$coefficients) 
model2.lm$fitted.values <- model2$par["const"] + model2$par["beta"]*df$x 
model2.lm$residuals <- df$y - model2.lm$fitted.values 
model2.lm$model <- df 
model2.lm$terms <- model1$terms # Problematic? 
summary(model2.lm) # Not working 
+5

내가 STH를 시도했다 'texreg' 패키지와 비슷합니다. 게으름으로 인해 다른 모델의 계수와 표준 오류를 덮어 쓰게되어 원하는 출력을 얻을 수있었습니다. 귀하의 경우에는 'model1'의 계수와 표준 오차를 덮어 쓴다. 이것은 정교한 해결책은 아니지만 작동해야합니다. 말할 것도없이 더 좋은 솔루션이 있는지 궁금합니다. – coffeinjunky

+1

'stargazer :::. stargazer.wrap'로 무거운 짐을지는 stargazer 함수를 살펴볼 수 있습니다. 테이블을 포맷하는 코드 외에도 많은 다른 기능을 가진 컨테이너처럼 보입니다. 그리고'lm' (그리고'glm')을위한 꽤 많은 구성 요소들을 평가하는 것 같아서'optim()'결과를 정돈하는 것을 매우 어렵게 만듭니다. – andybega

+3

''texreg''에서''createTexreg'' 함수를 사용하여''texreg'' 객체를 만드는 것만으로도 충분합니다. 기본적으로 계수, SE 등을 넘깁니다.''? createTexreg''를보십시오. ''texreg'' 객체는''texreg'',''htmlreg'',''screenreg'',''plotreg'' 함수들로 공급 될 수 있습니다. 또는 JSS 기사의 6 절에서는 나중에 동일한 템플리트를 재활용하려는 경우 새 모델 유형에 대한 메소드를 작성하고 등록하는 방법을 설명합니다. –

답변

0

난 당신이 몽 상가를 사용하여 얼마나 최선을 다하고 모르는,하지만 당신은 빗자루와 xtable를 사용하여 시도 할 수 있습니다 패키지는, 문제는 Optim을 모델

library(broom) 
library(xtable) 
xtable(tidy(model1)) 
xtable(tidy(model2)) 
1

난 그냥이 문제가되고 coefse의 사용을 통해이 문제를 극복하고, 몽 상가 내 omit 기능을 한 당신에게 표준 오류를주지 않을 것입니다 .. 예.

먼저 더미 lm 개체를 인스턴스화 할 필요가
stargazer(regressions, ... 
        coef = list(... list of coefs...), 
        se = list(... list of standard errors...), 
        omit = c(sequence), 
        covariate.labels = c("new names"), 
        dep.var.labels.include = FALSE, 
        notes.append=FALSE), file="") 
1

, 다음을 드레스 :

#... 
model2.lm = lm(y ~ ., data.frame(y=runif(5), beta=runif(5), scale=runif(5), degrees.freedom=runif(5))) 
model2.lm$coefficients <- model2$par 
model2.lm$fitted.values <- model2$par["const"] + model2$par["beta"]*df$x 
model2.lm$residuals <- df$y - model2.lm$fitted.values 
stargazer(model2.lm, se = list(model2.coefs$se), summary=FALSE, type='text') 

# =============================================== 
#       Dependent variable:  
#      --------------------------- 
#         y    
# ----------------------------------------------- 
# const      10.127***   
#        (0.680)   
#             
# beta       1.995***   
#        (0.024)   
#             
# scale      3.836***   
#        (0.393)   
#             
# degrees.freedom    3.682***   
#        (1.187)   
#             
# ----------------------------------------------- 
# Observations     200    
# R2        0.965   
# Adjusted R2     0.858   
# Residual Std. Error  75.581 (df = 1)  
# F Statistic    9.076 (df = 3; 1)  
# =============================================== 
# Note:    *p<0.1; **p<0.05; ***p<0.01 

(다음 물론 나머지 요약 통계가 올바른지 확인)