在谷歌电子表格上运行蒙特卡洛分析



一个复杂的谷歌电子表格有很多输入和一个输出,我需要对它运行蒙特卡洛分析。在Excel中,我会使用"DYI"蒙特卡洛方法,方法是输入诸如

=norminv(rand(),expected_return,st_deviation)

在输入上,并具有带有循环的简单宏,通常运行 1000 倍或更多,触发电子表格重新计算(相当于按 F9(,并记录输出单元格的结果。

在谷歌电子表格上,我找不到从谷歌应用脚本触发电子表格重新计算的方法。

有没有办法,或者更好/更智能的架构在谷歌电子表格中进行蒙特卡洛分析(最好不要使用我不明白他们如何处理数据的加载项,或者需要无限制地访问我的所有文件(?

提前感谢!

我刚刚开发了一个插件,可让您在Google表格中运行蒙特卡洛模拟。请注意,它在Google表格中运行所有计算(这就是为什么它可能有点慢(,因此您不必担心隐私/安全问题。

这似乎可以解决问题(来自此链接(

/**
* @OnlyCurrentDoc  Limits the script to only accessing the current spreadsheet.
*/

/**
* Adds a custom menu with items to show the sidebar and dialog.
*
* @param {Object} e The event parameter for a simple onOpen trigger.
*/
function onOpen(e) {
SpreadsheetApp.getUi()
.createAddonMenu()
.addItem('Re-calculate selected cells', 'recalculate')
.addToUi();
}

/**
* Force Spreadsheet to re-calculate selected cells
*/
function recalculate(){
var activeRange = SpreadsheetApp.getActiveRange();
var originalFormulas = activeRange.getFormulas();
var originalValues = activeRange.getValues();
var valuesToEraseFormula = [];
var valuesToRestoreFormula = [];
originalFormulas.forEach(function(outerVal, outerIdx){
valuesToEraseFormula[outerIdx] = [];
valuesToRestoreFormula[outerIdx] = [];
outerVal.forEach(function(innerVal, innerIdx){
if('' === innerVal){
//The cell doesn't have formula
valuesToEraseFormula[outerIdx][innerIdx] = originalValues[outerIdx][innerIdx];
valuesToRestoreFormula[outerIdx][innerIdx] = originalValues[outerIdx][innerIdx];
}else{
//The cell has a formula.
valuesToEraseFormula[outerIdx][innerIdx] = '';
valuesToRestoreFormula[outerIdx][innerIdx] = originalFormulas[outerIdx][innerIdx];
}
})
})
activeRange.setValues(valuesToEraseFormula);
activeRange.setValues(valuesToRestoreFormula);
}

/**
* Runs when the add-on is installed; calls onOpen() to ensure menu creation and
* any other initializion work is done immediately.
*
* @param {Object} e The event parameter for a simple onInstall trigger.
*/
function onInstall(e) {
onOpen(e);
}

最新更新