2017-10-13 41 views
0

我需要從正態分佈中提取一個向量並歸一化爲0,因爲我想用pwrRasch軟件包中的pwr.rasch()函數來模擬功耗。聽起來很簡單。R:在歸一化爲總和時避免浮點運算0

我創作的載體是這樣的:

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。提前致謝!

編輯:

顯然reasion是浮點運算。但很難想象沒有辦法。

pwr.rasch()錯誤按摩如下:

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

可悲的是,該功能有文檔質量很差。當我使用eRmRM()函數估計羣組項目參數時,它具有用於歸一化爲總和0的額外參數,它給了我類似於我的示例中的差異。

任何欺騙手段都派上用場,因爲我不想每手創建超過50個正常的分佈式項目參數。更糟。如果我正確地理解浮點類型,那麼這個問題通常可以在使用雙精度時出現。如果我只能使用整數作爲項目參數,那將會非常有限。

+4

那的浮點精度 –

+1

https://stackoverflow.com/questions/9508518/爲什麼是這些數字不等於/ 9508558#9508558。你能給我們詳細說明爲什麼你需要的總和是*完全*零,即在總和不完全爲零時''pwr.rasch()'失敗了嗎? –

+0

@docendodiscimus這回答**爲什麼**,但沒有解決我的問題。是不是有一個hacky的方式來處理這個? – jeypeu

回答

1

我下載的pwrRasch包的源代碼,並改變了如果條件從

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") 

}