2.5 Pacote irtoys

O pacote irtoys possui uma função chamada est() que possui características similares ao software BILOG quanto as opções de estimação. Inclusive, é possível utilizar as ferramentas de estimação do BILOG caso esse esteja instalado em seu computador.

  > require(irtoys)

Nesse material, não será abordado o BILOG. Será utilizado o pacote ltm como ferramenta de estimação dos parâmetros dos modelos de interesse.

Para mais informações sobre a função est() veja o arquivo de ajuda do pacote (help(est)).

O ajuste de modelos com três parâmetros pode ser obtido da seguinte maneira:

  > manha.par<-est(manha, model = "3PL", engine = "ltm", nqp = 20, est.distr = FALSE,
  +   logistic = TRUE, nch = 5, a.prior = TRUE, b.prior = FALSE, c.prior = TRUE,
  +   bilog.defaults = TRUE, rasch = FALSE, run.name = "meumodelo")

O objeto manha.par contém os valores dos parâmetros a, b e c do modelo com 3 parâmetros. Para visualizas os primeiros parâmetros digite:

  > head(manha.par)

          [,1]       [,2]       [,3]
  i1 0.6644912  1.9939205 0.25346762
  i2 1.9176240  0.2600441 0.19425154
  i3 1.7516722  1.1147812 0.15854534
  i4 1.0914463  0.2583877 0.14447929
  i5 0.9412978 -2.7227852 0.04245911
  i6 0.5695324 -0.4206178 0.03557638

Para obter o θ ou a proficiência ou habilidade de cada indivíduo, após a estimação dos parâmetros do modelo, pode-se utilizar a função eap(). É necessário fornecer o arquivo de respostas e o objeto com os parêmetros estimados do modelo:

  > manha.sco<-eap(manha,manha.par,qu=normal.qu())

O objeto manha.sco contém o vetor θ de cada indivíduo.

  > head(manha.sco)

               est       sem  n
  [1,]  0.06110404 0.4771474 30
  [2,]  0.58837056 0.4089677 30
  [3,]  1.92623808 0.4680315 30
  [4,] -1.71143568 0.6046441 30
  [5,] -0.47840008 0.4540995 30
  [6,] -0.29040561 0.4498074 30

Um objeto final, com os scores, identificação e posição dos respondentes pode ser criado com os seguintes comandos:

  > final.rank<-data.frame('id'=saresp$id,'turno'=saresp$turno,'score'=manha.sco[,1],'posição'=rank(manha.sco[,1]),'acertos'=margin.table(manha,1))
  > head(final.rank)

             id turno       score posição acertos
  1 11001138433   m07  0.06110404     538      16
  2 11002964093   m07  0.58837056     748      17
  3 11004154243   m07  1.92623808     987      26
  4 11005367283   m07 -1.71143568      15       8
  5 11007519633   m07 -0.47840008     326      12
  6 11008054863   m07 -0.29040561     398      13

Pode-se visualizar o resultado ordenado pelo número de acertos,

  > final.acertos<- final.rank[order(final.rank$acertos),]
  > head(final.acertos)

                id turno      score posição acertos
  25   21002457753   m07 -0.9453425     156       7
  88   41044200343   m07 -1.9417899       2       7
  128  71025145903   m07 -1.6560666      18       7
  149  81024867083   m07 -1.5962607      24       7
  183  91057432493   m07 -1.8380660       7       7
  192 101006567063   m07 -1.6005866      23       7

  > tail(final.acertos)

                id turno    score posição acertos
  422 281032975343   m07 2.450968     999      27
  803 711010603953   m07 2.348996     997      27
  859 761011075233   m07 2.177786     993      27
  229 121035651183   m07 2.604056    1000      28
  628 511003326933   m07 2.360058     998      28
  558 441003142213   m07 2.766692    1001      29

  > final.score<- final.rank[order(final.rank$score),]
  > head(final.score)

                id turno     score posição acertos
  257 131061868283   m07 -1.942270       1       7
  88   41044200343   m07 -1.941790       2       7
  971 861004925633   m07 -1.905838       3       7
  315 191001523743   m07 -1.888097       4       8
  325 201008250873   m07 -1.857824       5      10
  395 261017778043   m07 -1.847286       6       7

  > tail(final.score)

                id turno    score posição acertos
  409 271024133193   m07 2.335383     996      27
  803 711010603953   m07 2.348996     997      27
  628 511003326933   m07 2.360058     998      28
  422 281032975343   m07 2.450968     999      27
  229 121035651183   m07 2.604056    1000      28
  558 441003142213   m07 2.766692    1001      29

Se for de interesse, pode-se alterar a escala do score com a função score.transform() do pacote CTT. Por exemplo, pode-se mudar a escala N(0,1) para uma escala N(500,10):

  > novo.score<-score.transform(manha.sco[,1], mu.new = 500, sd.new = 10, normalize = FALSE)
  > head(novo.score$new,n=30)

   [1] 500.6941 506.6993 521.9368 480.5060 494.5495 496.6906
   [7] 496.1962 496.0810 491.9442 507.9800 504.4469 499.2399
  [13] 504.9959 495.8971 492.5432 490.3022 513.9534 511.7711
  [19] 520.0580 510.6101 501.2948 505.0943 506.0797 505.7781
  [25] 489.2313 513.4319 503.0251 514.0883 487.8618 504.2727

Para obtenção da curva característica pode-se obter um plot do objeto que contém o resultado da estimação dos parâmetros.



Figura 3: Curva característica dos itens.
  > plot(manha.tpm,item=1:30,sub='SARESP-manhã',legend=F)
PIC



Figura 4: Curva característica dos itens.
  > par(mfrow=c(2,2))
  > plot(manha.tpm,items=1:5)
  > plot(manha.tpm,type="IIC",items=1:5)
  > plot(manha.tpm,type="IIC",items=0)
  > par(mfrow=c(1,1))
PIC

  > summary(manha.tpm)
  Call:
  tpm(data = manha, control = list(optimizer = "nlminb"))
  
  Model Summary:
     log.Lik      AIC      BIC
   -17784.91 35749.82 36191.61
  
  Coefficients:
               value std.err   z.vals
  Gussng.i1   0.2429  0.1601   1.5173
  Gussng.i2   0.1914  0.0715   2.6755
  Gussng.i3   0.1560  0.0396   3.9397
  Gussng.i4   0.1398  0.1256   1.1126
  Gussng.i5   0.0243  0.8273   0.0294
  Gussng.i6   0.0251     NaN      NaN
  Gussng.i7   0.0982  0.1198   0.8192
  Gussng.i8   0.0001  0.0065   0.0183
  Gussng.i9   0.1748  0.0413   4.2321
  Gussng.i10  0.3085  0.0486   6.3469
  Gussng.i11  0.0049  0.1762   0.0278
  Gussng.i12  0.3234  0.1220   2.6495
  Gussng.i13  0.0400     NaN      NaN
  Gussng.i14  0.2438  0.0981   2.4849
  Gussng.i15  0.2649  0.0281   9.4235
  Gussng.i16  0.1577  0.0326   4.8373
  Gussng.i17  0.4930  0.0404  12.2168
  Gussng.i18  0.7319  0.0414  17.6636
  Gussng.i19  0.0756  0.1514   0.4992
  Gussng.i20  0.5913  0.0759   7.7905
  Gussng.i21  0.0001  0.0073   0.0160
  Gussng.i22  0.1724  0.0166  10.3866
  Gussng.i23  0.2147  0.0178  12.0598
  Gussng.i24  0.4004  0.0700   5.7213
  Gussng.i25  0.0015  0.0620   0.0242
  Gussng.i26  0.1934  0.1306   1.4811
  Gussng.i27  0.5778  0.0505  11.4507
  Gussng.i28  0.0670  0.0554   1.2108
  Gussng.i29  0.0002  0.0133   0.0180
  Gussng.i30  0.4272  0.1537   2.7800
  Dffclt.i1   1.9792  0.5517   3.5877
  Dffclt.i2   0.2536  0.1613   1.5723
  Dffclt.i3   1.1143  0.1128   9.8832
  Dffclt.i4   0.2461  0.3465   0.7103
  Dffclt.i5  -2.7609  1.4287  -1.9324
  Dffclt.i6  -0.4627     NaN      NaN
  Dffclt.i7   0.7861  0.3722   2.1121
  Dffclt.i8   1.3443  0.2382   5.6444
  Dffclt.i9   1.0433  0.1260   8.2807
  Dffclt.i10  1.2917  0.1692   7.6354
  Dffclt.i11 -0.6594  0.6338  -1.0405
  Dffclt.i12  0.9722  0.5143   1.8905
  Dffclt.i13 -0.1045     NaN      NaN
  Dffclt.i14  0.2355  0.2848   0.8269
  Dffclt.i15  2.2984  0.3702   6.2085
  Dffclt.i16  1.7088  0.1657  10.3109
  Dffclt.i17  0.7982  0.1462   5.4585
  Dffclt.i18  0.0034  0.2019   0.0170
  Dffclt.i19  0.4344  0.4160   1.0443
  Dffclt.i20  0.5322  0.3892   1.3672
  Dffclt.i21  0.9748  0.1749   5.5718
  Dffclt.i22  2.1989  0.2248   9.7807
  Dffclt.i23  2.3523  0.3034   7.7525
  Dffclt.i24  2.5881  0.7172   3.6086
  Dffclt.i25  0.9957  0.1644   6.0548
  Dffclt.i26 -0.2439  0.3168  -0.7699
  Dffclt.i27  0.6040  0.2160   2.7956
  Dffclt.i28  0.3611  0.1299   2.7800
  Dffclt.i29 -1.0891  0.1077 -10.1158
  Dffclt.i30 -0.6164  0.4812  -1.2809
  Dscrmn.i1   0.6319  0.4368   1.4468
  Dscrmn.i2   1.8956  0.4190   4.5241
  Dscrmn.i3   1.7169  0.4210   4.0781
  Dscrmn.i4   1.0778  0.2710   3.9764
  Dscrmn.i5   0.9354  0.2044   4.5769
  Dscrmn.i6   0.5622     NaN      NaN
  Dscrmn.i7   0.8122  0.2363   3.4365
  Dscrmn.i8   0.5186  0.0843   6.1488
  Dscrmn.i9   1.5202  0.3262   4.6604
  Dscrmn.i10  1.4633  0.4762   3.0728
  Dscrmn.i11  0.5996  0.1182   5.0711
  Dscrmn.i12  0.7714  0.3154   2.4456
  Dscrmn.i13  1.1690     NaN      NaN
  Dscrmn.i14  1.2303  0.2896   4.2484
  Dscrmn.i15  1.7405  0.9728   1.7892
  Dscrmn.i16  1.6050  0.5065   3.1688
  Dscrmn.i17  2.3217  0.7876   2.9476
  Dscrmn.i18  3.1551  1.1588   2.7228
  Dscrmn.i19  0.9562  0.2872   3.3297
  Dscrmn.i20  1.3218  0.5227   2.5289
  Dscrmn.i21  0.5815  0.0856   6.7911
  Dscrmn.i22  2.8027  1.3812   2.0292
  Dscrmn.i23  2.2450  0.9678   2.3197
  Dscrmn.i24  0.7867  0.5440   1.4460
  Dscrmn.i25  0.9592  0.2003   4.7884
  Dscrmn.i26  1.3621  0.2909   4.6830
  Dscrmn.i27  1.9852  0.7067   2.8091
  Dscrmn.i28  1.5183  0.2473   6.1397
  Dscrmn.i29  1.2185  0.1310   9.2982
  Dscrmn.i30  1.3646  0.3426   3.9827
  
  Integration:
  method: Gauss-Hermite
  quadrature points: 21
  
  Optimization:
  Optimizer: nlminb
  Convergence: 0
  max(|grad|): 0.012

A estimativa da proficiência de cada indivíduo pode ser obtida com a função factor.scores():

  > manha.prof<-factor.scores(manha.tpm)
  > head(manha.prof$score)
    i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18
  1  0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   1   1
  2  0  0  0  0  0  0  0  0  0   0   0   1   0   1   1   0   0   1
  3  0  0  0  0  0  0  0  0  0   1   0   0   0   0   1   0   0   0
  4  0  0  0  0  0  0  0  0  1   1   0   0   0   0   1   0   0   1
  5  0  0  0  0  0  0  0  1  0   0   0   1   0   1   0   0   0   1
  6  0  0  0  0  0  0  0  1  0   1   0   0   0   0   1   0   0   1
    i19 i20 i21 i22 i23 i24 i25 i26 i27 i28 i29 i30 Obs Exp
  1   0   1   0   0   0   1   0   0   1   1   1   1   1   0
  2   0   1   0   0   0   1   0   0   1   0   0   1   1   0
  3   0   0   0   1   1   0   0   0   1   1   0   1   1   0
  4   0   0   1   0   1   0   0   1   1   0   0   1   1   0
  5   0   0   0   0   1   0   1   0   0   0   1   1   1   0
  6   0   1   0   0   0   0   0   0   0   1   1   0   1   0
           z1     se.z1
  1 -1.254365 0.6110829
  2 -1.800145 0.6841814
  3 -1.840739 0.6910352
  4 -1.526407 0.6573003
  5 -0.976459 0.5065874
  6 -1.330498 0.5644371
  > names(manha.prof)
  [1] "score.dat" "method"    "B"         "call"      "resp.pats"
  [6] "coef"


Figura 5: Proficiência para o turno manhã.
  > plot(manha.prof)
PIC