Ver Mensaje Individual
  #18 (permalink)  
Antiguo 21/11/2008, 04:03
Avatar de Deschamps
Deschamps
 
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 7 meses
Puntos: 8
Respuesta: "Encuesta" . . .

Buenas,

Ahora que tengo algo más de tiempo, te amplío un poco la respuesta que te di antes:

Cita:
Iniciado por Salathar Ver Mensaje
(..) al final se da el grupo al que pertenece (funciona como dije en mi anterior mensaje dandole un valor a cada respuesta y sumandolo). He observado que muchos usuarios estan perteneciendo a un grupo, por lo que creo que el sistema no es "justo". (..)
Como ya te había comentado antes, no puedes hacer un reparto "justo" con unos valores discretos. Según tu planteamiento, el total de posibles respuestas que obtienes se corresponde con las variaciones con repetición de 4 elementos, tomados de 3 en 3. Como ya te dije, esto da un total de 64 posibles situaciones finales. Para que el "reparto" fuese equitativo deberías asignar a cada resultado final (el grupo de destino) una cantidad idéntica de situaciones (16 en este caso, ya que son 4 grupos).

El caso es que, asignando puntuaciones a cada opción de las preguntas, no obtienes 64 resultados "distintos" sino que estableces "clases de puntuaciones", y esas clases sólo pueden dividirse de forma arbitraria... o como dije antes, "a huevo". Para explicarme mejor, te detallo con código la idea:

Código PHP:
$preguntas 3;
$opciones = array( 531);

function 
cuentaVarR($opc$r$p, &$arr) {
    if (
$r == 0) {
        isset(
$arr[$p]) ? $arr[$p]++ : $arr[$p] = 1;
    } else {
        foreach(
$opc as $o)
            
cuentaVarR($opc$r-1$p+$o$arr);
    }

En ese código, defino el número de preguntas totales (3 en tu caso) y el array para las opciones por pregunta donde se incluye la puntuación para cada opción (el número de opciones lo determina el número de elementos del array). En tu caso, son 4 opciones, con puntuación de 5,3,1 y 0 respectivamente. La función cuentaVarR es una función recursiva con la que literalmente recorro todas las variaciones con repetición para N elementos (el total de elementos definidos en $opciones) tomados de R en R (el número de preguntas) y para cada variación sumo la puntuación que le corresponde. Posteriormente, clasifico estas puntuaciones, generando un array donde el índice se corresponde con los puntos totales y el valor de ese elemento se corresponde con la cantidad de variaciones que suman esa puntuación.

Si llamas a la función e imprimes el resultado:

Código PHP:
cuentaVarR($opciones$preguntas0$prueba);
ksort($prueba);
print_r($prueba); 
... obtienes:

Código:
Array
(
    [15] => 1
    [13] => 3
    [11] => 6
    [10] => 3
    [9] => 7
    [8] => 6
    [7] => 6
    [6] => 9
    [5] => 6
    [4] => 6
    [3] => 4
    [2] => 3
    [1] => 3
    [0] => 1
)
... donde puedes ver todos los casos posibles. Por ejemplo, para obtener una puntuación final de 9 hay 7 maneras distintas de responder la "encuesta" (el elemento con índice 9 tiene como valor 7). Con esto, y atendiendo al reparto de grupos que definías en un mensaje anterior:

Cita:
Iniciado por Salathar Ver Mensaje
(..)
si el las respuestas suman 3 o menos se da 'muy mal' (por ejemplo)
si da mas de 3 y menos o igual a 7 de pone 'mal'
si suma 8 o mas hasta 11 (este incluido) se da como resultado 'bien'
si suma mas de 12 el resultado en 'muy bien'.
(..)
... estás repartiendo los 64 casos de esta manera: 11 - 27 - 22 - 4, con una desproporción evidente entre los distintos grupos.
Nota: ten en cuenta que con las puntuaciones que asignas es imposible obtener puntuaciones finales de 12 y 14.

Cita:
(..) Y estoy buscando la forma de arreglar esto (..)
Si no quieres cambiar de planteamiento para definir el reparto... las opciones pasan por cambiar las puntuaciones, aumentar el número de pregunas o de opciones para cada una... o de todo un poco. Pero nunca vas a conseguir un 25% exacto con este procedimiento.

Un saludo.

Última edición por Deschamps; 21/11/2008 a las 05:20 Razón: correcciones