최대 가능성으로 추정 된 계수를 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.