2013-05-13 59 views
1

對於作業分配,我正在構造一個簡單的代碼。 R在評估p2時總是返回x0缺失。我無法弄清楚爲什麼,因爲它好像我在帕累託函數中正確地指定了它。調試簡單的R代碼

lab1 <- 50; mu <- 1; sigma <- 1 alpha1 <- 1 ; beta1 <- 1 
lab2 <- 3; mu <- 5; sigma <- 5 
alpha2 <- (1+sqrt(2)); x0 <- (10- 5* sqrt(2)) 
ES1 <- lab1 * alpha1/beta1; VarS1 <- lab1 * alpha1/(beta1^2) 
ES2 <- lab2 * alpha2*x0/(alpha2-1); VarS2 <- lab2 * alpha2*x0^2/((alpha2-1)^2*(alpha2-2)) 
MM <- trunc(ES1 + ES2 + 10*sqrt(VarS1 + VarS2)) 
p1 <- pgamma((0:(MM-1)+0.5), alpha1, beta1) ##cdf 
p1 <- c(p1,1) - c(0,p1) ## pdf 
Pareto <- function (x, alpha2, x0) ifelse(x<x0 , 0, 1 - (x0/x)^alpha2) 
p2 <- integrate(Pareto, lower = 0, upper = (MM-1)+0.5) ##cdf 
p2 <- c(p2,1) - c(0,p2) ## pdf 

非常感謝提前!

問候,文森特

+0

函數帕累託不完整,那是什麼? – 2013-05-13 21:04:21

+0

我現在改變了它。不知道爲什麼它最初沒有複製 – Vincent 2013-05-13 21:07:00

回答

1

一種解決方法是指定的α2和X0默認訪問它,因爲我已經做了如下的價值,所以如果沒有指定,R將使用這些值。

Pareto <- function (x, alpha2 = (1+sqrt(2)), x0=(10- 5* sqrt(2))) ifelse(x<x0 , 0, 1 - (x0/x)^alpha2) 
2

在我看來,你需要在integrate函數中提供您Pareto函數的參數。這樣

p2 <- integrate(Pareto, lower = 0, upper = (MM-1)+0.5, x0=x0, alpha2=alpha2) ##cdf 

並訪問integrate後,你有美元符號

p2 <- c(p2$value,1) - c(0,p2$value) ## pdf 
+0

@JeffAllen,爲我工作。 – 2013-05-13 21:19:02