Calcule los pesos de un promedio ponderado en Hojas de cálculo de Google o Excel

MMsmithH

Las puntuaciones en este conjunto de datos en hojas se calculan usando un promedio ponderado de 4 variables en las columnas B:E. El promedio ponderado es el mismo para cada línea.

ingrese la descripción de la imagen aquí

Dadas varias líneas de puntajes y variables, ¿cómo se pueden descubrir los pesos en Excel o en las hojas?

La función de peso promedio en hojas es:

AVERAGE.WEIGHTED(B2,a,C2,b,D2,c,E2,d)

Posibles enfoques:

  1. Solver en Excel o Hojas
  2. Un enfoque similar a la función de optimización lineal como en esta discusión de StackOverflow
  3. Esencialmente, la solución en la que estoy pensando automatiza un proceso de adivinación (a través de regresión lineal u otro mecanismo)

Intenté configurar esto usando Solver en Excel, pero no estoy seguro de que pueda configurarse para resolver esto o si contribuyó mi falta de familiaridad con Solver, que también está disponible en hojas.

Gracias de antemano por cualquier ayuda. El conjunto de datos se comparte en esta hoja.

octavia sima

Puede usar Google Apps Script e importar la biblioteca nerdamer . Vea la configuración a continuación:

Configuración:

  1. Cree archivos gs separados que contengan estas bibliotecas.

NOTA: Sigue el orden o tendrás errores

ordenar

  1. Utilice el siguiente guión:
function solveWeights() {
 
  // Get data, process, then outputs on the actual column header.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const vars = sheet.getLastColumn() - 1;

  let data = sheet.getRange(1, 1, vars + 1, vars + 1).getValues();
  let headers = data.shift();

  let solution = [nerdamer.solveEquations(data.map(row => {
    return `${row[0]}=${row.slice(1).map((x, i) => x + headers[i + 1]).join('+')}`;
  })).toString().split(',').filter((_, i) => i % 2 == 1).map((x, i) => `${headers[i + 1]} = ${x}`)]

  sheet.getRange(1, 2, solution.length, solution[0].length).setValues(solution);
}

Data de muestra:

muestra

Producción:

producción

Nota:

  • Puede agregar un desplazamiento a su rango de salida para que no sobrescriba sus columnas.
  • La preparación de varias bibliotecas ralentiza la ejecución, por lo que puede llevar un tiempo, pero debería tardar unos 5 segundos (usando 4 columnas/datos variables)

EDITAR:

  • Si no desea utilizar bibliotecas externas, puede utilizar LinearOptimizationService. Vea la muestra a continuación:
function solveWeight() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const vars = sheet.getLastColumn() - 1;

  // fetch N rows based on how many variables are present
  const data = sheet.getRange(1, 1, vars + 1, vars + 1).getValues();
  let headers = data.shift();
  headers = headers.slice(1);

  let engine = LinearOptimizationService.createEngine();
  // add variable
  headers.forEach(header => {
    // set the range of the weights' possible values (e.g. 0 - 100)
    engine.addVariable(header, 0, 100);
  });

  // create constraint
  data.forEach(row => {
    let sum = row.shift();
    let constraint = engine.addConstraint(sum, sum);
    // set all values as coefficients
    row.forEach((value, index) => {
      constraint.setCoefficient(headers[index], value);
    });
  });

  // get lowest possible values
  engine.setMinimization();

  let solution = engine.solve();
  if (!solution.isValid())
    Logger.log('No solution: ' + solution.getStatus());
  else 
    headers.forEach(header => {
      // workaround due to rounding issue of javascript
      console.log(header + ' value is: ' + solution.getVariableValue(header).toFixed(2))
    });
}

Producción:

producción

Nota:

  • La desventaja de este enfoque es que debe declarar cuál es el rango de los pesos y otras variables, como el coeficiente por peso, etc. El código anterior asume que todos los pesos están entre 0 y 100.
  • El código en el servicio de optimización lineal solo registra los datos, puede modificar esto para que sea una función personalizada en su lugar o simplemente escribirlo directamente en la hoja.

Referencia:

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Promedio ponderado: los pesos de las capas personalizadas no cambian en TensorFlow 2.2.0

Hojas de cálculo de Google: promedio de los valores más grandes en cada fila de una matriz

Cómo obtener un promedio ponderado de una lista cuyos pesos están limitados por una variable en Python 3.6

Calcule el promedio ponderado usando un pandas / marco de datos

Hojas de cálculo de Google: duración promedio en el conjunto de datos

Script de cálculo para encontrar el promedio basado en otras columnas en Hojas de cálculo de Google

Script de cálculo para encontrar el promedio basado en otras columnas en Hojas de cálculo de Google

Combinaciones únicas mes-año en hojas de cálculo de Excel / Google

Combinaciones únicas mes-año en hojas de cálculo de Excel / Google

POSTGRESQL: ¿Promedio ponderado en lugar de promedio?

Codifique la información de formato en una fórmula de Hojas de cálculo de Google o Excel

Hojas de cálculo de Google Suma los valores de TODAS las hojas de un libro de trabajo

Consulta promedio de Hojas de cálculo de Google en columnas vacías (AVG_SUM_ONLY_NUMERIC)

Lea los criterios de matriz de la celda en Hojas de cálculo de Google

Promedio ponderado de SQL

Promedio ponderado de TSQL

Promedio ponderado de TSQL

Promedio ponderado de MySQL

Pandas: calcule el promedio ponderado por fila usando un marco de datos y una serie

Pandas: calcule el promedio ponderado por fila usando un marco de datos y una serie

Declaración QUERY de Hojas de cálculo de Google: orden por promedio

Obtener el promedio de las últimas 4 celdas Hojas de cálculo de Google

Secuencia de comandos para agregar un rango de datos en Hojas de cálculo de Google

Secuencia de comandos para agregar un rango de datos en Hojas de cálculo de Google

promedio ponderado de una matriz en python

Implemente GOOGLEFINANCE( ) en Hojas de cálculo de Google usando python (y vuelva a leer los datos)

Hojas de cálculo de Google: DSUM: no booleano en los criterios manuales

Hojas de cálculo de Google: intercambiar los ejes X e Y en el gráfico

Hojas de cálculo de Google: intercambiar los ejes X e Y en el gráfico

TOP Lista

CalienteEtiquetas

Archivo