2013-04-19 3 views
1

Привет, люди с переполнением таблиц Привет, я потратил некоторое время на поиск решения моей проблемы, но ничего не нашел, поэтому подумал, что отправлю.R Query: Создание Dummy Variables из категориальной переменной

В основном у меня есть набор данных из 196 стран, перечисленных в алфавитном порядке. Одна из переменных присваивает число от 1 до 10 в зависимости от региона, в котором находится страна. Например, Восточная Европа = 1, Западная Европа = 2, Ближний Восток = 3, Южная Америка = 4 и т. Д.

Вот визуальное представление набора данных:

Страна Имя ------ Страна Регион ------ Коэффициент младенческой смертности

Афганистан --------- --- 3 ------------------------ 180

Аргентина --------------- 4 ------------------------ 65

Франция ------------------ 2- ----------------------- 12

Зародыш любой --------------- 2 ------------------------ 10

Польша --- --------------- 1 ----------------------- 16

Что мне нужно сделать, это разделить 10 регионов на свои отдельные фиктивные переменные, чтобы я мог запускать их через многомерную регрессию, чтобы определить индивидуальный эффект, который они оказывают на коэффициент детской смертности.

Мне было интересно, какой именно код должен был бы создать фиктивные переменные (1 = Восточная Европа, 0 = Другое и т. Д.), А затем как проверить их эффект как индивидуально, так и в многомерной регрессии.

Извините, если это кажется простым или глупый вопрос, я довольно новыми для использования R.

Спасибо за помощь заранее.

Edit: Это выход dput по запросу:

structure(list(Country.Name = structure(c(1L, 2L, 3L, 4L, 5L, 
6L, 11L, 7L, 9L, 10L, 12L, 13L, 14L, 8L, 15L, 17L, 20L, 21L, 
22L, 23L, 24L, 18L, 156L, 25L, 26L, 120L, 28L, 16L, 29L, 30L, 
31L, 32L, 33L, 160L, 34L, 35L, 36L, 170L, 37L, 38L, 39L, 40L, 
41L, 43L, 44L, 45L, 46L, 19L, 47L, 49L, 50L, 51L, 53L, 54L, 57L, 
55L, 56L, 58L, 59L, 60L, 48L, 61L, 63L, 62L, 64L, 65L, 88L, 66L, 
67L, 68L, 69L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 
81L, 82L, 42L, 83L, 84L, 86L, 85L, 87L, 89L, 90L, 91L, 92L, 93L, 
95L, 96L, 94L, 97L, 98L, 99L, 100L, 101L, 103L, 104L, 105L, 106L, 
107L, 108L, 110L, 111L, 112L, 115L, 116L, 114L, 117L, 118L, 119L, 
130L, 121L, 122L, 123L, 124L, 189L, 125L, 126L, 127L, 128L, 129L, 
113L, 109L, 132L, 131L, 133L, 134L, 135L, 136L, 137L, 138L, 139L, 
70L, 174L, 140L, 141L, 142L, 143L, 161L, 162L, 163L, 145L, 146L, 
147L, 148L, 149L, 151L, 152L, 153L, 154L, 191L, 155L, 157L, 158L, 
194L, 159L, 164L, 165L, 166L, 167L, 168L, 169L, 171L, 173L, 175L, 
176L, 177L, 184L, 178L, 179L, 180L, 181L, 182L, 183L, 102L, 52L, 
185L, 172L, 186L, 27L, 187L, 188L, 190L, 144L, 192L, 150L, 193L 
), .Label = c("Afghanistan", "Albania", "Algeria", "Andorra", 
"Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Australia", 
"Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", 
"Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", 
"Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", 
"Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", 
"Canada", "Cape Verde", "Central African Republic", "Chad", "Chile", 
"China", "Colombia", "Comoros", "Congo", "Congo, Democratic Republic", 
"Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", 
"Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", 
"Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", 
"Ethiopia", "Fiji", "Finland", "France", "Gabon", "Gambia", "Georgia", 
"Germany", "Ghana", "Greece", "Grenada", "Guatemala", "Guinea", 
"Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hungary", "Iceland", 
"India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", 
"Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", 
"Korea, North", "Korea, South", "Kuwait", "Kyrgyzstan", "Laos", 
"Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", 
"Lithuania", "Luxembourg", "Macedonia", "Madagascar", "Malawi", 
"Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", 
"Mauritania", "Mauritius", "Mexico", "Micronesia", "Moldova", 
"Monaco", "Mongolia", "Montenegro", "Morocco", "Mozambique", 
"Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "New Zealand", 
"Nicaragua", "Niger", "Nigeria", "Norway", "Oman", "Pakistan", 
"Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", 
"Poland", "Portugal", "Qatar", "Romania", "Russia", "Rwanda", 
"Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", 
"Senegal", "Serbia", "Serbia and Montenegro", "Seychelles", "Sierra Leone", 
"Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", 
"South Africa", "Spain", "Sri Lanka", "St Kitts and Nevis", "St Lucia", 
"St Vincent and the Grenadines", "Sudan", "Suriname", "Swaziland", 
"Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", 
"Thailand", "Timor-Leste", "Togo", "Tonga", "Trinidad and Tobago", 
"Tunisia", "Turkey", "Turkmenistan", "Tuvalu", "Uganda", "Ukraine", 
"United Arab Emirates", "United Kingdom", "United States", "Uruguay", 
"Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Yemen", "Zambia", 
"Zimbabwe"), class = "factor"), Country.Region = c(8L, 1L, 3L, 
5L, 4L, 10L, 1L, 2L, 5L, 5L, 10L, 3L, 8L, 1L, 10L, 5L, 8L, 2L, 
1L, 4L, 2L, 10L, 9L, 7L, 1L, 7L, 4L, 1L, 7L, 4L, 5L, 4L, 4L, 
8L, 4L, 2L, 6L, 6L, 2L, 4L, 4L, 4L, 2L, 1L, 2L, 3L, 1L, 4L, 5L, 
10L, 2L, 2L, 2L, 4L, 4L, 4L, 1L, 9L, 5L, 5L, 4L, 4L, 1L, 4L, 
5L, 4L, 9L, 5L, 10L, 2L, 4L, 10L, 2L, 2L, 1L, 5L, 8L, 7L, 3L, 
3L, 5L, 3L, 5L, 4L, 10L, 6L, 1L, 3L, 4L, 6L, 6L, 3L, 1L, 7L, 
3L, 4L, 1L, 4L, 3L, 5L, 1L, 5L, 4L, 4L, 7L, 8L, 4L, 5L, 4L, 4L, 
2L, 5L, 6L, 1L, 1L, 3L, 4L, 3L, 4L, 9L, 8L, 5L, 9L, 5L, 2L, 4L, 
4L, 5L, 9L, 9L, 9L, 8L, 2L, 9L, 2L, 2L, 7L, 1L, 5L, 4L, 7L, 3L, 
1L, 1L, 4L, 10L, 10L, 10L, 5L, 4L, 3L, 4L, 1L, 4L, 4L, 7L, 1L, 
7L, 1L, 4L, 4L, 4L, 5L, 4L, 10L, 4L, 5L, 5L, 3L, 1L, 7L, 4L, 
9L, 10L, 3L, 3L, 3L, 1L, 9L, 4L, 1L, 1L, 3L, 5L, 4L, 5L, 4L, 
2L, 1L, 2L, 9L, 3L, 1L, 4L), Under.5.Mortality.Rate = c(137.3500061, 
20.40999985, 30.80999947, 6.579999924, 178.6000061, 22.02000046, 
51.13999939, 20.05999947, 6.059999943, 5.46999979, 19.12000084, 
11.18999958, 79.55999756, 28.54000092, 19.89999962, 5.639999866, 
79.80999756, 56.77999878, 9.569999695, 58.18000031, 28.07999992, 
29.54999924, 34.72999954, 9.199999809, 15.46000004, 72.59999847, 
145.4600067, 14.72000027, 85.63999939, 132.8600006, 6.480000019, 
42.68000031, 150.5, 15.02999973, 185.2100067, 10.13000011, 27.06999969, 
7.619999886, 22.79000092, 78.52999878, 113.0199966, 165.1199951, 
13.39999962, 7.949999809, 7.730000019, 5.590000153, 6.460000038, 
128.3200073, 5.489999771, 20.05999947, 35.97000122, 31.18000031, 
30.44000053, 180.1799927, 126.4899979, 95.69000244, 9.210000038, 
30.03000069, 4.010000229, 4.949999809, 83.83000183, 80.19999695, 
31.62000084, 110.2300034, 4.889999866, 93.91000366, 56.91999817, 
6.400000095, 20.76000023, 45.81999969, 163.9900055, 44.61000061, 
90.98000336, 33.29999924, 9.079999924, 3.730000019, 79.45999908, 
46.09999847, 43.70999908, 39.90000153, 6.769999981, 6.690000057, 
5.730000019, 123.8099976, 23.86000061, 4.079999924, 39.5, 21.85000038, 
96.69000244, 44.25, 8.93999958, 11.47000027, 49.27000046, 91.37999725, 
12.98999977, 105.8600006, 12.56000042, 151.6100006, 19.94000053, 
NA, 9.520000458, 4.71999979, 94.59999847, 129.8999939, 8.5, 28.04000092, 
199.6399994, 6.849999905, 97.87999725, 16.95999908, 23.54999924, 
NA, 52.43000031, 19.60000038, 12.39999962, 46.31000137, 150.2299957, 
14.13000011, 61.52000046, NA, 69.44999695, 6.139999866, 32.08000183, 
7.300000191, 36.22999954, 205.1699982, 172.3699951, 4.639999866, 
34.79000092, 45.15000153, NA, 90.91000366, 22.34000015, 90.08000183, 
26.45000076, 36.41999817, 36.63000107, 8.770000458, 6.639999866, 
183.9799957, 79.04000092, 12.32999992, 19.40999985, 19.03000069, 
142.6300049, NA, 16.13999939, 23.86000061, NA, 67.91999817, 20.27000046, 
115.0800018, 7.21999979, 17.17000008, 184.1300049, 3.680000067, 
9.020000458, 17.10000038, 4.900000095, 137.2100067, 42.95999908, 
74.22000122, 5.260000229, 101.0999985, 42.54000092, 106.4199982, 
4.489999771, 5.639999866, 16.70999908, 73.68000031, 12.68999958, 
109.0500031, 21.54000092, 32.61999893, 5.940000057, 24.13999939, 
37.29999924, 61.74000168, NA, 134.8099976, 18.44000053, 17.59000015, 
40.22000122, 6.190000057, 115.1299973, 8.050000191, 161.7100067, 
15.60999966, 54.25, 21.29999924, 23.29999924, 85.33999634, NA, 
133.4700012)), .Names = c("Country.Name", "Country.Region", "Under.5.Mortality.Rate" 
), class = "data.frame", row.names = c(NA, -194L)) 
+0

Это довольно просто, но вы получите лучший результат быстрее, если вы предоставите немного данных образца. –

+0

Если вы сделаете 'Country Region' фактором, то большинство функций регрессии автоматически выполнит фиктивное кодирование. – Roland

+0

Например, посмотрите: 'model.matrix (~ a + b, data.frame (a = factor (1: 3), b = 4: 6))'. – Roland

ответ

0

Поскольку вы цель заключается в создании модели для каждого региона, я думаю, что вы хотите, это функция plyr, который вы бы необходимо установить в виде пакета. Это может показаться сложным для нового пользователя R, но его, безусловно, стоит изучить, поскольку он так легко позволяет вам анализировать данные подмножеств данных.

В вашем случае, ваш код будет выглядеть следующим образом:

require(plyr) 
models = ddply(df, .(CountryRegion), lm, formula = y ~ x1 + x2) 

В каком ФРЕ ваш dataframe, CountryRegion категорические переменная, которую вы используете для подмножества данных, ого (или альтернативы) является функцией моделирования, а x1, x2 и т. д. являются вашими независимыми переменными. В результате у вас будут отдельные модели для каждого CountryRegion.

Надеюсь, что это поможет, и не забудьте проверить plyr!

+0

Я не думаю, что это то, чего они хотят. – Roland

+0

Цель заключалась в том, чтобы «проверить их эффект как индивидуально, так и в многомерной регрессии», поэтому для их индивидуального тестирования вам придется подмножество по регионам и вычислять модель для каждого. Затем, чтобы сравнивать их друг с другом, вы сравниваете их коэффициенты с многомерной регрессией, используя описанный вами процесс, когда функция регрессии обрабатывает категориальные переменные автоматически. –

+0

Я думаю, у нас есть разные определения «многомерные». – Roland

0

Насколько я мог понять этот вопрос, вы хотите установить контрасты для своего фактора 10-категории. Один из способов установить контрасты - это действительно думмификация.Если у вас есть 10 категорий для одной номинальной переменной, вы можете создать 9 фиктивных переменных для представления одной и той же информации в многомерной регрессии. Если это так, то, что вы ищете contrasts():

x <- factor(1:10,ordered=FALSE) 
contrasts(x) <- contr.treatment(10) 
print(x) 

Тогда вы просто использовать x в вашей регрессионной модели, R распознает контрастность матрицы и соответственно его применять. На выходе вы увидите уровни, которые вы установили.

Вы можете указать, какая категория будет использоваться как ссылка, используя опцию base= в contr.treatment. Интерпретация коэффициентов регрессии представляет собой сравнение каждой фиктивной переменной (среднее для соответствующей категории) со ссылочной категорией (среднее для базового уровня).

Существуют также альтернативные способы настройки контрастов. Для стран может быть полезно сравнить каждую страну с великим средним значением, а не с средним значением для одной конкретной страны. Это будет достигнуто с помощью кодирования с отклонениями с использованием contr.sum(10). Интерпретация ваших эффектов меняется, так же как и смысл перехвата. В общем, очень полезно знать о разных контрастных методах, поскольку они делают простой инструмент, такой как регрессия, более гибким и мощным. Дополнительную информацию о различных системах кодирования в R можно найти here. Удачи вам в анализе.

P.S. Вы также можете указать контрастную матрицу вручную, что полезно для кодирования с отклонением, поскольку оно не имеет опции base.

+0

Это сработало, мне просто сложно понять, как можно провести сравнение между различными регионами, если для каждого из них нет другого выхода. Если я что-то пропустил – user2292364

+0

@ user2292364 Я не уверен, что вы имеете в виду. Пожалуйста, опубликуйте свой результат, а затем укажите, что именно не ясно. –

+0

Результат, полученный после того, как я выполнил вышеуказанный код, был таким же, как и только переменная области, не изменяя его, скопирует вывод в течение секунды. – user2292364

Смежные вопросы