Hi Cliff,

Excellent, just what I needed -- wish I had thought of that myself. Thanks a lot!

Jacob


On 13 Aug 2009, at 01:49, Clifford Long wrote:

Hi Jacob,

At the risk of embarrassing myself, I gave it a shot.  I'll throw this
out on the list, if for no other reason than perhaps someone with
higher wattage than myself might tear it apart and give you something
both useful and perhaps elegant (from an R coding standpoint).

(see the following ... it just ran for me, so I hope it will for you, too)

If this isn't what you need, I'll shut up and watch and learn from the others.

Regards,

Cliff


I tried to put together something that might work as an example ...
based on a simple linear regression model, but using the GLM routine.

Once the model was created, I used 'predict' based on the model
outcome and the original x values.

I then used 'predict' based on the model outcome and new x values,
along with a function for simulation of the distribution at the new x
values.

At the


#----------------------------------------------
# Create sample data set to use with GLM
#   (assume first order linear model for now)
#----------------------------------------------
b0 = 10
b1 = 0.3
x = sort(rep(seq(1,11, by=2), 10))

fn.y = function(x1){y1 = b0 + b1*x1 + rnorm(n=1, mean=0, sd=1)}

y = sapply(x, fn.y)


xydata = data.frame(cbind(x, y))


model1 = glm(y ~ x, family = gaussian, data = xydata)


#----------------------------------------------
# Generate new x values
#   run new x values through 'predict'
#----------------------------------------------

newx = data.frame(xnew = sort(rep(seq(2,10, by=2), 12)))

y.pred = predict(model1, newx, se.fit = TRUE)


#----------------------------------------------
# Generate simulated values based on new x values
#   and function based on outcome of 'predict' routine
#----------------------------------------------

fn.pred = function(fit, sefit){rnorm(n=1, mean=fit, sd=sefit*sqrt(60))}

pred.sim = sapply(y.pred$fit, fn.pred, y.pred$se.fit)


#----------------------------------------------
# Generate simulated values based on orig x values
#   using 'simulate' routine
#----------------------------------------------

y.sim = simulate(model1, nsim = 1)


#----------------------------------------------
# Plot original x, y values
#   then add simulated y values from 'simulate' based on orig x values
#   and the add simulated values from 'predict' and function based on
new x values
#----------------------------------------------
plot(x, y)
lines(x, y.sim$sim_1, col='red', type='p')
lines(newx[,1], pred.sim, col='darkblue', type='p')

#----------------------------------------------
# END
#----------------------------------------------



On Wed, Aug 12, 2009 at 2:51 PM, Jacob Nabe- Nielsen<jacobn...@me.com> wrote:
Hi Cliff -- thanks for the suggestion.

I tried extracting the predicted mean and standard error using predict(). Afterwards I simulated the dependent variable using rnorm(), with mean and standard deviation taken from the predict() function (sd = sqrt(n)*se). The points obtained this way were scattered far too much (compared to points
obtained with simulate()) -- I am not quite sure why.

Unfortunately the documentation of the simulate() function does not provide much information about how it is implemented, which makes it difficult to judge which method is best (predict() or simulate(), and it is also unclear
whether simulate() can be applied to glms (with family=gaussian or
binomial).

Any suggestions for how to proceed?

Jacob


On 12 Aug 2009, at 13:11, Clifford Long wrote:

Would the "predict" routine (using 'newdata') do what you need?

Cliff Long
Hollister Incorporated



On Wed, Aug 12, 2009 at 4:33 AM, Jacob Nabe- Nielsen<jacobn...@me.com>
wrote:

Dear List,

Does anyone know how to simulate data from a GLM object correponding
to values of the independent (x) variable that do not occur in the
original dataset?

I have tried using simulate(), but it generates a new value of the
dependent variable corresponding to each of the original x-values,
which is not what I need. Ideally I whould like to simulate new values for GLM objects both with family="gaussian" and with family="binomial".

Thanks in advance,
Jacob

Jacob Nabe-Nielsen, PhD, MSc
Scientist
 --------------------------------------------------
Section for Climate Effects and System Modelling
Department of Arctic Environment
National Enviornmental Research Institute
Aarhus University
Frederiksborgvej 399, Postbox 358
4000 Roskilde, Denmark

email: n...@dmu.dk
fax: +45 4630 1914
phone: +45 4630 1944


      [[alternative HTML version deleted]]

______________________________________________
R-help@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.




______________________________________________
R-help@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.

Reply via email to