एक तारांकित तालिका में अधिकतम संभावना द्वारा अनुमानित गुणांक प्राप्त करें


83

Stargazer lm (और अन्य) वस्तुओं के लिए बहुत अच्छा लेटेक्स टेबल बनाता है। मान लीजिए कि मैंने अधिकतम संभावना द्वारा एक मॉडल फिट किया है। मैं अपने अनुमानों के लिए एक एलएम जैसी मेज का निर्माण करना चाहता हूं। मैं यह कैसे कर सकता हूँ?

हालांकि यह थोड़ा हैकरी है, एक तरीका यह हो सकता है कि एक "नकली" एलएम ऑब्जेक्ट बनाया जाए जिसमें मेरे अनुमान हों - मुझे लगता है कि यह सारांश (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पैकेज के साथ इसी तरह का प्रयास किया है। आलस्य के कारण, मैंने एक अलग मॉडल के गुणांक और मानक त्रुटियों को ओवरराइट कर दिया, जिससे मुझे वांछित आउटपुट मिला। आपके मामले में, आप गुणांक और मानक त्रुटियों को अधिलेखित कर सकते हैं model1। जबकि यह एक परिष्कृत समाधान नहीं है, यह काम करना चाहिए। कहने की जरूरत नहीं है, मैं यह देखने के लिए उत्सुक हूं कि क्या कोई बेहतर समाधान सामने आता है ...
coffeinjunky

1
आप स्टारगेज़र फंक्शन पर एक नज़र डाल सकते हैं, जो हैवी लिफ्टिंग करता है stargazer:::.stargazer.wrap। यह कोड के अलावा अन्य फ़ंक्शन के एक समूह के साथ एक कंटेनर जैसा दिखता है जो तालिकाओं को प्रारूपित करता है। और ऐसा लगता है कि यह lm(और glm) के लिए काफी कुछ घटकों का मूल्यांकन करता है जो आपके optim()परिणामों को तैयार करने के लिए बहुत कठिन होगा ।
andybega

3
में texreg, फ़ंक्शन texregका उपयोग करके ऑब्जेक्ट बनाना पर्याप्त होगा createTexreg। आप मूल रूप से केवल गुणांक, एसईएस आदि देखें ?createTexregtexregवस्तु तो में खिलाया जा सकता है texreg, htmlreg, screenreg, और plotregकार्य करता है। वैकल्पिक रूप से, JSS लेख की धारा 6 बताती है कि आप जिस तरह से उसी टेम्पलेट को रीसायकल करना चाहते हैं, नए मॉडल प्रकारों के लिए तरीके कैसे लिखें और पंजीकृत करें।
फिलिप लीफेल्ड

जवाबों:


2

मुझे बस यह समस्या हो रही थी 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

मुझे नहीं पता कि आप स्टारगेज़र का उपयोग करने के लिए कितने प्रतिबद्ध हैं, लेकिन आप झाड़ू और xtable पैकेज का उपयोग करके देख सकते हैं, समस्या यह है कि यह आपको आशा मॉडल के लिए मानक त्रुटियां नहीं देगा

library(broom)
library(xtable)
xtable(tidy(model1))
xtable(tidy(model2))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.