simulate.mclogit mclogit 0.8.6.2

Simulating responses from baseline-category and conditional logit models

Description

The simulate() methods allow to simulate responses from models fitted with mclogit() and mblogit(). Currently only models without random effects are supported for this.

Usage

## S4 method for signature 'mblogit'
simulate(object, nsim = 1, seed = NULL, ...)
## S4 method for signature 'mclogit'
simulate(object, nsim = 1, seed = NULL, ...)

# These methods are currently just 'stubs', causing an error
# message stating that simulation from models with random
# effects are not supported yet
## S4 method for signature 'mmblogit'
simulate(object, nsim = 1, seed = NULL, ...)
## S4 method for signature 'mmclogit'
simulate(object, nsim = 1, seed = NULL, ...)

Arguments

object

an object from the relevant class

nsim

a number, specifying the number of simulated responses for each observation.

seed

an object specifying if and how the random number generator should be initialized (‘seeded’). The interpetation of this argument follows the default method, see link[stats]{simulate}

...

other arguments, ignored.

Value

The result of the simulate method for objects created by mclogit is a data frame with one variable for each requested simulation run (their number is given by the nsim= argument). The contents of the columns are counts (or zero-one values), with group-wise multinomial distribution (within choice sets) just like it is assumed for the original response.

The shape of the result of the simulate method for objects created by mblogit is also a data frame. The variables within the data frame have a mode or shape that corresponds to the response to which the model was fitted. If the response is a matrix of counts, then the variables in the data frame are also matrices of counts. If the response is a factor and mblogit was called with an argument from.table=FALSE, the variables in the data frame are factors with the same factor levels as the response to which the model was fitted. If instead the function was called with from.table=TRUE, the variables in the data frame are counts, which represent frequency weights that would result from applying as.data.frame to a contingency table of simulated frequency counts.

Examples

library(MASS)
(house.mblogit <- mblogit(Sat ~ Infl + Type + Cont,
                         data = housing,
                         weights=Freq,
                         from.table=TRUE))
Iteration 1 - Deviance = 38.84842
Iteration 2 - Deviance = 38.66222
Iteration 3 - Deviance = 38.6622
Iteration 4 - Deviance = 38.6622
converged

Call: mblogit(formula = Sat ~ Infl + Type + Cont, data = housing, weights =
  Freq, from.table = TRUE)

Coefficients:
                   Predictors
Response categories (Intercept) InflMedium InflHigh TypeApartment TypeAtrium
  TypeTerrace
Medium/Low -0.4192 0.4464 0.6649 -0.4357 0.1314 -0.6666
High/Low -0.1387 0.7349 1.6126 -0.7356 -0.4080 -1.4123
                   Predictors
Response categories  ContHigh
         Medium/Low   0.3609
         High/Low     0.4818

Null Deviance:     262.1
Residual Deviance: 38.66
sm <- simulate(house.mblogit,nsim=7)
housing.long <- housing[rep(seq.int(nrow(housing)),housing$Freq),]
(housel.mblogit <- mblogit(Sat ~ Infl + Type + Cont,
                          data=housing.long))
Iteration 1 - Deviance = 3474.691
Iteration 2 - Deviance = 3470.086
Iteration 3 - Deviance = 3470.084
Iteration 4 - Deviance = 3470.084
converged

Call:  mblogit(formula = Sat ~ Infl + Type + Cont, data = housing.long)

Coefficients:
                   Predictors
Response categories (Intercept) InflMedium InflHigh TypeApartment TypeAtrium
  TypeTerrace
Medium/Low -0.4192 0.4464 0.6649 -0.4357 0.1314 -0.6666
High/Low -0.1387 0.7349 1.6126 -0.7356 -0.4080 -1.4123
                   Predictors
Response categories  ContHigh
         Medium/Low   0.3609
         High/Low     0.4818

Null Deviance:     3694
Residual Deviance: 3470
sml <- simulate(housel.mblogit,nsim=7)
housing.table <- xtabs(Freq~.,data=housing)
housing.mat <- memisc::to.data.frame(housing.table)
head(housing.mat)
    Infl      Type Cont Low Medium High
1    Low     Tower  Low  21     21   28
2 Medium     Tower  Low  34     22   36
3   High     Tower  Low  10     11   36
4    Low Apartment  Low  61     23   17
5 Medium Apartment  Low  43     35   40
6   High Apartment  Low  26     18   54
(housem.mblogit <- mblogit(cbind(Low,Medium,High) ~
                              Infl + Type + Cont,
                          data=housing.mat))
Iteration 1 - Deviance = 38.84842
Iteration 2 - Deviance = 38.66222
Iteration 3 - Deviance = 38.6622
Iteration 4 - Deviance = 38.6622
converged

Call: mblogit(formula = cbind(Low, Medium, High) ~ Infl + Type + Cont, data =
  housing.mat)

Coefficients:
                   Predictors
Response categories (Intercept) InflMedium InflHigh TypeApartment TypeAtrium
  TypeTerrace
Medium/Low -0.4192 0.4464 0.6649 -0.4357 0.1314 -0.6666
High/Low -0.1387 0.7349 1.6126 -0.7356 -0.4080 -1.4123
                   Predictors
Response categories  ContHigh
         Medium/Low   0.3609
         High/Low     0.4818

Null Deviance:     262.1
Residual Deviance: 38.66
smm <- simulate(housem.mblogit,nsim=7)
str(sm)
'data.frame':        72 obs. of  7 variables:
 $ sim_1: int  30 19 21 24 24 44 10 9 38 55 ...
 $ sim_2: int  33 19 18 23 18 51 7 6 44 54 ...
 $ sim_3: int  31 16 23 25 26 41 7 13 37 46 ...
 $ sim_4: int  28 14 28 22 32 38 4 7 46 56 ...
 $ sim_5: int  32 22 16 27 17 48 8 11 38 58 ...
 $ sim_6: int  28 23 19 33 18 41 9 13 35 57 ...
 $ sim_7: int  23 18 29 17 24 51 5 11 41 59 ...
- attr(*, "seed")= int [1:626] 10403 205 1980538363 -125047968 -820381145
  -1073960099 -33499050 1164085917 1218464490 -1045685882 ...
str(sml)
'data.frame':        1681 obs. of  7 variables:
 $ sim_1: Factor w/ 3 levels "Low","Medium",..: 2 3 3 3 3 1 3 1 1 1 ...
 $ sim_2: Factor w/ 3 levels "Low","Medium",..: 1 3 1 1 1 2 1 1 1 2 ...
 $ sim_3: Factor w/ 3 levels "Low","Medium",..: 1 1 2 1 3 2 3 2 3 1 ...
 $ sim_4: Factor w/ 3 levels "Low","Medium",..: 1 2 2 2 3 2 3 3 1 3 ...
 $ sim_5: Factor w/ 3 levels "Low","Medium",..: 1 3 1 2 1 1 3 3 1 2 ...
 $ sim_6: Factor w/ 3 levels "Low","Medium",..: 2 2 1 3 3 3 3 1 1 3 ...
 $ sim_7: Factor w/ 3 levels "Low","Medium",..: 2 1 3 1 1 3 2 2 2 3 ...
- attr(*, "seed")= int [1:626] 10403 19 1492790388 -1629574902 -1817687082
  -2080485428 -622102478 -1390801052 -1280540579 249411485 ...
str(smm)
'data.frame':        24 obs. of  7 variables:
 $ sim_1: int [1:24, 1:3] 26 23 2 53 45 20 15 5 3 22 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
 $ sim_2: int [1:24, 1:3] 30 24 10 55 41 25 19 9 3 17 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
 $ sim_3: int [1:24, 1:3] 23 25 10 54 46 32 13 8 7 22 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
 $ sim_4: int [1:24, 1:3] 22 30 9 52 46 32 13 9 3 15 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
 $ sim_5: int [1:24, 1:3] 22 23 3 57 45 27 8 11 4 21 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
 $ sim_6: int [1:24, 1:3] 24 22 8 49 36 29 14 10 5 19 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
 $ sim_7: int [1:24, 1:3] 35 25 16 53 43 23 18 9 5 20 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "Low" "Medium" "High"
- attr(*, "seed")= int [1:626] 10403 554 1019603289 -1305277535 -470137223
  -57077173 1775921955 -181041711 861366705 -1087987206 ...
head(smm[[1]])
     Low Medium High
[1,]  26     17   27
[2,]  23     28   41
[3,]   2      7   48
[4,]  53     20   28
[5,]  45     36   37
[6,]  20     22   56