У меня есть набор данных с 4 столбцами. На данный момент это может принимать 2 значения (1 или 0). Есть три столбца (X1, X2, X3) с отсутствующими данными.
Row# X1 X2 X3 Y
1 1 0 0 1
2 0 1 1 0
3 NA 0 0 0
4 1 1 1 0
5 1 NA NA 1
6 1 0 0 1
7 NA NA NA 0
8 0 1 0 1
9 NA NA 1 0
10 0 0 1 1
11 NA NA 0 0
12 0 0 0 0
13 0 0 1 1
14 NA 0 NA 0
Что меня интересует в создании заполненного набора данных для возможных значений NA. Под этим я подразумеваю создание возможных строк данных, подобных приведенным ниже
Row# X1 X2 X3 Y Probability Comments
1 1 0 0 1 1 No missing
2 0 1 1 0 1 No missing
3 1 0 0 0 0.5 X1 Missing
4 0 0 0 0 0.5 X1 Missing
5 1 1 1 0 1 No missing
6 1 1 0 1 0.25 X1, X2 missing
7 1 0 0 1 0.25 X1, X2 missing
8 1 1 1 1 0.25 X1, X2 missing
9 1 0 1 1 0.25 X1, X2 missing
10 1 0 0 1 1 No missing
11 0 0 0 0 0.125 X1, X2, x3 missing
12 1 0 0 0 0.125 X1, X2, x3 missing
13 0 1 0 0 0.125 X1, X2, x3 missing
14 0 0 1 0 0.125 X1, X2, x3 missing
15 1 1 0 0 0.125 X1, X2, x3 missing
16 1 0 1 0 0.125 X1, X2, x3 missing
17 0 1 1 0 0.125 X1, X2, x3 missing
18 1 1 1 0 0.125 X1, X2, x3 missing
19 . . . . . ......
20 . . . . . ......
21 . . . . . ......
22 . . . . . ......
Обратите внимание, что окончательный набор данных будет содержать 5 столбцов (X1, X2, X3, Y, Possibility)
столбец Probability
рассчитывается на основе этого logi c.
Давайте начнем со строк 1 и 2 в 1-м наборе данных. В первых двух строках (1,2) отсутствуют отсутствующие данные, поэтому в ожидаемом выводе генерируются те же две строки, и вероятность равна 1.
Давайте посмотрим на строку 3 в исходный набор данных. В столбце X1 отсутствует значение. Таким образом, в ожидаемом выходе генерируются две строки 3,4. Отсюда вероятность 0,5, 0,5. 1/2=0.5
Давайте посмотрим на 5-ю строку в исходном наборе данных. Это содержит недостающие данные в столбцах X2 и X3. Таким образом, в ожидаемых данных будут сгенерированы 4 строки, строка № 6,7,8.9. Таким образом, вероятность составляет 0,25, 0,25, 0,25, 0,25, 1/4 = 0.25
В строке 7 исходного набора данных отсутствуют значения для x1, x2, x3. Таким образом, этот сценарий сгенерирует 8 строк, строка 11 - строка 18 в ожидаемом выходном наборе данных. Следовательно, вероятность 0,125, 1/8 = 0.125
Я мог бы сделать это с помощью 8 операторов ifelse и циклов for. Но мне интересно, есть ли какой-нибудь более хитрый и менее беспорядочный способ добиться этого. Спасибо.