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.
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:
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.
Puede usar Google Apps Script e importar la biblioteca nerdamer . Vea la configuración a continuación:
NOTA: Sigue el orden o tendrás errores
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);
}
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))
});
}
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
Déjame decir algunas palabras