Tengo un conjunto de datos en el que estoy tratando de hacer una regresión, y estoy fallando.
La situación:
- Miles de operadores de robots de batalla están librando batallas entre ellos utilizando robots de batalla.
- Algunos robots de batalla son fuertes y poderosos, y otros son débiles; los fuertes ganan más a menudo e infligen más daño.
- Los operadores de robots varían en habilidad, con los más hábiles ganando más a menudo y entregando más daño
- Tenemos información resumida sobre los resultados de sus batallas, pero no todos los detalles.
- Sabemos qué robots de batalla usaron en sus batallas, y cuántas veces (incluyendo cuántas de esas batallas ganaron), y sabemos el daño total que causaron (de dos tipos, daño A y daño B) en total
- Algunos robots son mejores para infligir daño A, mientras que otros dañan B
- Para los operadores de robots de batalla desconocidos basados solo en los robots que han usado en las batallas (y cuántas veces), nos gustaría estimar cuánto daño de cada tipo podrían lograr y qué porcentaje de batallas probablemente hayan ganado
Por ejemplo:
- John ha usado el Robot A para 4 batallas, y el Robot B para 2 batallas, y ha infligido 240 unidades de Daño A
- James ha usado el Robot A para 1 batalla, y el Robot B para 10 batallas, y ha causado 1010 unidades de Daño A
Por lo tanto, puedo estimar que el Robot A probablemente reparte 10 unidades de Daño A por batalla, mientras que el Robot B reparte 100 unidades de Daño A por batalla, y por lo tanto, si se le pide que calcule el Daño A infligido por Matthew, que solo ha jugado cada uno de los dos robots para 2 batallas cada una, se estimará en 220 == (10 * 2 + 100 * 2).
Desafortunadamente, los datos reales no son tan limpios y directos, probablemente porque:
- Existe una variación significativa debido a la habilidad del operador del robot, por ejemplo, un buen operador podría causar 20 unidades de daño con el Robot A, mientras que uno malo solo tiene 5 unidades.
- Existe una variación aleatoria debido a los oponentes extraídos en el caso de una muestra pequeña (por ejemplo, alguien atrae a un oponente fuerte y pierde a pesar de tener un robot mejor que el oponente), aunque eventualmente se igualaría
- Puede haber un sesgo de selección menor en el sentido de que los mejores operadores de robots logran elegir los mejores robots para combatir más a menudo
El conjunto de datos real está disponible aquí (630k entradas de resultados conocidos del operador de batalla):
El conjunto de datos está organizado de la siguiente manera, con una entrada de operador de robot por fila:
- Columna 1 sin etiqueta - ID del operador
- batallas: total de batallas en las que este operador ha participado
- victorias: batallas totales que ganó este operador
- derrotas: batallas totales que este operador ha perdido
- Daño A - Daño total A puntos infligidos
- daño B - Daño total B puntos infligidos
- 130 pares de columnas de la siguiente manera:
- batallas_ [robotID] - batallas usando robot [robotID]
- victorias_ [robotID] - victorias obtenidas usando robot [robotID]
Lo que he hecho hasta ahora:
- Intenté un par de modelos lineales usando el
biglm
paquete R que construye una fórmula comodamageA ~ 0 + battles_1501 + battles_4201 + ...
para tratar de ajustar los valores "esperados" para cada uno de los robots. - Lo mismo, pero eliminando la intercepción de origen forzada al no incluir
0 +
en la fórmula - Igual, pero también incluido
victories_[robotID]
en las variables independientes - Igual que antes, pero solo seleccionando aquellos operadores de robots cuyos números de victoria están cerca de sus números de derrota
- Un modelo de regresión lineal para saber
damageA ~ 0 + battles_1501 + battles_non_1501
dóndebattles_non_1501
están todas las batallas en robots que no sean el modelo de robot 1501. Luego se repite para todos los otros tipos de robots.
Hice comprobaciones de cordura observando los valores predichos de daño A y daño B, así como comparando la proporción de victorias / batallas con la proporción real de victorias / batallas que podemos calcular con precisión para cada uno de los robots.
En todos los casos, si bien los resultados no fueron completamente incorrectos, sí lo fueron como para ver que el modelo no funciona del todo. Por ejemplo, algunos robots lograron números de daño negativo que realmente no deberían suceder ya que no puedes hacer daño negativo en una batalla.
En el caso de que también usara los victories_[robotID]
valores conocidos en la fórmula, muchos de los battle_[robotID]
coeficientes terminaron siendo números negativos algo grandes, por lo que intenté estimar el operador "promedio" battle_[robotID] + victories_[robotID] / 2
pero eso tampoco dio resultados razonables.
Estoy un poco sin ideas ahora.
fuente
lme
lugar de mibiglm
, pero obviamente necesito leer mucho más sobre esto para comprender exactamente qué proporcionarle como parámetros.Respuestas:
Probablemente esto requiera un modelado de ecuaciones simultáneas , en lugar de una regresión lineal.
La probabilidad de éxito depende de dos ecuaciones separadas, una que mide la calidad del oponente, la persona y la máquina, y la otra que mide la calidad del yo, la persona y la máquina. Se oponen directamente entre sí, pero solo se observa un resultado. Sin hacer SEM, creo que sus coeficientes están sesgados, por lo que pueden ser insignificantes. Esto recuerda la estimación de las ecuaciones de oferta y demanda , que a menudo no generarán nada a menos que estén bien preparadas.
fuente