Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 协变量设置为平均值的glm系数的阴影置信区间带_R_Glm_Predict_Confidence Interval - Fatal编程技术网

R 协变量设置为平均值的glm系数的阴影置信区间带

R 协变量设置为平均值的glm系数的阴影置信区间带,r,glm,predict,confidence-interval,R,Glm,Predict,Confidence Interval,我想从glm模型(族二项式)或使用gglot绘制线和着色95%置信区间带(例如使用多边形)。对于线性模型(lm),我以前能够从预测中绘制置信区间,因为它们包括拟合、下限和上限,但我不知道如何在这里进行。我曾尝试使用predict.glm函数,将可选参数se.fit设置为TRUE,然后使用predict+/-1.96*std.error计算置信区间,但对我来说不起作用。 提前谢谢你的帮助。您可以在这里找到我使用的数据(它包含10个变量和996个观察值):代码和图如下: # Models mod=

我想从glm模型(族二项式)或使用gglot绘制线和着色95%置信区间带(例如使用多边形)。对于线性模型(lm),我以前能够从预测中绘制置信区间,因为它们包括拟合、下限和上限,但我不知道如何在这里进行。我曾尝试使用predict.glm函数,将可选参数se.fit设置为TRUE,然后使用predict+/-1.96*std.error计算置信区间,但对我来说不起作用。 提前谢谢你的帮助。您可以在这里找到我使用的数据(它包含10个变量和996个观察值):代码和图如下:

# Models
mod= glm(site ~S + age + pH + soil + peat+
              spruce+ I(spruce^2)+pine+ birch+ 
              tsumma+ I(tsumma^2), 
              data=test.dat,family=binomial)


# Means of all covariates
means = apply(test.dat[,c("S", "pH","soil", "spruce", "pine","birch", "tsumma")],2,mean,na.rm=T)

# Calculate the constant given by all other covariates being at their means and assuming only pine on the plot
const = mod$coefficients[1]+
  mod$coefficients["S"]*means["S"]+
  mod$coefficients["pH"]*means["pH"]+
  mod$coefficients["soil"]*means["soil"]+
  mod$coefficients["spruce"]*means["spruce"]+
  mod$coefficients["I(spruce^2)"]*means["spruce"]*means["spruce"]+
  mod$coefficients["pine"]*means["pine"]+
  mod$coefficients["birch"]*means["birch"]+
  mod$coefficients["tsumma"]*means["tsumma"]+
  mod$coefficients["I(tsumma^2)"]*means["tsumma"]*means["tsumma"]

# Plot
age = seq(from=min(test.dat$age,na.rm=T),to=150,length=100)
lin= const + mod$coefficients["age"]*age
Pr = exp(lin) / (exp(lin)+1)
par(mar = c(4, 4, 1.5, 0.3))
plot(age,Pr,type="l", ylim=c(0,.5),las=1, main="Probability of hotspot", ylab="Probability of occurrence",xlab="Forest age (years)")

您可以使用一个包,在保持其他项不变的情况下指示要绘制的术语:

library(sjPlot)
set.seed(888)
data = mtcars
data$vs = data$vs + rnorm(nrow(data))
mod = glm(am ~ disp + vs + carb+ I(vs^2),data=data,family="binomial")
plot_model(mod,type="pred",terms="disp")

或者像你那样推导它,除了我认为你可能需要为平方值创建一个额外的项,这样你就可以按它们的平均值保存其他项,并使用
predict.lm
函数:

data$vs2 = data$vs^2
mod = glm(am ~ disp + vs + carb+ vs2,data=data,family="binomial")
varMeans = colMeans(mod$model)[c("vs","carb","vs2")]
pred_disp = seq(min(data$disp),max(data$disp),length.out=100)
df = data.frame(
                disp = pred_disp,
                t(replicate(length(pred_disp),varMeans))
               )
pred = predict(mod,df,se=TRUE)

plot(df$disp,plogis(pred$fit),"l")
lines(df$disp,plogis(pred$fit + 1.96*pred$se.fit),col="blue",lty=8)
lines(df$disp,plogis(pred$fit - 1.96*pred$se.fit),col="blue",lty=8)