微观模拟GLM包括随机部分

时间:2014-11-30 13:35:18

标签: r glm stochastic

我试图模拟R中的GLM函数,包括随机不确定性。我将基于公式的方法与基于R的simulate()函数进行了比较,得到了不同的结果。不确定我(可能是我而不是R)做错了什么。

我首先创建一个模拟队列:

set.seed(1)
library(MASS)

d <- mvrnorm(n=3000, mu=c(30,12,60), Sigma=matrix(data=c(45, 5, 40, 5, 15, 13, 40, 13, 300), nrow=3))
d[,1] <- d[,1]^2

适合模特:

m <- glm(formula=d[,1]~d[,2] + d[,3], family=gaussian(link="sqrt"))

以线性标度预测(使用公式)

p_linear <- m$coefficients[1] + m$coefficients[2]*d[,2] + m$coefficients[3]*d[,3]

比较两种方法&#39;预测包括反向链接功能。它看起来很相似:

sum((predict(object=m, type="response")-p_linear^2)^2)==0

为两个预测添加随机部分:

sd_residuals <- sd(p_linear^2 - d[,1])
p <- p_linear^2 + rnorm(n=1000, mean=0, sd=sd_residuals)
p_simulate <- simulate(m)$sim_1

将两个预测(基于公式和基于simulate())与绘图中的原始数据进行比较:

par(mfrow=c(1,2), mar=c(4,2,2,1))
plot(d[,1], p, col="blue", pch=20, cex=0.5, xlim=c(-500, 3000), ylim=c(-500, 3000))
abline(lm(p~d[,1]), col="blue")
points(d[,1], p_simulate, col="red", cex=0.5)
abline(lm(p_simulate~d[,1]), col="red")
abline(a=0, b=1)

...并比较两个预测:

plot(p, p_simulate, col="green", cex=0.5, xlim=c(-500, 3000), ylim=c(-500, 3000))
abline(lm(p_simulate~p), col="green")
abline(a=0, b=1)

似乎基于公式的预测反映出与原始数据类似的随机不确定性。基于r的simulate()函数方法似乎表示比原始数据更少的随机不确定性。基于公式的方法是否正确?如果没有,我应该如何适应它? (出于兴趣:两种方法之间的区别是什么?)

最终,我希望将除数据之外的GLM模型用作预测的输入值。我也想在Excel中应用它。因此,我正在寻找基于公式的方法,而不是使用像simulate()这样的R包。

任何有关预测材料的提示,包括R中GLM的随机性,都是值得欢迎的。我google了很多,但很难在R中找到基于公式的例子而不是家庭/链接是高斯/身份。

0 个答案:

没有答案