代码之家  ›  专栏  ›  技术社区  ›  Pearly Spencer Paul Cruz

缺失值的处理

  •  2
  • Pearly Spencer Paul Cruz  · 技术社区  · 7 年前

    考虑以下玩具示例:

    . clear
    . set obs 10
    
    . generate double random = runiform()
    
    . generate foo = 1
    . replace  foo = . if random < 0.50
    
    . generate foo_sum = sum(foo)
    
    . list random foo foo_sum
    
        +---------------------------+
        |    random   foo   foo_sum |
        |---------------------------|
     1. | .06692297     .         0 |
     2. | .85529108     1         1 |
     3. | .35454616     .         1 |
     4. |  .4995136     .         1 |
     5. | .53638222     1         2 |
        |---------------------------|
     6. | .84661429     1         3 |
     7. | .15198199     .         3 |
     8. | .33054815     .         3 |
     9. | .06141655     .         3 |
    10. | .01555962     .         3 |
        +---------------------------+
    

    给定变量中缺少的值 foo ,结果是 foo_sum 错了?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Nick Cox    7 年前

    简而言之,没有。

    结果来自于Stata处理缺失观测的事实。 与预期不同。

    结果是 foo_sum 可以描述为 反直觉 因为:

    . display .
    .
    
    . display . + 1
    .
    

    然而:

    . display sum(.)
    0
    
    . display sum(. + 1)
    0
    

    这到底是怎么回事?

    嗯,在这种情况下,斯塔塔似乎把缺失的值视为零。

    另一个例子:

    . generate foo_max = max(foo, foo_sum)
    
    . list
    
        +-------------------------------------+
        |    random   foo   foo_sum   foo_max |
        |-------------------------------------|
     1. | .06692297     .         0         0 |
     2. | .85529108     1         1         1 |
     3. | .35454616     .         1         1 |
     4. |  .4995136     .         1         1 |
     5. | .53638222     1         2         2 |
        |-------------------------------------|
     6. | .84661429     1         3         3 |
     7. | .15198199     .         3         3 |
     8. | .33054815     .         3         3 |
     9. | .06141655     .         3         3 |
    10. | .01555962     .         3         3 |
        +-------------------------------------+
    

    考虑到Stata中的缺失值通常被视为 正无穷大 , 这种情况下的预期值是 . 而不是 0 3 在观察中 1 然后说 7 .

    看起来斯塔塔只是忽略了缺失的值!

    上面的例子说明了我最近做出的一个相当惊人的发现。 在编程的时候,我想我应该和大家分享一下。