2013-05-13 66 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