Search code examples
rregressionlog-likelihoodgoodness-of-fit

Goodness of Fit statistic Tobit model


I have estimated a Tobit model using the censReg package, along with the censReg function. Alternatively, the same Tobit model is estimated using the tobit function in the AER package.

Now, I really like to have some goodness of fit statistic, such as the Pseudo-R2. However, whenever I try to estimate this, the output returns as NA. For example:

Tobit <- censReg(Listing$occupancy_rate ~ ., left = -Inf, right = 1, data = Listing)
PseudoR2(Tobit, which = "McFadden")
[1] NA

So far, I have only seen reported Pseudo-R2's when people use Stata. Does anyone know how to estimate it in R?

Alternatively, Tobit estimates the (log)Sigma, which is basically the standard deviation of the residuals. Could I use this to calculate the R2?

All help is really appreciated.


Solution

  • You can use DescTools package to calculate PseudoR2. You have not provided any sample data. So, it is hard for me to run your model. I am using a default dataset like

    library(DescTools)
    r.glm <- glm(Survived ~ ., data=Untable(Titanic), family=binomial)
    
    PseudoR2(r.glm, c("McFadden"))
    

    For your model, you can use something like

    library(AER)
    data("Affairs", package = "AER")
    fm.tobit <- tobit(affairs ~ age + yearsmarried + religiousness + occupation + rating,
                      data = Affairs)
    
    #Create a function for pseudoR2 calculation 
    pseudoR2 <- function(obj) 1 - as.vector(logLik(obj)/logLik(update(obj, . ~ 1)))
    pseudoR2(fm.tobit)
    #>[1] 0.05258401
    

    Or using censReg as you have used

    library(censReg)
    data("Affairs", package = "AER")
    estResult <- censReg(affairs ~ age + yearsmarried + religiousness +
                            occupation + rating, data = Affairs)
    summary(estResult)
    pseudoR2(estResult)
    #>[1] 0.05258401
    

    You can find the details about pseudoR2 in the following link

    R squared in logistic regression