[英]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
可悲的是,該函數的文檔不多。 當我使用eRm
的RM()
函數估算具有逐項的項參數時,該函數具有用於歸一化為總和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.