通過 JSL 和列號/名稱在逐步回歸中添加/刪除效果大家好!
我確實需要這方面的幫助,因為我的論文使用的是 JMP 和 JSL。 我目前正在通過 JSL 使用 JMP 來分析一些數據,我的重點是逐步回歸。 我將順便附上一些代碼片段,以便於提供幫助。
基本上
1.) 如何通過列號在初始模型上添加多重效果?
目前,我可以僅使用我想要的列號設置 Y,但無法使用列號添加 X。
我希望事情從此開始
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
對此
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) 如何消除最不顯著的影響?
運行原始腳本後,我發現有些效果並不是那麼顯著。 默認腳本將使用
obj << Remove(:/*hardcoded column name*/);
但我希望它靈活,這樣我就可以自動化它,使它看起來像這樣
obj << Remove(:Column Name(indextoremove));
但上面的代碼片段會產生此錯誤消息
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
謝謝!
回复:通過 JSL 和列號/名稱在逐步回歸中添加/刪除效果<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>回复:通過 JSL 和列號/名稱在逐步回歸中添加/刪除效果你好,我們又見面了@cwillden !
受到我之前所做的事情的啟發並結合您的代碼片段,我更改了代碼中的一些內容。 現在,它起作用了!
非常感謝你!
回复:通過 JSL 和列號/名稱在逐步回歸中添加/刪除效果你好@cwillden ,
感謝回复! 你極大地解決了我的第一個問題(添加多種效果)!
關於第二個問題,我已經能夠刪除 p 值最大的項。 然而,我相信這不是我用來刪除術語的標準。
我正在做的事情(如果我是通過點擊方法而不是腳本來執行此操作)是:
- 加載表。
- 運行擬合模型模塊
- 添加 Y 和 X。
- 選擇逐步回歸
- 構建模型。 (點擊“前往”)
- 單擊“運行”以顯示報告。
- 轉至參數估計表。
- 根據 Prob>|t| 檢查並刪除項。
我相信您發送的代碼是根據逐步擬合窗口的當前估計表的 Prob>F 刪除項。 我想要做的是根據 Prob>|t| 刪除術語報告的參數估計表:擬合模型窗口。
再次感謝!
回复:通過 JSL 和列號/名稱在逐步回歸中添加/刪除效果你好@pedbundoc ,
歡迎來到社區,祝您論文順利。
與其他對話框輸入不同,效果輸入不僅僅是列列表。您還可以在該參數中指定更高階的效果。您可以使用“column(1)、column(2)、column(3)、column(1)*column(2)、column(2)*column(2)”等構建效果列表。此外,在任何情況下,您都不能(我相信)在Column() 函數中指定多個索引。更好的解決方案是獲取列引用列表並使用列索引對列表進行子集化,如下所示:
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
現在,JMP 似乎不喜歡讓我直接插入變量effect_cols 作為擬合模型腳本的Effects 參數。它查找名為“effect_cols”的列,而不是評估列表。因此,您可以從字符串中解析擬合模型腳本,我們將其替換為effect_cols的評估,如下所示:
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
如果您只有主效應,這應該對您有用。否則,你就必須更有創意。還是完全可行的。
現在,關於消除效果的問題。只有當您給它一個與其中一個效果的名稱匹配的字符串參數時,Remove 才會起作用。您可以像我們之前那樣使用 eval(parse(eval insert())) 序列來解析字符串,其中我們將其子放入包含要刪除的效果名稱的變量中。下面是一個示例,我採用最大 p 值的效應並將其刪除:
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);希望有幫助!