PsycheMetrics Essence v2.0 es un sistema modular y escalable de evaluación psicométrica que combina rigor académico con experiencia de usuario excepcional. Diseñado para ser fácilmente personalizable sin tocar el código principal.
- 🧠 Motor adaptativo basado en TRI (Teoría de Respuesta al Ítem)
- 📊 Sistema de feedback académico con explicaciones detalladas
- 🎨 UI/UX moderna con tema claro/oscuro
- 📱 Completamente responsivo y accesible
- 🔧 Totalmente modular - cambia banco de ítems sin tocar código
- 📈 Análisis psicométrico avanzado con métricas profesionales
- 💾 Exportación de datos para análisis posterior
- 🚀 Preparado para escalamiento a nivel institucional
psychemetrics-essence/
├── 📄 psychemetrics_essence_v2.html # Aplicación principal
├── 📁 config/
│ └── 📄 app-config.js # Configuración global
├── 📁 data/
│ └── 📄 items.json # Banco de ítems personalizable
├── 📄 item-bank-guide.md # Guía para crear bancos
└── 📄 README.md # Este archivo
- Motor Psicométrico (
AdaptiveEngine) - Gestor de Datos (
DataManager) - Gestor de Banco de Ítems (
ItemBankManager) - Sistema de Configuración (
APP_CONFIG) - Interfaz Modular (CSS + JS separado)
-
Descarga los archivos:
psychemetrics_essence_v2.htmlconfig/app-config.jsdata/items.json
-
Estructura en tu servidor:
tu-sitio/ ├── index.html (o como quieras llamar) ├── config/ │ └── app-config.js └── data/ └── items.json -
Abre en navegador - ¡Listo!
-
Edita
data/items.jsoncon tus preguntas:[ { "id": 1, "question": "Tu pregunta aquí", "options": ["Opción A", "Opción B", "Opción C"], "correctAnswer": 0, "difficulty": "medium", "category": "tu-tema", "discrimination": 1.0, "feedback": { "correct": "¡Bien!", "incorrect": "Inténtalo otra vez" } } // ... más ítems ] -
Modifica
config/app-config.jssi necesitas:const APP_CONFIG = { app: { name: "Tu Evaluación Personalizada" }, // ... más configuraciones };
-
¡Listo! Tu evaluación personalizada funciona
Cada ítem debe tener esta estructura:
{
"id": 1, // Identificador único
"question": "¿Cuál es la capital de Francia?", // Pregunta
"options": ["Madrid", "París", "Roma"], // Opciones de respuesta
"correctAnswer": 1, // Índice de respuesta correcta
"difficulty": "medium", // "easy", "medium", "hard"
"category": "geografia", // Categoría temática
"discrimination": 1.2, // Parámetro TRI (0.5-2.5)
"feedback": {
"correct": "🎯 ¡París es la capital de Francia!",
"incorrect": "❌ París es la capital, no Madrid ni Roma"
}
}El sistema valida automáticamente:
- ❌ IDs duplicados
- ❌ Respuestas fuera de rango
- ❌ JSON malformado
⚠️ Falta de feedback (se generan defaults)⚠️ Discriminación inválida (se ajusta a 1.0)
El sistema calcula automáticamente:
- Total de ítems
- Distribución por dificultad
- Distribución por categoría
- Discriminación promedio
// Ver en consola del navegador:
state.itemBankManager.getBankStats()const APP_CONFIG = {
modes: {
adaptive: {
name: "Mi Modo Adaptativo",
default: true, // Modo por defecto
maxItems: 25 // Máximo de ítems
},
fixed: {
name: "Examen Tradicional",
defaultItems: 20 // Cantidad por defecto
},
competitive: {
enabled: false // Desactivar modo competitivo
}
}
};const APP_CONFIG = {
themes: {
default: "dark", // Tema por defecto
available: ["light", "dark"] // Temas disponibles
},
ui: {
animations: {
enabled: false // Desactivar animaciones
},
responsive: {
mobileBreakpoint: 900 // Breakpoint personalizado
}
}
};const APP_CONFIG = {
psychometrics: {
adaptive: {
initialTheta: 0, // Habilidad inicial
convergenceSE: 0.3, // Convergencia más rápida
minItems: 3, // Mínimo de ítems
maxItems: 20 // Máximo de ítems
},
itemSelection: {
maxInfoWeight: 0.7, // Menos peso a máxima información
randomWeight: 0.5 // Más aleatoriedad
}
}
};El motor adaptativo implementa Teoría de Respuesta al Ítem de 2 parámetros:
P(θ) = 1 / (1 + exp(-a(θ - b)))
Donde:
- θ = habilidad del sujeto (-3 a +3)
- a = discriminación del ítem (qué tan bien discrimina)
- b = dificultad del ítem (-3 fácil, +3 difícil)
updateAbility(response, item) {
const stepSize = adaptive / (1 + responses.length * 0.15);
if (response) {
this.theta += stepSize * item.discrimination; // Hacia más difícil
} else {
this.theta -= stepSize * item.discrimination; // Hacia más fácil
}
// Error estándar disminuye con más respuestas
this.se = Math.max(0.15, this.se * 0.92);
}- Máxima información en la habilidad actual
- Evita ítems ya administrados
- Ajusta por discriminación
- Fallback aleatorio si es necesario
| Métrica | Descripción | Rango |
|---|---|---|
| Theta (θ) | Habilidad estimada | -3 a +3 |
| SE | Error estándar | 0 a 3 |
| Confianza | Precisión de estimación | 0 a 95% |
| Aciertos | Respuestas correctas | 0 a 100% |
| Convergencia | ¿Se estabilizó la estimación? | Boolean |
{
"user": "María González",
"abilityEstimate": 0.45,
"abilityPercentage": 74,
"standardError": 0.23,
"confidence": 92,
"reliabilityEstimate": 0.92,
"convergence": true,
"responsePattern": [1, 0, 1, 1, ...],
"abilityHistory": [...]
}El sistema exporta JSON estructurado con:
- Metadatos de la evaluación
- Patrón de respuestas completo
- Historia de estimación de habilidad
- Estadísticas del banco de ítems
- Timestamp preciso
const APP_CONFIG = {
integrations: {
backend: {
enabled: true,
type: "supabase",
endpoint: "https://tu-proyecto.supabase.co",
apiKey: "tu-clave-publica",
autoSync: true
}
}
};Tabla Supabase requerida:
CREATE TABLE attempts (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_name text NOT NULL,
data jsonb NOT NULL,
created_at timestamp with time zone DEFAULT timezone('utc'::text, now())
);Con el backend, puedes crear:
- Ver progreso de estudiantes en tiempo real
- Generar reportes de clase
- Analizar ítems problemáticos
- Exportar datos para R/SPSS
// Para uso institucional
const APP_CONFIG = ConfigUtils.applyPreset('institution');
// O configuración personalizada
const customConfig = {
security: {
sanitizeInput: true,
validateExternalData: true
},
integrations: {
backend: { enabled: true },
analytics: { enabled: true }
}
};const universityConfig = {
modes: {
adaptive: { default: true },
competitive: { enabled: true }
},
itemBank: {
categories: [
"construction", "validation", "statistics",
"irt", "applications"
]
},
integrations: {
lms: { enabled: true, type: "moodle" }
}
};const clinicalConfig = {
psychometrics: {
adaptive: {
minItems: 10,
convergenceSE: 0.2 // Mayor precisión
}
},
data: {
export: { anonymize: true },
security: { validateExternalData: true }
}
};const corporateConfig = {
modes: { competitive: { enabled: true } },
ui: {
notifications: { enabled: true },
accessibility: { largeText: true }
},
integrations: {
backend: { enabled: true },
analytics: { enabled: true }
}
};1. Banco de ítems no carga:
// Verificar en consola:
state.itemBankManager.hasCustomBank() // false = usa default
state.itemBankManager.getBankStats() // Ver estadísticas2. Adaptativo no funciona:
// Verificar en consola:
state.engine.theta // Debe cambiar con respuestas
state.engine.abilityHistory // Debe tener datos3. Resultados no se guardan:
// Verificar localStorage:
localStorage.getItem('psychemetrics_essence_v2')// Activar modo debug
const APP_CONFIG = {
advanced: {
debug: {
enabled: true,
console: true,
performance: true
}
}
};- Revisa la Guía de Troubleshooting
- Incluye el navegador y versión
- Adjunta console logs (si debug está activado)
- Especifica el caso de uso
- Menciona si es para institución o personal
- Incluye mockups si es posible
- Fork del repositorio
- Seguir el estilo de código existente
- Probar cambios antes del PR
MIT License - libre para uso personal, educativo y comercial.
- Descarga los archivos principales
- Personaliza
data/items.jsoncon tu contenido - Modifica
config/app-config.jssi es necesario - ¡Despliega! - Tu evaluación personalizada está lista
¿Necesitas ayuda específica? Dime tu caso de uso y te doy la configuración exacta.
Diseñado con ❤️ por MiniMax Agent - La evaluación psicométrica al alcance de todos.