최대 가능성으로 추정 된 계수를 Stargazer 테이블로 가져옵니다.


83

Stargazer는 영화 (및 기타) 물체를위한 매우 멋진 라텍스 테이블을 생성합니다. 최대 가능성으로 모델을 적합했다고 가정합니다. 스타 게이저가 내 견적을 위해 영화와 같은 테이블을 만들고 싶습니다. 어떻게 할 수 있습니까?

약간 엉망이긴하지만 한 가지 방법은 내 견적을 포함하는 "가짜"작품을 만드는 것입니다. summary (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 객체를 사용하면 stargazer는 테이블 상단에 종속 변수를 멋지게 인쇄하고 해당 추정값 아래에 괄호 안에 SE를 포함하며 테이블 하단에 R ^ 2 및 관측 값 수를가집니다. 위와 같이 최대 가능성으로 추정 된 "사용자 지정"모델로 동일한 동작을 얻는 쉬운 방법이 있습니까?

내 최적화 된 결과물을 작품으로 꾸미려는 미약 한 시도는 다음과 같습니다.

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

6
나는 texreg패키지 와 비슷한 sth를 시도했습니다 . 게으름으로 인해 다른 모델의 계수와 표준 오차를 덮어 써서 원하는 결과를 얻었습니다. 귀하의 경우 예를 들어의 계수 및 표준 오류를 덮어 쓸 수 있습니다 model1. 이것은 정교한 솔루션은 아니지만 작동합니다. 물론 내가 더 나은 솔루션이 올 경우 ...보고 궁금, 대답
coffeinjunky

1
을 (를) 사용하여 무거운 작업을 수행하는 Stargazer 기능을 살펴볼 수 있습니다 stargazer:::.stargazer.wrap. 테이블 형식을 지정하는 코드 외에도 다른 기능이있는 컨테이너처럼 보입니다. 그리고 그것은 당신의 결과 를 꾸미는 것을 매우 어렵게 만드는 lm(및 glm)에 대한 꽤 많은 구성 요소를 평가하는 것처럼 보입니다 optim().
andybega

3
에서는 함수 를 사용하여 개체 texreg를 만드는 것으로 충분 합니다. 기본적으로 계수, SE 등을 넘겨줍니다.를 참조하십시오 . 목적은 다음에 공급 될 수있다 , , 및 기능한다. 또는 JSS 문서의 섹션 6에서는 나중에 동일한 템플릿을 재활용하려는 경우 새 모델 유형에 대한 메서드를 작성하고 등록하는 방법을 설명합니다. texregcreateTexreg?createTexregtexregtexreghtmlregscreenregplotreg
Philip Leifeld

답변:


2

나는 방금이 문제가 있었고 stargazer 내 에서 coef se, 및 omit기능을 사용하여 이것을 극복했습니다 ... 예

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

먼저 더미 lm오브젝트를 인스턴스화 한 다음 드레스를 입혀야합니다.

#...
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

(물론 나머지 요약 통계가 올바른지 확인하십시오)


0

Stargazer를 사용하는 데 얼마나 헌신적인지는 모르겠지만 broom과 xtable 패키지를 사용해 볼 수 있습니다. 문제는 최적화 모델에 대한 표준 오류를 제공하지 않는다는 것입니다.

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