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.
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:
[,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.
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
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
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.
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
[1] "score.dat" "method" "B" "call" "resp.pats"
[6] "coef"