1

对于家庭作业,我正在构建一个简单的代码。R 不断返回在评估 p2 时缺少 x0。我不知道为什么,因为似乎我在函数 Pareto 中正确指定了它。

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

提前谢谢了!

问候,文森特

4

2 回答 2

2

在我看来,您需要在Pareto函数中提供函数的参数integrate。像那样

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
于 2013-05-13T21:15:23.723 回答
1

一种解决方法是为 alpha2 和 x0 指定默认值,就像我在下面所做的那样,这样如果没有指定,R 将使用这些值。

Pareto <- function (x, alpha2 = (1+sqrt(2)), x0=(10- 5* sqrt(2))) ifelse(x<x0 , 0, 1 - (x0/x)^alpha2)
于 2013-05-13T21:20:10.177 回答