GEE回归给出NaN值作为数据帧子集中的结果

时间:2018-07-29 14:05:13

标签: r gee

嗨,我在数据框中运行gee回归并得出了结果。

library(geepack)
    rightwmen<-coef(summary(geeglm(Ideo_Ordinal ~Machiavellianism+Psychopathy+Narcissism ,data = RightMen, id = Ideo_Ordinal,
                                   corstr = "independence"))) %>% 
      rownames_to_column() %>%
      mutate(lowerWald = Estimate-1.96*Std.err, # Lower Wald CI
             upperWald=Estimate+1.96*Std.err,   # Upper Wald CI
             df=1, 
             ExpBeta = exp(Estimate)) %>%       # Transformed estimate
      mutate(lWald=exp(lowerWald),              # Upper transformed
             uWald=exp(upperWald))              # Lower transformed
    rightwmen

 rowname   Estimate    Std.err         Wald    Pr(>|W|)   lowerWald  upperWald df     ExpBeta
1      (Intercept)  5.7656276 0.03107560 34423.423510 0.000000000  5.70471944  5.8265358  1 319.1392808
2 Machiavellianism  0.1319520 0.10168671     1.683851 0.194413479 -0.06735392  0.3312580  1   1.1410536
3      Psychopathy -0.4449102 0.15069337     8.716788 0.003152931 -0.74026922 -0.1495512  1   0.6408818
4       Narcissism  0.2291297 0.07617612     9.047429 0.002630645  0.07982453  0.3784349  1   1.2575051
        lWald       uWald
1 300.2812223 339.1816504
2   0.9348643   1.3927190
3   0.4769855   0.8610943
4   1.0830970   1.4599978

这对我来说很正常。

当我在初始数据帧的子集中(大约1300次观察)运行相同的代码时,我会采取以下措施:

rowname      Estimate Std.err Wald Pr(>|W|) lowerWald upperWald df  ExpBeta lWald uWald
1      (Intercept)  6.000000e+00     NaN  NaN      NaN       NaN       NaN  1 403.4288   NaN   NaN
2 Machiavellianism -2.051668e-16     NaN  NaN      NaN       NaN       NaN  1   1.0000   NaN   NaN
3      Psychopathy  1.303711e-16     NaN  NaN      NaN       NaN       NaN  1   1.0000   NaN   NaN
4       Narcissism  4.350156e-17     NaN  NaN      NaN       NaN       NaN  1   1.0000   NaN   NaN

请注意,我已省略了NA。可能有什么解释?

#SAMPLE DATASET
A tibble: 588 x 4
   Ideo_Ordinal Machiavellianism Narcissism Psychopathy
          <int>            <dbl>      <dbl>       <dbl>
 1            5           0.0360   -0.0144       0.106 
 2            5          -0.425    -0.302       -0.259 
 3            5          -0.216     0.125        0.0879
 4            5          -0.776    -0.562       -0.488 
 5            5          -0.225     0.167        0.0309
 6            5          -0.167     0.107        0.0539
 7            5          -0.464    -0.00283     -0.150 
 8            5          -0.102     0.141       -0.0487
 9            5           0.237     0.676        0.399 
10            5           0.0220    0.00337      0.0293
# ... with 578 more rows

1 个答案:

答案 0 :(得分:1)

由于我没有您的数据,这是(荒唐的)猜测。如果那不能解决您的问题,我将删除答案。

geeglm()geepack经常遇到的一个问题是,群集必须井井有条。因此,如果您将群集识别为

1 1 1 2 2 2 3 3 3 4 4 4

那么您有4个集群。但是,如果聚类为

1 2 3 4 1 2 3 4 1 2 3 4

那么您有12个集群。 geepack将群集标识为群集变量中的更改(在您的情况下为Ideo_Ordinal)。如果从数据中对行进行采样,则实际上可能会得到太多的簇,这些簇会导致EE算法的某些部分无法正常运行,因为数据不再有序。

这是IMO的超级烦人的“特征”,以至于我专门编写了一个函数来检查集群的顺序。检出MESS::ordered.clusters(),如果集群已订购,则返回TRUE,否则返回FALSE