[R] Saving fExtremes estimates and k-block return level with confidence intervals.
Peter Maclean
pmaclean2011 at yahoo.com
Wed Jul 6 10:29:01 CEST 2011
Hi:
I am trying to compare the results of "evir" and "fExtreme" packages. I could
not figure out how to save the "evir" package results. Also, how to pass the
results to "fExtreme" function "gevrlevelPlot" and "evir" function "rlevel.gev"
to get the return levels. I just need the values and not graphs.
#Example
library(fExtremes)
library(evir)
require(plyr)
y<- data.frame(rgev(300, xi = 0.1, mu = .5, sigma = 1.6))
colnames(y) <- c("y")
n <- data.frame(n = rep(c(1,2,3), each = 100))
z <- cbind(n,y)
y <- z$y
# Model for grouped data
##fExtremes package
z1 <- split(z,z$n)
rgf <- lapply(z1, function(x){
m <- as.numeric(x$y)
gevFit(m, block = 2, type = "mle")
})
#Save results
resf<- ldply(rgf, function(x) x at fit$par.ests)
#Qs: How to transfer rge object to "gevrlevelPlot" function to get the values?
##evir package
rge<- by(z,z[,"n"], function(x) gev(x$y, 2, method = "BFGS", control =list(maxit
= 10000)))
#Qs:How to save par.ests and par.ses?
#Qs:How to transfer rge object to "rlevel.gev" function to get the
values?
#Model for single vector
rlf <- gevFit(y, block = 2, type = "mle")
rlfp <- gevrlevelPlot(rlf, kBlocks = 2)
rlfp
rle <- gev(y, 2, method = "BFGS", control =list(maxit = 10000))
rlep<- rlevel.gev(rle, k.blocks = 2, add = FALSE)
rlep
----- Original Message ----
From: Dennis Murphy <djmuser at gmail.com>
To: Peter Maclean <pmaclean2011 at yahoo.com>
Sent: Thu, June 30, 2011 3:03:05 PM
Subject: Re: [R] Saving fExtremes estimates and k-block return level with
confidence intervals.
Hi:
The plyr package can help you out as well. As far as the estimates go,
library(plyr)
> ldply(res2, function(x) x at fit$par.ests)
.id xi mu beta
1 1 0.1033614 2.5389580 0.9092611
2 2 0.3401922 0.5192882 1.5290615
3 3 0.5130798 0.5668308 1.2105666
You could also look into the l_ply() function, which takes a list as
input and outputs nothing; however, it is usually called if one want
to make a series of similar plots. You need to write a function that
takes a generic list component and outputs a plot. Here's a fairly
trivial example:
testdf <- data.frame(gp = rep(LETTERS[1:3], each = 10), x = 1:10,
y = rnorm(30))
l_ply(split(testdf, testdf$gp), function(df) plot(y ~ x, data = df))
Alternatively,
# Observe that a data frame is used as input
pfun <- function(df) plot(y ~ x, data = df)
l_ply(split(testdf, testdf$gp), pfun)
In this case, l_ply() plots y vs. x in each of the three subgroups of
testdf separately. It appears you want to do a similar thing, but with
the list of model outputs instead; in your case, the function you
write should take a list as its sole argument. Any slots or components
that are accessed are then relative to the input list object - see the
anonymous function I wrote for the output data frame above as an
illustration.
Since it appears that gevrlevelPlot() also outputs a vector, you may
want to write a function that returns the output vector as a data
frame and call ldply() instead. I don't know enough about the
fExtremes package to write this myself, but it should be possible to
write a function for a generic model that generates both a plot and an
output data frame. The plyr package is pretty good at this sort of
thing.
HTH,
Dennis
On Wed, Jun 29, 2011 at 9:16 PM, Peter Maclean <pmaclean2011 at yahoo.com> wrote:
> I am estimating a large model by groups. How do you save the results
>and returns
> the associated quantiles?
> For this example I need a data frame
> n xi mu beta
> 1 0.1033614 2.5389580 0.9092611
> 2 0.3401922 0.5192882 1.5290615
> 3 0.5130798 0.5668308 1.2105666
> I also want to apply gevrlevelPlot() for each "n" or group.
>
> #Example
> n <- c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,3)
> y <- c(2,3,2,3,4,5,6,1,0,0,0,6, 2, 1, 0, 0,9,3)
> z <- as.data.frame(cbind(n,y))
> colnames(z) <- c("n","y")
> library(fExtremes)
> z <- split(z, z$n)
> res2 <-lapply(z, function(x){
> m <- as.numeric(x$y)
> gevFit(m, block = 1, type = c("pwm"))
> })
>> res2
> $`1`
> Title:
> GEV Parameter Estimation
> Call:
> gevFit(x = m, block = 1, type = c("pwm"))
> Estimation Type:
> gev pwm
> Estimated Parameters:
> xi mu beta
> 0.1033614 2.5389580 0.9092611
> Description
> Wed Jun 29 23:07:48 2011
>
> $`2`
> Title:
> GEV Parameter Estimation
> Call:
> gevFit(x = m, block = 1, type = c("pwm"))
> Estimation Type:
> gev pwm
> Estimated Parameters:
> xi mu beta
> 0.3401922 0.5192882 1.5290615
> Description
> Wed Jun 29 23:07:48 2011
>
> $`3`
> Title:
> GEV Parameter Estimation
> Call:
> gevFit(x = m, block = 1, type = c("pwm"))
> Estimation Type:
> gev pwm
> Estimated Parameters:
> xi mu beta
> 0.5130798 0.5668308 1.2105666
> Description
> Wed Jun 29 23:07:48 2011
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list