Обновлено: 17 июл 2014 (Чт) 11:13:41

http://www.matrunich.com

Анализ производится по тому плану, который был опубликован ранее в этом документе.

Просмотр телевизора

ТВ-интенсивность

Расчёт

Преобразуется переменная 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

Характеристики

  • среднее арифметическое 24.1148
  • медиана 30
  • стандартное отклонение 10.3649

plot of chunk tvintens_density

Наличие провалов в районе 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=="да"))

Характеристики

  • среднее арифметическое 4.5054
  • медиана 4
  • стандартное отклонение 2.6562

plot of chunk topics_density

Здесь распределение выглядит гораздо приличнее: структура вопроса более качественная.

plot of chunk tvintens_topics_points

Попытка преобразовать вопрос v1 с порядковой шкалой в индекс с интервальной шкалой не слишком удачна: большие разрывы по горизонтали не очень симпатичны.

plot of chunk tvintens_topics_boxplot

Тот же график, но ТВ-интенсивность изображена в виде порядковой, а не интервальной шкалы. Гипотеза о том, что с увеличением интенсивности растёт разнообразие, подтверждается. Также заметно, что группы респондентов с интенсивностями 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 балла.

Выделение групп респондентов по ТВ-предпочтениям

Определение оптимального числа кластеров

plot of chunk numb_of_clust

С увеличением количества кластеров стабильно снижается уровень различий внутри формируемых кластеров (внутригрупповая дисперсия). Какое количество кластеров выбрать?

Попробуем уменьшить размерность исходного пространства за счет нахождения таких типов передач, которые можно объединить?

Взаимосвязь между типами передач

corrgram(topics, order=F, lower.panel=panel.shade,
  upper.panel=panel.pie, text.panel=panel.txt,
  main="Взаимосвязь предпочтений типов передач")

plot of chunk corrgram_tv

Максимальная корреляция между v2.10 (научно-популярные) и v2.12 (документальные), но она не достигает и 0,5, то есть чуть меньше, чем в одном случае из двух ответ из первого пункта совпадает со вторым пунктом. Наверно, это слишком мало, чтобы объединить.

Кластерный анализ методом k-средних

Выделяем кластеры в количестве 3 штук.

clusters <- kmeans(topics, 4)

Нарисуем характеристики кластеров.

plot of chunk clusters_facet

Неудобно сравнивать кластеры между собой. Можно сравнивать только отдельные характеристики. Попробуем сгруппировать по кластерам.

plot of chunk clusters_facet2