REML 混合模型:“无法分配足够的内存”错误消息你好,
我在尝试执行 REML(随机效应)时收到“无法分配内存”的错误消息。 你能帮我弄清楚有什么问题吗?
- 我的数据集大小为 1.7 MB,有 27 K 行和 7 列。
- 我的机器是 Win 10、12 GB RAM 和 88 GB 可用硬盘空间。
- 我的模型也很简单(只有三个变量)。
- 我正在使用 JMP 13.2.1
我的期望是这种额外的计算能力对于这个相对较小的任务应该绰绰有余。 我在想我的 JMP 设置一定有问题。
你能帮我解决这个问题吗?
先感谢您!
回复:REML 混合模型:“无法分配足够的内存”错误消息谢谢你。 这对我来说是全新的。 但是,我再次检查了发票,并且小字确实是 32 位的。 我没有早点看到这一点是我的错误。
我认为这结束了我的问题。 我衷心感谢你们慷慨提供的所有帮助。只要知道这不是方法论上的错误,就会对我的士气产生很大影响。
虽然我无法在我的版本上进一步使用 JMP 来控制油门,但我将永远对你们所有人表示最大的感谢。
谢谢你。
回复:REML 混合模型:“无法分配足够的内存”错误消息您已经获得了 JMP 的单用户许可版本,它只有 32 位。 我们的年度许可版本是唯一可用的 64 位版本。
回复:REML 混合模型:“无法分配足够的内存”错误消息您应该联系 JMP 技术支持。 安装 JMP 时,它应该自动检查您机器的“位数”并安装正确的版本。 您的 Windows 10 副本是 64 位的吗? 也许这就是检查以确定要安装的 JMP 的“位数”的内容。
回复:REML 混合模型:“无法分配足够的内存”错误消息
@Dan_Obermiller
是的。 你搞定了,谢谢。JMP 安装为 32 位 .
我试图卸载/重新安装。 然而,它仍然将自己定位为 32 位,而没有选择 64 位的选项。 (在下面的屏幕截图中显示为灰色)。 任何建议将不胜感激。

------
@ih
不能感谢你。 就您而言,我确实在第二个屏幕上打开了任务管理器,并在运行模型时对其进行了观察。 它甚至没有捕获 50% 的内存或 CPU 使用率。 尽管如此,我还是在关注亚马逊上的扩展选项,并在我们知道它是 32 位的东西之前告别了薪水:)
回复:REML 混合模型:“无法分配足够的内存”错误消息希望 32 位是问题所在,但是当您接近计算机的内存限制时,似乎会发生有趣的事情。 我曾经将内存添加到无法完成分析的机器上,并且在升级分析完成后使用的内存比最初安装的要少。设置分析时,JMP 可能会暂时消耗超过 8 GB。
要确认您确实耗尽了内存,您可以尝试逐渐增加数据表中的行数并查看 Windows 任务管理器以查看您接近 100% 物理内存使用率的程度。
如果您内存不足,您也不是完全不走运,您可以对较大表的子集进行分析,然后对结果进行平均。每次迭代可能看起来像这样:
dt = current data table();
//Make a list of store numbers
FilterStoreTabluate = dt << Tabulate(
Add Table( Row Table( Grouping Columns( :Store ) ) )
);
//Get store numbers as data table, close tablate
dtFilterStore = FilterStoreTabluate << Make Into Data Table;
FilterStoreTabluate << Close Window();
//Make a column with random numbers
dtFilterStore << New Column(
"Rank",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Uniform() )
);
//Select 2500 stores
dtFilterStore << New Column(
"Keep",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( Col Rank( :Rank ) < 2500 ),
Set Selected
);
//Join the list to your original data table
dtSubsetWhole = dt << Join(
With( dtFilterStore ),
Select(
:Store,
:Time,
:Geo,
:Type of Management,
:Base Cost,
:Cost
),
SelectWith( :Keep ),
By Matching Columns( :Store = :Store ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 )
);
//close the list of stores
dtFilterStore << Close Window();
//Select only stores selected to 'keep'
dtSubsetFilter = dtSubsetWhole << Data Filter(
Location( {938, 189} ),
Add Filter( columns( :Keep ), Where( :Keep == 1 ) )
);
//Make data table with only stores you want to keep. Simply excluding where Keep = 0 might work as well.
dtSubset = dtSubsetFilter << Show Subset;
//Run the fit model回复:REML 混合模型:“无法分配足够的内存”错误消息您提供了机器的规格,但您使用的是 64 位 JMP? 有时人们可能会使用 32 位 JMP。 仅使用 32 位软件可能会限制您的计算机能够访问的内存量,而不管安装了多少。
回复:REML 混合模型:“无法分配足够的内存”错误消息是的。 这很像。 我必须说我对您如何通过脚本重新创建它印象深刻。 尊重!
我已经运行了模型,并且再次收到相同的错误消息:

在开始分析之前,我的计算机有大约 8 GB 的可用 RAM。 如果相同的实验在您端只消耗 6 GB,那么 JMP 为什么会在此处返回这样的错误消息?还有其他我应该注意的记忆措施吗?
非常感谢!
回复:REML 混合模型:“无法分配足够的内存”错误消息你比我多一个变量,但我仍然在 12 分钟内完成了我认为类似的分析,内存刚刚超过 6 GB。这张桌子现在看起来像你的吗?
Random Reset(123);
//Make some data
dt = New Table( "RandomEffect Example",
Add Rows( 27000 ), //Set the number of rows here
New Column(
"Store",
Character,
"Nominal",
Format( "Best", 12 ),
Formula( Char( Sequence( 1, 5500, 1, 5 ) ) )
),
New Column(
"Time",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Formula( Sequence( 1, 5, 1, 1 ) )
),
New Column(
"Geo",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( If( Random Normal() > 0, 1, 2 ) )
),
New Column(
"Type of Management",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( If( Random Normal() > 0, 1, 2 ) )
),
New Column(
"Base Cost",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1 | :Store != Lag( :Store, 1 ),
Round( Random Uniform( 1000, 2000 ), 0 ),
Lag( :Base Cost, 1 )
)
)
),
New Column(
"Cost",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Round(
:Base Cost + If( :Type of Management == 1,
50 + 50 * :Time,
-50 * :Time
) + If( :Geo == 1,
500 + 10 * :Time,
-10 * :Time
) + Random Normal( 0, 200 )
)
)
)
);如果是这样,这应该与您所做的分析相同:
//Analysis
dt << Fit Model(
Y( :Cost ),
Effects( :Time, :Type of Management, :Time * :Type of Management ),
Random Effects( :Store[:Geo] ),
NoBounds( 1 ),
Personality( "Standard Least Squares" ),
Method( "REML" ),
Emphasis( "Minimal Report" ),
Run(
:Cost << {Summary of Fit( 1 ), Analysis of Variance( 0 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Plot Actual by Predicted( 0 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Effect Leverage( 0 )}
)
);回复:REML 混合模型:“无法分配足够的内存”错误消息非常感谢! 脚本在这里运行得非常顺利。 我印象深刻!
但是,请允许我指出,我的数据是 5400 个存储,每个存储有 5 个观察值,即 27K 行。 我附上了它的外观示例(前几个 obs)。在每个时间段,我们都会记录商店的管理类型。现在我想在五个时间段内将成本建模为响应变量,而将管理类型建模为预测变量。 如上所述,我们有 5400 家这样的商店,因此 27K obs。 我的理解是,这是一个屡试不爽的案例。
这就是我通过 GUI 进行的操作。

这是使用完整数据时出现的错误消息:

我再次感谢您的时间和帮助。
回复:REML 混合模型:“无法分配足够的内存”错误消息下面的脚本是否会重新创建您的分析,但商店较少?在 Windows 上,JMP 消耗了 5.6 GB 的内存,并在一个处理器上花费了 6 分 11 秒来分析 60,000 行(600 个存储)。
| 行 | 内存消耗 (MB) |
| 10,000 | 650 |
| 20,000 | 1,272 |
| 30,000 | 2,294 |
| 40,000 | 3,775 |
| 50,000 | 5,592 |
| 60,000 | 6,662 |
脚本:
Random Reset(123);
//Make some data
dt = New Table( "RandomEffect Example",
Add Rows( 5400 ), //Set the number of rows here
New Column(
"Store",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( Sequence( 1, 5500, 1, 10 ) )
),
New Column(
"Type",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( Sequence( 0, 1, 1, 5 ) )
),
New Column(
"Time",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Formula( Sequence( 1, 5, 1, 1 ) )
),
New Column(
"Base Sales",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1 | :Store != Lag( :Store, 1 ),
Round( Random Uniform( 1000, 2000 ), 0 ),
Lag( :Base Sales, 1 )
)
)
),
New Column(
"Sales",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Round(
:Base Sales + If( :Type == 1,
50 + 50 * :Time,
-50 * :Time
) + Random Normal( 0, 200 )
)
)
)
);
//Analysis
dt << Fit Model(
Y( :Sales ),
Effects( :Type, :Time, :Type * :Time ),
Random Effects( :Store[:Type] ),
NoBounds( 1 ),
Personality( "Standard Least Squares" ),
Method( "REML" ),
Emphasis( "Minimal Report" ),
Run(
:Sales << {Summary of Fit( 1 ), Analysis of Variance( 0 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Plot Actual by Predicted( 0 ),
Plot Regression( 0 ), Plot Residual by Predicted( 0 ),
Plot Effect Leverage( 0 ), {:Type * :Time << {LSMeans Plot( 1 )}}}
)
);
回复:REML 混合模型:“无法分配足够的内存”错误消息你好,
太感谢了! 对于延迟回复,我深表歉意。 迷失在解决这件事的深渊中,濒临失去希望。
模型和数据类似这个由 JMP 提供。按照示例的细节,我的数据有超过 5400 个商店,每个商店都有 5 个观察值(时间)。
如示例所示,我的预测变量和随机效应是分类 (1, 2) 嵌套在位置 (1, 2) 的另一个分类变量中。 时间分为五个间隔(因此每个主题有五个观察值)。
我遵循了与 JMP 示例相同的步骤,但我总是收到错误消息。 我什至尝试不使用嵌套,错误又来了。
再次感谢!
回复:REML 混合模型:“无法分配足够的内存”错误消息你能说更多关于你正在拟合的模型吗? 你有一个分类变量作为随机效应吗? 如果有,它有多少层?
菲尔