Je souhaite utiliser le package MPTinR afin d'appliquer le Quad Processing model de Conrey et al., 2005 sur des données IAT.
J'ai importé mes données (réponses correctes et incorrectes) au format suivant :
Code : Tout sélectionner
15 0 6 0 15 0 15 0 14 1 5 1
14 1 6 0 14 1 15 0 15 0 6 0
15 0 5 1 15 0 14 1 15 0 6 0
13 2 6 0 14 1 14 1 11 4 5 1
14 1 6 0 15 0 14 1 15 0 5 1
15 0 5 1 15 0 15 0 14 1 6 0
etc. sur 228 lignes correspondant à mes 228 participants.
J'établis ensuite mon modèle au format easy et directement sur le script R
Code : Tout sélectionner
Quad_Model_IAT_SOI<-"
# Arbre Soi,Compatible : 1er = Correct 2nd = Incorrect
ACsoipos*D*OB + ACsoipos*D*(1-OB)+ACsoipos*(1-D)+(1-ACsoipos)*D+(1-ACsoipos)*(1-D)*G # Correct|Soi,Compatible
(1-ACsoipos)*(1-D)*(1-G) # Incorrect|Soi,Compatible
# Arbre Positif,Compatible : 1er = Correct 2nd = Incorrect
ACsoipos*D*OB+ACsoipos*D*(1-OB)+ACsoipos*(1-D)+(1-ACsoipos)*D+(1-ACsoipos)*(1-D)*G # Correct|Positif,Compatible
(1-ACsoipos)*(1-D)*(1-G) # Incorrect|Positif,Compatible
# Arbre Neutre,Compatible: 1er = Correct 2nd = Incorrect
AC*D*OB+AC*D*(1-OB)+AC*(1-D)+(1-AC)*D+(1-AC)*(1-D)*(1-G) # Correct|neutre,compatible
(1-AC)*(1-D)*G # Incorrect|neutre,compatible
# Arbre Soi,Incompatible: 1er = Correct 2nd = Incorrect
ACsoipos*D*OB+(1-ACsoipos)*D+(1-ACsoipos)*(1-D)*(1-G) # Correct|Soi,incompatible
ACsoipos*D*(1-OB)+ACsoipos*(1-D)+(1-ACsoipos)*(1-D)*G # Incorrect|Soi,incompatible
# Arbre Positif,Incompatible: 1er = Correct 2nd = Incorrect
ACsoipos*D*OB+(1-ACsoipos)*D+(1-ACsoipos)*(1-D)*G # Correct|positif,incompatible
ACsoipos*D*(1-OB)+ACsoipos*(1-D)+(1-ACsoipos)*(1-D)*(1-G) # Incorrect|positif,incompatible
# Arbre Neutre,Incompatible: 1er = Correct 2nd = Incorrect
AC*D*OB+AC*D*(1-OB)+AC*(1-D)+(1-AC)*D+(1-AC)*(1-D)*(1-G) # Correct|neutre,incompatible
(1-AC)*(1-D)*G # Incorrect|neutre,incompatible
"
Puis je vérifie mon modèle (notamment si il est bien identifiable)
Code : Tout sélectionner
check.mpt(textConnection(Quad_Model_IAT_SOI))
$probabilities.eq.1
[1] TRUE
$n.trees
[1] 6
$n.model.categories
[1] 12
$n.independent.categories
[1] 6
$n.params
[1] 5
$parameters
[1] "AC" "ACsoipos" "D" "G" "OB"
Jusque là tout va bien (sauf erreur de ma part).
Je fais ensuite un fit de mon modèle et là les choses se compliquent :
Code : Tout sélectionner
M_IAT<-fit.mpt(Data_IATpos_SOI,textConnection(Quad_Model_IAT_SOI),restrictions.filename = NULL)
Voici ce que R m'indique :
Code : Tout sélectionner
Presenting the best result out of 5 minimization runs.
[1] "Model fitting begins at 2017-05-19 12:08:30"
Optimization routine for dataset(s) 1 2 3 4 5 6 7 9 10 11 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 129 130 131 132 133 134 135 136 137 139 141 142 143 144 145 146 148 149 150 151 152 153 154 155 156 157 158 159 160 161 163 164 165 166 167 168 169 171 172 173 174 175 176 177 179 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 197 198 199 200 201 202 203 205 206 207 208 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 227 228
did not converge succesfully. Tried again with use.gradient == FALSE.
Optimization for dataset(s) 1 2 3 5 6 9 11 14 18 19 20 21 22 23 24 25 26 27 29 35 36 37 38 39 42 45 46 48 49 51 53 54 55 56 57 58 59 60 61 62 64 65 66 67 69 70 71 73 74 75 76 77 80 82 85 88 90 91 92 96 97 99 100 101 102 103 104 105 106 109 110 114 115 116 117 118 119 122 123 124 126 127 130 132 133 134 136 137 141 142 144 145 146 151 152 153 155 156 158 159 161 163 164 166 169 171 173 175 176 177 179 182 184 185 186 187 188 189 190 191 193 194 195 197 198 199 200 201 202 203 205 206 207 208 211 212 213 214 215 216 219 220 221 224 227
using numerically estimated gradients produced better results. Using those results.
Old results saved in output == 'full' [['optim.runs']].
Optimization for dataset(s) 4 7 10 13 15 17 28 33 34 40 41 44 47 52 63 72 78 79 81 83 84 87 89 93 94 95 98 111 112 113 120 121 125 129 131 135 139 143 148 149 150 154 157 160 165 167 168 172 174 181 183 192 210 217 218 222 223 225 228
using numerical estimated gradients did NOT produce better results.
Keeping original results. Use output = 'full' for more details.
[1] "Model fitting stopped at 2017-05-19 12:09:12"
Time difference of 41.89842 secs
Warning message:
In fit.mptinr(data = data, objective = llk.model, param.names = param.names, :
Error code(s) in final results: 0 1. The following dataset(s) did not converge succesfully in the best fitting optimization run:
4 7 10 13 15 17 28 33 34 40 41 44 47 52 63 72 78 79 81 83 84 87 89 93 94 95 98 111 112 113 120 121 125 129 131 135 139 143 148 149 150 154 157 160 165 167 168 172 174 181 183 192 210 217 218 222 223 225 228
Que dois-je penser du fait que les résultats pour certaines données n'utilisent pas les mêmes gradients et que R me garde les nouveaux résultats pour certaines et les anciens pour d'autres ?
Que dois-je penser des données dont les anciens résultats (issus des gradients de base) sont gardés et qui sont également celles associées au code d'erreur à la fin ?
Mais surtout que dois-je penser des résultats que j'obtiens si je regarde les paramètres, goodness of fit etc. ?
A priori mon modèle ne fit pas bien les données:
Code : Tout sélectionner
M_IAT[["goodness.of.fit"]][["aggregated"]]
Log.Likelihood G.Squared df p.value
-3230.633 39.68524 1 2.983717e-10
M_IAT[["parameters"]][["aggregated"]]
estimates lower.conf upper.conf
AC 0.58886870 NA NA
ACsoipos 0.07812615 NA NA
D 0.87009315 NA NA
G 0.68433903 NA NA
OB 0.99998155 NA NA
Les IC ne sont pas calculé mais j'ai cru comprendre dans la documentation du package que ce n'était pas un problème pour les paramètres obtenus et que je peux les calculer avec un bootstrap par la suite.
Est-ce que mes données qui présentent de nombreux 0 (c.à.d. pas de réponse incorrecte) peuvent être une explication ?
Je sollicite donc un peu d'aide de la part de quiconque pourra m'en apporter afin de me dépatouiller de ce brouillard :)
Merci par avance !