我试图模拟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]

比较两种方法的预测,包括反向链接功能 . 它似乎是相似的:

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中应用它 . 因此,我正在寻找一种基于公式的方法,而不是像_1349890那样使用R-packages .

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