我开始遇到错误(从警告转换):
glm.fit (or glm.fit2): fitted probabilities numerically 0 or 1 occurred
我发现此链接引用了数据的线性分离:
[R] glm.fit: "fitted probabilities numerically 0 or 1 occurr
所以我尝试搜索数据并从一小部分数据(glm和glm2)中找到一个可重复的小例子,其中我实际上看不到线性分离,但我得到了错误:
response = c(0,1,0,1,0,0,0,0,0,0)
dependent = c(133,571,1401,4930,3134075,44357054,1718619387,1884020779,8970035092,9392823637)
foo = data.frame(y=response,x=dependent)
glm(y ~ x, family=binomial, data=foo)
我可以通过转换依赖的via log(x+1)
来避免这个问题,但是,这是单调的并且不会改变顺序,因此我不确定为什么这会有所帮助以及我是否应该这样做。依赖性是“自上次发生某些事件以来的微秒”,这就是为什么某些值可能很大的原因。我尝试将其转换为(最近的,不是最近的)两级因素,但是丢失了信息并且表现不佳。
答案 0 :(得分:2)
我认为这只是数据的一个特征,也是最大似然函数优化中浮点计算的四舍五入。
查看对数转换集的拟合值:
> response = c(0,1,0,1,0,0,0,0,0,0)
> dependent = c(133,571,1401,4930,3134075,44357054,1718619387,1884020779,8970035092,9392823637)
>
> foo = data.frame(y=response,x=log(dependent))
> mlog <- glm(y ~ x, family=binomial, data=foo)
> mlog$fitted
1 2 3 4
0.584089292 0.484155299 0.422713978 0.340825478
5 6 7 8
0.079815887 0.040011202 0.014931996 0.014562755
9 10
0.009506656 0.009387457
而未转换的集合导致出现微小的拟合值:
> foo = data.frame(y=response,x=dependent)
> m <- glm(y ~ x, family=binomial, data=foo)
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
> m$fitted.values
1 2 3
5.007959e-01 5.005387e-01 5.000511e-01
4 5 6
4.979784e-01 6.359085e-04 2.220446e-16
7 8 9
2.220446e-16 2.220446e-16 2.220446e-16
10
2.220446e-16
似乎不是与完整(或准)分离数据相关的警告。我认为这个警告在这种情况下非常有用。
答案 1 :(得分:1)