inst/doc/predict.R

## ----setup, include=FALSE, message=FALSE, warning=FALSE-----------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  warning = FALSE,
  message = FALSE,
  fig.path   = "figs/",
  fig.retina = 3,
  comment = "#>"
)

set.seed(5678)

## -----------------------------------------------------------------------------
library("logitr")

mnl_pref <- logitr(
  data    = yogurt,
  outcome = 'choice',
  obsID   = 'obsID',
  pars    = c('price', 'feat', 'brand')
)

probs <- predict(mnl_pref)
head(probs)

## -----------------------------------------------------------------------------
probs <- predict(mnl_pref, returnData = TRUE)
head(probs)

## -----------------------------------------------------------------------------
data <- subset(
  yogurt, obsID %in% c(42, 13),
  select = c('obsID', 'alt', 'price', 'feat', 'brand'))

probs_mnl_pref <- predict(
  mnl_pref,
  newdata = data,
  obsID = "obsID"
)

probs_mnl_pref

## -----------------------------------------------------------------------------
probs_mnl_pref <- predict(
  mnl_pref,
  newdata = data,
  obsID = "obsID",
  interval = "confidence",
  level = 0.95
)

probs_mnl_pref

## -----------------------------------------------------------------------------
mnl_wtp <- logitr(
  data     = yogurt,
  outcome  = 'choice',
  obsID    = 'obsID',
  pars     = c('feat', 'brand'),
  scalePar = 'price',
  numMultiStarts = 10
)

probs_mnl_wtp <- predict(
  mnl_wtp,
  newdata  = data,
  obsID    = "obsID",
  interval = "confidence"
)

probs_mnl_wtp

## ----eval=FALSE---------------------------------------------------------------
#  library("ggplot2")
#  
#  probs <- rbind(probs_mnl_pref, probs_mnl_wtp)
#  probs$model <- c(rep("mnl_pref", 8), rep("mnl_wtp", 8))
#  probs$alt <- rep(c("dannon", "hiland", "weight", "yoplait"), 4)
#  probs$obs <- paste0("Observation ID: ", probs$obsID)
#  ggplot(probs, aes(x = alt, y = predicted_prob, fill = model)) +
#      geom_bar(stat = 'identity', width = 0.7, position = "dodge") +
#      geom_errorbar(aes(ymin = predicted_prob_lower, ymax = predicted_prob_upper),
#                    width = 0.2, position = position_dodge(width = 0.7)) +
#      facet_wrap(vars(obs)) +
#      scale_y_continuous(limits = c(0, 1)) +
#      labs(x = 'Alternative', y = 'Expected Choice Probabilities') +
#      theme_bw()

## ----probabilities, echo=FALSE------------------------------------------------
knitr::include_graphics('probs.png')

## -----------------------------------------------------------------------------
outcomes_pref <- predict(
    mnl_pref, 
    type = "outcome", 
    returnData = TRUE
)

head(outcomes_pref)

outcomes_wtp <- predict(
    mnl_wtp, 
    type = "outcome", 
    returnData = TRUE
)

head(outcomes_wtp)

## -----------------------------------------------------------------------------
chosen_pref <- subset(outcomes_pref, choice == 1)
chosen_pref$correct <- chosen_pref$choice == chosen_pref$predicted_outcome
accuracy_pref <- sum(chosen_pref$correct) / nrow(chosen_pref)
accuracy_pref

chosen_wtp <- subset(outcomes_wtp, choice == 1)
chosen_wtp$correct <- chosen_wtp$choice == chosen_wtp$predicted_outcome
accuracy_wtp <- sum(chosen_wtp$correct) / nrow(chosen_wtp)
accuracy_wtp

Try the logitr package in your browser

Any scripts or data that you put into this service are public.

logitr documentation built on Sept. 29, 2023, 5:06 p.m.