【发布时间】:2015-04-01 22:59:56
【问题描述】:
我第一次问我是否适合 GLM 的问题,我没有遇到任何问题。我得到了这个等式,我确信它是正确的。
logit(Damage)= 5.08498-0.11560(TempF)
然后,我被问到:
构建第二个绘图,将温度数据的范围扩展到华氏 30 度。使用以下脚本执行此操作以帮助您入门:
plot(c(30,85), c(0,1), type='n',xlab="Temperature (F)", ylab="Damage") rug(x=spacshu$TempF[spacshu$Damage==0],side=1) rug(x=spacshu$TempF[spacshu$Damage==1],side=3)然后将使用您在上面创建的模型估计的温度范围为 30 到 85 华氏度的预测响应添加到该图中。
“上面”很可能是指我做这部分的部分,涉及反向转换。
spacshub.pred = exp(predict(spacshub.glm))/(1+exp(predict(spacshub.glm)))
我的困惑从这里开始。数据(上图,.txt 文件中的超链接)显示基于温度和损坏的观察结果,损坏是二项式变量,只有 0(未损坏)和 1(损坏)。根据我在二项式 glms 上阅读的内容,
假设 Yi 是一个伯努利随机变量,我们可以将其概率分布表述如下:
{P(Yi = 1) = pi, P(Yi = 0) = 1-pi}
恰当地说,当我在 R 中插入一个值时,它会给我一个介于 0 和 1 之间的值,并且根据数据销毁的大多数穿梭机都有较高的 pi 值。
现在问题来了。当我初始化我的新数据时,我该怎么做呢?初始化 TempF 的东西很容易,但是我该怎么办呢?我之前执行的 predict 命令并没有给我 0 或 1,而是一组介于 0 和 1 之间的概率值。我到底该如何初始化一个 30 到 85 度的新数据帧?
编辑:谢谢大家。这有帮助,我可以做出预测。但是,我认为我的编码有点不对劲。我也在尝试制作一条拟合线,但我不确定如何更改我的预测所具有的元素数量。这主要是由于数据中有大量重复。所以当我这样做时
newdata = data.frame(TempF=seq(30,85))
spacshu.predict = predict(spacshub.glm, newdata, type="response", se.fit=T)
只有 56 个元素,而数据集中有 138 个元素。除非它们相等,否则我无法映射拟合。我该如何处理我的预测器?
【问题讨论】:
-
如果理解您的问题,您实际上不需要在新数据中初始化
damage,因为这就是您的预测。predict函数只需要预测变量(在本例中为TempF)。 -
predict.glm有一个“类型”参数,可以让您避开所有这些。阅读帮助页面。 -
谢谢,我可以使用该命令进行预测,但我遇到了一些进一步的麻烦。我编辑了我的帖子以反映这种情况。
-
如果您想在每个原始点进行估计,那么请忽略 newdata 参数。或者用
points绘制一个,用lines绘制另一个。 -
嗯,问题要求我将温度范围扩大到30度,这与原始数据不同,因为原始数据的范围从50到85左右。我认为问题是在问我进行涉及 30 到 85 值的预测。
标签: r statistics regression glm