タイトルのように、私はRのcomplete.cases
関数に相当するStataを見つけようとしています。
私がこれまでに得た最も近いものは使用することでした
generate sample = e(sample)
回帰を実行し、ケースを削除するかif
、このnewlで生成された変数の句を使用した後(ここからソリューションが盗まれました)。
より良い解決策はありますか?
Rでの使用にどれだけ慣れているかはわかりませんがcomplete.cases
、Rと同等のStata(rmiss2
)の両方のアプリケーションの例を次に示します。
まず、デモンストレーションのためにRでいくつかのデータを作成しましょう。dta
後でStataで使用できるファイルとして保存します。
library(foreign)
set.seed(1)
dat <- data.frame(one = rnorm(15),
two = sample(LETTERS, 15),
three = rnorm(15),
four = runif(15))
dat <- data.frame(lapply(dat, function(x) { x[sample(15, 5)] <- NA; x }))
write.dta(dat, file="completeCases.dta")
データは次のようになります。
dat
# one two three four
# 1 NA M 0.80418951 0.8921983
# 2 0.1836433 O -0.05710677 NA
# 3 -0.8356286 L 0.50360797 0.3899895
# 4 NA E NA NA
# 5 0.3295078 S NA 0.9606180
# 6 -0.8204684 <NA> -1.28459935 0.4346595
# 7 0.4874291 <NA> NA NA
# 8 0.7383247 C -0.23570656 0.3999944
# 9 NA N -0.54288826 0.3253522
# 10 -0.3053884 <NA> NA 0.7570871
# 11 NA R -0.64947165 0.2026923
# 12 0.3898432 <NA> NA NA
# 13 NA K 1.15191175 NA
# 14 -2.2146999 <NA> 0.99216037 0.2454885
# 15 1.1249309 Q -0.42951311 0.1433044
データを実行すると、各行が完全なケースを表すかどうかを示すsとsのcomplete.cases
ベクトルが得られます。TRUE
FALSE
complete.cases(dat)
# [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
# [9] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
多くの場合、complete.cases
次のように、データをサブセット化するのに役立ちます。
dat[complete.cases(dat), ]
# one two three four
# 3 -0.8356286 L 0.5036080 0.3899895
# 8 0.7383247 C -0.2357066 0.3999944
# 15 1.1249309 Q -0.4295131 0.1433044
または、ここでは、最初の3つの列が完了しているかどうかだけに基づいてサブセット化します。
dat[complete.cases(dat[, 1:3]), ]
# one two three four
# 2 0.1836433 O -0.05710677 NA
# 3 -0.8356286 L 0.50360797 0.3899895
# 8 0.7383247 C -0.23570656 0.3999944
# 15 1.1249309 Q -0.42951311 0.1433044
それでは、Stataに切り替えましょう。
まず、まだインストールrmiss2
していない場合はインストールします。
. findit rmiss2
次に、Rで作成したdtaファイルをロードします。
. use "path\to\completeCases.dta", clear
3番目に、を使用rmiss2
して「nmis」という名前の新しい列を生成します。この列は、各ケースで欠落している変数の数を示します。
. egen nmis = rmiss2(one two three four)
. list
+-----------------------------------------------+
| one two three four nmis |
|-----------------------------------------------|
1. | . M .8041895 .8921983 1 |
2. | .1836433 O -.0571068 . 1 |
3. | -.8356286 L .503608 .3899895 0 |
4. | . E . . 3 |
5. | .3295078 S . .960618 1 |
|-----------------------------------------------|
6. | -.8204684 . -1.284599 .4346595 1 |
7. | .4874291 . . . 3 |
8. | .7383247 C -.2357066 .3999944 0 |
9. | . N -.5428883 .3253522 1 |
10. | -.3053884 . . .7570871 2 |
|-----------------------------------------------|
11. | . R -.6494716 .2026923 1 |
12. | .3898432 . . . 3 |
13. | . K 1.151912 . 2 |
14. | -2.2147 . .9921604 .2454885 1 |
15. | 1.124931 Q -.4295131 .1433044 0 |
+-----------------------------------------------+
最後に、keep if...
データが欠落しているケースを削除するために使用できます。
. keep if (nmis == 0)
(12 observations deleted)
. list
+-----------------------------------------------+
| one two three four nmis |
|-----------------------------------------------|
1. | -.8356286 L .503608 .3899895 0 |
2. | .7383247 C -.2357066 .3999944 0 |
3. | 1.124931 Q -.4295131 .1433044 0 |
+-----------------------------------------------+
と同様にcomplete.cases
、完全性をチェックする列を指定することもできます。
. use "path\to\completeCases.dta", clear
(Written by R. )
. egen nmis = rmiss2(one two three)
. keep if (nmis == 0)
(11 observations deleted)
. list
+-----------------------------------------------+
| one two three four nmis |
|-----------------------------------------------|
1. | .1836433 O -.0571068 . 0 |
2. | -.8356286 L .503608 .3899895 0 |
3. | .7383247 C -.2357066 .3999944 0 |
4. | 1.124931 Q -.4295131 .1433044 0 |
+-----------------------------------------------+
これは「破壊的」であることに注意してkeep if...
ください。datファイルをリロードせずに元のデータセットに戻ることはできません。if
そのため、次のように使用する方が安全です。
. summarize one two three four if nmis == 0
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
one | 3 .3425423 1.038475 -.8356286 1.124931
two | 3 6.666667 5.507571 1 12
three | 3 -.0538706 .4924195 -.4295131 .503608
four | 3 .3110961 .145398 .1433044 .3999944
私はあなたがそれを正しく持っていると思います。私は通常、これが2つの方法のいずれかで実装されているのを目にします。
regress y x1 x2
marksample touse
summarize y x1 x2 if `touse'
または、tempvartouse
を完全にバイパスします。
regress y x1 x2
summarize y x1 x2 if e(sample)