predict() with arbitrary coefficients in r

前端 未结 3 755
庸人自扰
庸人自扰 2020-12-10 07:51

I\'ve got some coefficients for a logit model set by a non-r user. I\'d like to import those coefficients into r and generate some goodness of fit estimates on the same data

相关标签:
3条回答
  • 2020-12-10 08:14

    Or, you can use something like this:

    fit <- lm(Y ~ A + B + C, data=fakedata)

    fit$coefficients <- c(1, 2, 3) # this would change the coefficients for A, B, C to 1, 2 and 3, respectively.

    Y_hat_new <- predict(fit, new_fakedata) # this Y_hat_new will be calculated as your new predicted outcome given the new coefficients and/or new_fakedata.

    The results should be the same if you follow the model.matrix route.

    0 讨论(0)
  • 2020-12-10 08:20

    If you follow the code through predict.glm which passes the object to predict.lm, it appears that the node of the model list that needs to be altered is indeed fit$coefficients. However, altering the summary()-object will have no effect. The [['coefficients']] in the glm and lm objects are not matrices with columns: 'Estimate', 'Std. Error', 't value', 'Pr(>|t|)' such as produced by summary, but rather just a vector of coefficients.

     fit$coefficients <- y
     newpred <- predict(fit)
    

    You might make a copy and work on it if you will need any further use of fit.

    0 讨论(0)
  • 2020-12-10 08:33

    This is not an answer to your posted question - which BondedDust answered - but describes an alternate way in calculating the predicted probabilities yourself which might help in this case.

    # Use the mtcars dataset for a minimum worked example
    data(mtcars)
    
    # Run a logistic regression and get predictions 
    mod <- glm(vs ~ mpg + factor(gear) + factor(am), mtcars, family="binomial")
    p1 <- predict(mod, type="response")
    
    # Calculate predicted probabilities manually
    m <- model.matrix(~ mpg + factor(gear) + factor(am), mtcars)[,]
    p2 <- coef(mod) %*% t(m)
    p2 <- plogis(p2)
    
    all(p1 == p2)
    #identical(as.numeric(p1), as.numeric(p2))
    

    You can replace coef(mod) with the vector of coefficients given to you. model.matrix will generate the dummy variables required for the calculation - check that the ordering is the same as that of the coefficient vector.

    0 讨论(0)
提交回复
热议问题