Обновлено: 17 июл 2014 (Чт) 11:13:41
Анализ производится по тому плану, который был опубликован ранее в этом документе.
Преобразуется переменная v1 “Смотрите ли вы телевизор” в индикатор от 0 до 30, т.е. сколько дней в месяце респондент смотрит телевизор:
Значение переменной v1 |
Значение индикатора | Примечание |
|---|---|---|
| Нет, только случайно | 0 | Полюс “минимальности” |
| Да, ежедневно | 30 | Полюс “максимальности”: 7 дней из 7, 30 из 30. |
| Два-три раза в неделю | 10.7143 | Смотрит 2,5 дня из 7. |
| Раз в неделю | 4.2857 | 1 день из 7. |
| Несколько раз в месяц | 3 | Реже, чем раз в неделю, но больше 2 раз в месяц, т.е. 3 дня из 30. |
# Кое-где буду выводить куски кода.
# В данном случае производится перекодировка из v1 в новую переменную tvintens.
data$tvintens <- NA
data$tvintens[data$v1=="нет, только случайно"] <- 0
data$tvintens[data$v1=="да, ежедневно"] <- 30
data$tvintens[data$v1=="два-три раза в неделю"] <- 2.5*30/7
data$tvintens[data$v1=="раз в неделю"] <- 30/7
data$tvintens[data$v1=="несколько раз в месяц"] <- 3
Наличие провалов в районе 20 и 6 дней наводит на мысль, что шкала в изначальном вопросе v1 неоптимально покрывает континуум: из-за этого респонденты из 20 дней “перетекают” в ежедневников, а из 6 дней “растекаются” в стороны. Я бы рекомендовал переделать вопрос, чтобы респонденты могли более точно указывать объёмы своего ТВ-просмотра.
Давайте оценим, как влияют заработок, образование, возраст и пол на объёмы просмотра телевизора. Правда, из-за того, что показатель объёма просмотра получился корявенький, на мега-результаты не расчитываем.
Для этого проведём регрессионный анализ с простой линейной моделью, т.е. закладываем в концепцию, что факторы влияют на наш показатель линейно.
# помечаем вариант "Не скажу сколько денег", как пропущенный
data$v31[data$v31 == "НЕ СКАЖУ"] <- NA
data$v31 <- droplevels(data$v31)
# Строим модель
lm1 <- lm(tvintens ~ v36.1 * as.numeric(v31) * as.numeric(v33) * as.numeric(v37), data = data)
# Выводим итоги по модели
summary(lm1)
##
## Call:
## lm(formula = tvintens ~ v36.1 * as.numeric(v31) * as.numeric(v33) *
## as.numeric(v37), data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -28.70 -5.84 4.00 6.60 16.88
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -19.9081 20.9320 -0.95 0.342
## v36.1 0.8938 0.4836 1.85 0.065 .
## as.numeric(v31) 18.4984 7.7063 2.40 0.017 *
## as.numeric(v33) 9.2553 7.2071 1.28 0.199
## as.numeric(v37) 19.0555 12.6075 1.51 0.131
## v36.1:as.numeric(v31) -0.3790 0.1957 -1.94 0.053 .
## v36.1:as.numeric(v33) -0.2087 0.1607 -1.30 0.194
## as.numeric(v31):as.numeric(v33) -4.5760 2.4071 -1.90 0.058 .
## v36.1:as.numeric(v37) -0.3977 0.2750 -1.45 0.148
## as.numeric(v31):as.numeric(v37) -8.0935 4.7091 -1.72 0.086 .
## as.numeric(v33):as.numeric(v37) -4.2869 4.2294 -1.01 0.311
## v36.1:as.numeric(v31):as.numeric(v33) 0.0984 0.0586 1.68 0.094 .
## v36.1:as.numeric(v31):as.numeric(v37) 0.1685 0.1136 1.48 0.138
## v36.1:as.numeric(v33):as.numeric(v37) 0.1050 0.0907 1.16 0.247
## as.numeric(v31):as.numeric(v33):as.numeric(v37) 1.6805 1.4660 1.15 0.252
## v36.1:as.numeric(v31):as.numeric(v33):as.numeric(v37) -0.0377 0.0343 -1.10 0.272
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.85 on 884 degrees of freedom
## (216 observations deleted due to missingness)
## Multiple R-squared: 0.0873, Adjusted R-squared: 0.0718
## F-statistic: 5.64 on 15 and 884 DF, p-value: 3.94e-11
Во-первых, смотрим в самый низ на коэффициенты R-squared (коэффициент детерминации). Этот R говорит о том, какую часть изменяемости (вариабельности) нашей зависимой переменной (ТВ-интенсивность) объясняет модель. В нашем случае — это 7-8%, не очень круто, бывает и 70-80%, но для начала ок.
Далее смотрим, коэффициенты по каким предикаторам имеют высокий уровень значимости: последний столбик с заголовком Pr(>|t|). Это вероятность того, что полученный коэффициент является игрой случайности — чем меньше вероятность, тем больше шансов, что он действительно такой. Для удобства значимые вероятности помечаются звёздочками и точкой. Самый крутой вариант, когда указано три звёздочки — вероятность случайности стремится к нулю. В нашем случае только один предикатор помечен звёздочкой: вероятность случайности не превышает 5%; и несколько предикаторов — точкой: не выше 10%.
У нас звёздочкой помечен предикатор v31 — доход. Значение коэффициента этого предикатора — 18.5 (колонка Estimate). Это значит, что с ростом дохода на одну градацию (перехода респондента из одной категории в другую повыше) индикатор ТВ-интенсивности растёт на 18.5 дней. Звучит коряво, поскольку у нас 8 уровней дохода, и разница между беднейшим и богатейшим должна составлять в днях 7 * 18.5 = 129.5, хотя максимум должно быть 30 дней. Но поскольку модель объясняет всего 8% изменяемости индекса, то это простительно. Главное, что примерный смысл должен понятен.
Сумма отмеченных респондентом вариантов в группе вопросов v2.*: чем больше вариантов отмечено, тем разнообразнее предпочтения. Гипотеза: и тем больше р-т должен смотреть телевизор.
data$topics <- apply(data[, str_detect(names(data), '^v2\\.')], 1,
function(x) sum(x=="да"))
Здесь распределение выглядит гораздо приличнее: структура вопроса более качественная.
Попытка преобразовать вопрос v1 с порядковой шкалой в индекс с интервальной шкалой не слишком удачна: большие разрывы по горизонтали не очень симпатичны.
Тот же график, но ТВ-интенсивность изображена в виде порядковой, а не интервальной шкалы. Гипотеза о том, что с увеличением интенсивности растёт разнообразие, подтверждается. Также заметно, что группы респондентов с интенсивностями 3, 4 и 11 дней схожи между собой, так что в каких-то случаях их можно объединить. “Ящик” с ТВ-интенсивностью, равной 0 дней, демонстрирует полевые недоработки при проведении опроса: если респондент указывает, что он практически не смотрит телевизор (0 дней), то интервьюер должен был пропустить дальнейшие вопросы про ТВ. Но мы видим, что есть ряд респондентов, которые и с 0 дней ответитили на вопрос о своих ТВ-предпочтениях. Всего таких “ошибочных” респондентов насчитывается 20.
# Строим модель
lm1 <- lm(topics ~ v36.1 * as.numeric(v31) * as.numeric(v33) * as.numeric(v37), data = data)
# Выводим итоги по модели
summary(lm1)
##
## Call:
## lm(formula = topics ~ v36.1 * as.numeric(v31) * as.numeric(v33) *
## as.numeric(v37), data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.21 -1.75 -0.36 1.30 8.66
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.919744 5.590642 1.42 0.16
## v36.1 -0.118649 0.129165 -0.92 0.36
## as.numeric(v31) 0.699508 2.058250 0.34 0.73
## as.numeric(v33) -1.482415 1.924915 -0.77 0.44
## as.numeric(v37) -2.274358 3.367290 -0.68 0.50
## v36.1:as.numeric(v31) -0.006368 0.052278 -0.12 0.90
## v36.1:as.numeric(v33) 0.036688 0.042916 0.85 0.39
## as.numeric(v31):as.numeric(v33) -0.200883 0.642910 -0.31 0.75
## v36.1:as.numeric(v37) 0.066781 0.073440 0.91 0.36
## as.numeric(v31):as.numeric(v37) -0.150907 1.257736 -0.12 0.90
## as.numeric(v33):as.numeric(v37) 0.971730 1.129604 0.86 0.39
## v36.1:as.numeric(v31):as.numeric(v33) 0.003599 0.015659 0.23 0.82
## v36.1:as.numeric(v31):as.numeric(v37) -0.000122 0.030329 0.00 1.00
## v36.1:as.numeric(v33):as.numeric(v37) -0.020335 0.024237 -0.84 0.40
## as.numeric(v31):as.numeric(v33):as.numeric(v37) -0.000106 0.391553 0.00 1.00
## v36.1:as.numeric(v31):as.numeric(v33):as.numeric(v37) -0.000160 0.009159 -0.02 0.99
##
## Residual standard error: 2.63 on 884 degrees of freedom
## (216 observations deleted due to missingness)
## Multiple R-squared: 0.0276, Adjusted R-squared: 0.0111
## F-statistic: 1.67 on 15 and 884 DF, p-value: 0.0506
Удивительно, но здесь результат хуже: коэффициент детерминации всего 2%. Никакой ценности данная модель не несёт. Вернее, ценность в том, что мы знаем, что указанные предикаторы не оказывают линейного влияния на индекс ТВ-предпочтений.
Группу вопросов v2.* обогащаем информацией из группы вопросов v3.*. Если респондент не выбрал вариант, то он получает значение 0, если вариант выбран только во втором вопросе (“Предпочитаю смотреть”), то он получает 1 балл, если вариант также указан и в третем вопросе (“Смотрю чаще всего”), то он получает 2 балла.
С увеличением количества кластеров стабильно снижается уровень различий внутри формируемых кластеров (внутригрупповая дисперсия). Какое количество кластеров выбрать?
Попробуем уменьшить размерность исходного пространства за счет нахождения таких типов передач, которые можно объединить?
corrgram(topics, order=F, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Взаимосвязь предпочтений типов передач")
Максимальная корреляция между v2.10 (научно-популярные) и v2.12 (документальные), но она не достигает и 0,5, то есть чуть меньше, чем в одном случае из двух ответ из первого пункта совпадает со вторым пунктом. Наверно, это слишком мало, чтобы объединить.
Выделяем кластеры в количестве 3 штук.
clusters <- kmeans(topics, 4)
Нарисуем характеристики кластеров.
Неудобно сравнивать кластеры между собой. Можно сравнивать только отдельные характеристики. Попробуем сгруппировать по кластерам.