19

多くの調査には、さまざまな種類の欠落のコードがあります。たとえば、コードブックは次のことを示している可能性があります。

0-99 データ

-1 質問なし

-5 わからない

-7 応答を拒否

-9 モジュールは質問されていません

Stata には、ジェネリックを割り当てることができるという点で、これらの複数の種類の欠落を処理するための優れた機能があります。欠落しているデータに適用されますが、より具体的な種類の欠落 (.a、.b、.c、...、.z) も許可されます。欠落を調べるすべてのコマンドは、指定されたすべての欠落エントリの回答を報告しますが、後でさまざまな種類の欠落を整理することもできます。これは、回答を拒否することが、質問されない質問とは異なる代入戦略への影響をもたらすと考えられる場合に特に役立ちます。

R でそのような機能に出くわしたことはありませんが、この機能が本当に欲しいです。いくつかの異なるタイプの NA をマークする方法はありますか? より多くのデータ (欠損の種類を含む長さ nrow(my.data.frame) のベクトル、またはどの行にどの種類の欠損があるかのよりコンパクトなインデックス) を作成することは想像できますが、それはかなり扱いにくいようです。

4

6 に答える 6

11

あなたが探しているものはわかっていますが、それは R には実装されていません。それが実装されているパッケージについての知識はありませんが、自分でコーディングするのはそれほど難しくありません。

実行可能な方法は、コードを含む属性にデータフレームを追加することです。データフレーム全体が 2 倍にならないようにしてスペースを節約するには、完全なデータフレームを再構築するのではなく、そのデータフレームにインデックスを追加します。

例:

NACode <- function(x,code){
    Df <- sapply(x,function(i){
        i[i %in% code] <- NA
        i
    })

    id <- which(is.na(Df))
    rowid <- id %% nrow(x)
    colid <- id %/% nrow(x) + 1
    NAdf <- data.frame(
        id,rowid,colid,
        value = as.matrix(x)[id]
    )
    Df <- as.data.frame(Df)
    attr(Df,"NAcode") <- NAdf
    Df
}

これにより、次のことが可能になります。

> Df <- data.frame(A = 1:10,B=c(1:5,-1,-2,-3,9,10) )
> code <- list("Missing"=-1,"Not Answered"=-2,"Don't know"=-3)
> DfwithNA <- NACode(Df,code)
> str(DfwithNA)
'data.frame':   10 obs. of  2 variables:
 $ A: num  1 2 3 4 5 6 7 8 9 10
 $ B: num  1 2 3 4 5 NA NA NA 9 10
 - attr(*, "NAcode")='data.frame':      3 obs. of  4 variables:
  ..$ id   : int  16 17 18
  ..$ rowid: int  6 7 8
  ..$ colid: num  2 2 2
  ..$ value: num  -1 -2 -3

関数を調整して、さまざまな値のラベルを提供する追加の属性を追加することもできます。この質問も参照してください。次の方法で逆変換できます。

ChangeNAToCode <- function(x,code){
    NAval <- attr(x,"NAcode")
    for(i in which(NAval$value %in% code))
        x[NAval$rowid[i],NAval$colid[i]] <- NAval$value[i]

    x
}

> Dfback <- ChangeNAToCode(DfwithNA,c(-2,-3))
> str(Dfback)
'data.frame':   10 obs. of  2 variables:
 $ A: num  1 2 3 4 5 6 7 8 9 10
 $ B: num  1 2 3 4 5 NA -2 -3 9 10
 - attr(*, "NAcode")='data.frame':      3 obs. of  4 variables:
  ..$ id   : int  16 17 18
  ..$ rowid: int  6 7 8
  ..$ colid: num  2 2 2
  ..$ value: num  -1 -2 -3

これにより、必要に応じて必要なコードのみを変更できます。この関数は、引数が指定されていない場合にすべてのコードを返すように適合させることができます。コードに基づいてデータを抽出する同様の関数を構築できます。

しかし、1行で:属性とインデックスを使用することは、それを行うための良い方法かもしれません.

于 2011-03-17T15:32:14.350 に答える
6

最も明白な方法は、2 つのベクトルを使用するようです。

  • ベクトル 1: すべての欠損値が を使用して表されるデータ ベクトルNA。例えば、c(2, 50, NA, NA)
  • ベクトル 2: データのタイプを示す因子のベクトル。たとえば、factor(c(1, 1, -1, -7))factor1は正解の質問を示します。

この構造を使用すると、すべての標準na.rm引数が引き続きデータ ベクトルで機能するため、かなりの柔軟性が得られますが、因子ベクトルではより複雑な概念を使用できます。

@gsk3 からの次の質問を更新します

  1. データ ストレージが劇的に増加する:データ ストレージが 2 倍になります。ただし、サイズを 2 倍にすることで実際に問題が発生する場合は、他の戦略を検討する価値があるかもしれません。
  2. プログラムは自動的に処理しません。変なコメントです。一部の関数は、デフォルトで適切な方法で NA を処理します。ただし、NA を別の方法で処理する必要があるため、特注のことを行う必要があります。NAが「質問されていない」であるデータを分析したい場合は、データフレームサブセットを使用してください。
  3. 今では、変数を概念的に操作するたびに、2 つのベクトルを一緒に操作する必要があります。2 つのベクトルのデータ フレームを想像したと思います。2 番目のベクトルに基づいてデータ フレームをサブセット化します。
  4. 標準的な実装はないため、私のソリューションは他の人のソリューションとは異なる場合があります。真実。ただし、既製のパッケージがニーズを満たさない場合は、(ほぼ) 定義上、何か別のことをしたいと考えています。

私は調査データを分析したことがないことを述べておく必要があります (大規模な生物学的データセットを分析したことはありますが)。上記の私の回答は非常に防御的なように見えますが、それは私の意図ではありません。あなたの質問は良いものだと思います。他の回答に興味があります。

于 2011-03-17T10:57:44.443 に答える
4

これは単なる「技術的な」問題ではありません。欠損値の分析と代入については、完全な統計的背景が必要です。1つの解決策は、Rとggobiで遊ぶ必要があります。いくつかのタイプのNAに極端に負の値を割り当て(NAをマージンに入れる)、いくつかの診断を「手動で」行うことができます。NAには次の3つのタイプがあることに注意してください。

  • MCAR-完全にランダムに欠落しています。ここで、P(欠落|観測、未観測)= P(欠落)
  • MAR-ランダムに欠落しています。ここで、P(欠落|観測、未観測)= P(欠落|観測)
  • MNAR-ランダムではない(または無視できない)欠落。ここで、P(欠落|観測、未観測)はどのような方法でも定量化できません。

私見この質問はCrossValidatedに適しています。

しかし、ここにあなたが役に立つと思うかもしれないSOからのリンクがあります:

Rで欠落/不完全なデータを処理する-NAをマスクするが削除しない機能はありますか?

于 2011-03-17T12:00:29.740 に答える
4

NA を完全に省略して、コード化された値のみを使用できます。その後、それらをグローバル欠損値にロールアップすることもできます。NA はコーディングで問題を引き起こす可能性があるため、NA なしでコーディングすることを好むことがよくあります。また、分析に何が入るかを正確に制御できるようにしたいと考えています。文字列「NA」を使用してNAを表すと、多くの場合簡単になります。

-ラルフ・ウィンターズ

于 2011-03-17T13:32:54.627 に答える
2

欠損値のタイプはデータのように見えるため、ラルフがすでに提案したように、私は通常それらを値として使用しますが、主にドキュメントのためにそれが必要な1つか2つの機会に、値に属性を使用しました。

> a <- NA
> attr(a, 'na.type') <- -1
> print(a)
[1] NA
attr(,"na.type")
[1] -1

そうすれば私の分析はきれいですが、私はまだドキュメントを保持しています。しかし、私が言ったように、通常、私は値を保持します。

アラン。

于 2011-03-19T15:23:26.790 に答える
1

ここで「統計的背景コンポーネント」に追加したいと思います。欠損データを使用した統計分析は、これに関する非常に優れた読み物です。

于 2011-11-11T13:08:43.293 に答える