2013-06-23 43 views
4

是否有一個函數可以用來擬合R中的頻率分佈?我知道fitdistr,但據我所知它只適用於數據向量(隨機樣本)。另外,我知道在兩種格式之間轉換並不重要,但是頻率太大以致內存不足。如何擬合R中的頻率分佈?

例如,fitdistr可以使用以下方式:

x<-rpois(100, lambda=10) 
fitdistr(x,"poisson") 

是否有會做的頻率表中的同一配件的功能?沿着線的東西:

freqt <- as.data.frame(table(x)) 
fitfreqtable(freqt$x, weights=freqt$Freq, "poisson") 

謝謝!

+2

你能舉出一個有這些問題的非矢量數據的例子嗎? – gung

+0

@gung,感謝您的快速回復。你是對的,這個問題只與R有關,所以我發表了關於發帖的道歉。我按照建議標記它。 – 2013-06-23 20:32:45

+0

沒問題,@FlorinCoras。在此期間,你會介意編輯你的Q來舉個例子嗎?當你到達SO時,人們會想知道。 – gung

回答

3

沒有我知道的用於將分佈擬合到頻率表的內置函數。請注意,從理論上講,連續分佈不適用於表格,因爲數據是離散的。當然,對於足夠大的N和足夠精細的網格,這可以被忽略。

你可以建立自己的模型擬合使用optim或任何其他優化功能,如果你知道你有興趣,我這樣做是爲here的伽瑪分佈(這是針對特定數據集壞的假設密度,但沒關係)。

代碼轉載如下。

negll <- function(par, x, y) 
{ 
    shape <- par[1] 
    rate <- par[2] 
    mu <- dgamma(x, shape, rate) * sum(y) 
    -2 * sum(dpois(y, mu, log=TRUE)) 
} 


optim(c(1, 1), negll, x=seq_along(g$count), y=g$count, method="L-BFGS-B", lower=c(.001, .001)) 
$par 
[1] 0.73034879 0.00698288 

$value 
[1] 62983.18 

$counts 
function gradient 
     32  32 

$convergence 
[1] 0 

$message 
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH" 
+0

感謝您的回答。我希望避免構建我自己的模型擬合函數,但正如你所提到的,似乎沒有曲線擬合過程與'fitdistr'類似。 –

0

對於擬合泊松分佈,您只需要樣本的平均值。然後,平均值等於lambda,這是泊松分佈的唯一參數。例如:

set.seed(1111) 
sample<-rpois(n=10000,l=10) 
mean(sample) 
[1] 10.0191 

它幾乎等於創建樣本(l = 10)的lambda值。小的差異(0.0191)是由於泊松分佈隨機值發生器的隨機性。隨着你增加n,差異會變小。 或者,您可以使用優化方法擬合分佈:

library(fitdistrplus) 
fitdist(sample,"pois") 
set.seed(1111) 

Fitting of the distribution ' pois ' by maximum likelihood 
Parameters: 
     estimate Std. Error 
lambda 10.0191 0.03165296 

但它只是在浪費時間。 有關擬合頻率數據的理論信息,您可以看到我的答案here