REML 混合模型:“無法分配足夠的內存”錯誤消息你好,
我在嘗試執行 REML(隨機效應)時收到“無法分配內存”的錯誤消息。 你能幫我弄清楚出了什麼問題嗎?
- 我的數據集大小為 1.7 MB,有 27 K 行和 7 列。
- 我的機器是 Win 10、12 GB RAM 和 88 GB 可用硬盤空間。
- 我的模型也很簡單(只有三個變量)。
- 我正在使用 JMP 13.2.1
我的期望是這種額外的計算能力對於這個相對較小的任務來說應該綽綽有餘。 我在想我的 JMP 設置一定有問題。
你能幫我解決這個問題嗎?
先感謝您!
回复:REML 混合模型:“無法分配足夠的內存”錯誤消息謝謝。 這對我來說是全新的。 但是,我再次檢查了發票,細則上確實寫著 32 位。 我沒有早點看到這一點是我的錯誤。
我認為這對我來說是個問題。 我衷心感謝你們慷慨提供的所有幫助。僅僅知道這不是方法上的錯誤,就對我的士氣產生了很大的影響。
雖然我將無法再使用 JMP 來限制我的版本,但我將永遠對你們所有人表示衷心的感謝。
謝謝。
回复:REML 混合模型:“無法分配足夠的內存”錯誤消息您已獲得僅 32 位的 JMP 單用戶許可版本。 我們的年度許可版本是唯一可用的 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 混合模型:“無法分配足夠的內存”錯誤消息你能多說說你正在擬合的模型嗎? 你有分類變量作為隨機效應嗎? 如果是這樣,它有多少個級別?
菲爾