簡體   English   中英

R:歸一化為0時避免浮點運算

[英]R: Avoid floating point arithmetic when normalizing to sum 0

我需要從正態分布中提取一個向量並將其歸一化為0,因為我想使用pwrRasch包中的pwr.rasch()函數來模擬功率。 聽起來很容易。

我這樣創建向量:

set.seed(123)
itempars <- rnorm(n = 10, mean = 0, sd = 1.8)  

為了將參數標准化為0,我從向量的最后一個元素中減去向量的總和,如下所示:

itempars[10] <- itempars[10] - sum(itempars)

當我輸入sum(itempars)它應該為0,但它是-8.326673e-17 這怎么可能? 如何將其設為0? 我已經嘗試過四舍五入,但這只會增加總數。

我不想手動選擇每個Itemparameter。 提前致謝!

編輯:

顯然,原因是浮點運算。 但是很難想象沒有辦法解決。

pwr.rasch()的錯誤pwr.rasch()如下:

Error in simul.rasch(eval(parse(text = ppar[[1]])), ipar[[1]]) : 
Item pararameters are not normalized to sum-0

可悲的是,該函數的文檔不多。 當我使用eRmRM()函數估算具有逐項的項參數時,該函數具有用於歸一化為總和0的額外參數,這給了我與我的示例類似的區別。

任何技巧都派上用場,因為我不想每手創建超過50個正態分布的item參數。 更糟。 如果我正確地理解了浮點運算,那么通常使用雙精度會出現此問題。 如果我只能使用整數作為itemparameters,那將是一個極端的局限。

我下載了pwrRasch軟件包的源代碼,並將if條件從

if (all(round(unlist(lapply(ipar, sum)), 3) != 0)) {

    stop("Item pararameters are not normalized to sum-0")

} 

if (all(round(unlist(lapply(ipar, sum)), 3) > 1e-5)) {

    stop("Item pararameters are not normalized to sum-0")

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM