Jan 29, 2015 08:58
Всем доброго времени суток.
Возникла необходимость отобрать наиболее информативные показатели для измерения когнитивного развития (для психологического исследования).
Всего имеется 10 параметров, измеряющих внимание, мышление, разные типы памяти и др. Объем выборки - 139 человек.
Предполагается, что все параметры согласованно измеряют одно явление - когнитивные способности (но психочетрическая проверка не проводилась).
Для решения задачи, в голову пришло такое решение:
1) Применяем метод главных компонент.
2) Получаем нагрузки по первой компоненте и возводим показатели в квадрат, чтобы видеть долю дисперсии по каждой из переменных.
Выглядит это так.
Массив данных нормируем функцией scale() и формируем объект PCA.cog, функцией princomp().
Делаем расчеты:
> summary(PCA.cog) # первая компонента объясняет 62% вариативности
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9
Standard deviation 2.4804704 0.98023889 0.80672096 0.73572091 0.68233922 0.60437426 0.50709939 0.48613109 0.44445940
Proportion of Variance 0.6197319 0.09678311 0.06555146 0.05452076 0.04689606 0.03679151 0.02590132 0.02380359 0.01989756
Cumulative Proportion 0.6197319 0.71651497 0.78206644 0.83658720 0.88348326 0.92027477 0.94617609 0.96997968 0.98987725
Comp.10
Standard deviation 0.31701618
Proportion of Variance 0.01012275
Cumulative Proportion 1.00000000
> PCA.cog$loadings # получаем нагрузки
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.10
cog.muslennya -0.301 -0.103 0.826 -0.255 0.350 0.105
cog.muslennya.m -0.356 0.174 -0.114 -0.362 -0.400 -0.691 -0.220
cog.pamyat.m -0.356 0.126 0.200 -0.103 0.239 -0.617 0.583 0.149
cog.pamyat.sluh -0.338 0.440 0.119 0.137 -0.131 -0.111 0.158 -0.195 0.746
cog.pamyat.zor -0.295 0.601 -0.199 0.235 -0.169 0.174 0.173 -0.599
cog.spruym.m -0.328 -0.207 0.232 -0.127 0.298 0.535 0.557 0.213 -0.213
cog.uvaga -0.287 0.315 -0.449 -0.592 0.499 -0.110
cog.uvaga.m -0.316 -0.317 -0.216 -0.472 -0.465 0.265 0.432 0.236
cog.uyava.m -0.308 -0.275 0.460 -0.329 -0.169 0.237 -0.626 -0.164
cog.vidchuttya.m -0.264 -0.327 -0.709 -0.226 0.424 -0.280 0.104
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.10
SS loadings 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Proportion Var 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
Cumulative Var 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> PCA.cog$loadings^2 # получаем дисперсии
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.10
cog.muslennya 0.683 0.122
cog.muslennya.m 0.127 0.131 0.160 0.477
cog.pamyat.m 0.127 0.381 0.340
cog.pamyat.sluh 0.115 0.194 0.557
cog.pamyat.zor 0.361 0.359
cog.spruym.m 0.108 0.286 0.310
cog.uvaga 0.202 0.350 0.249
cog.uvaga.m 0.101 0.223 0.216 0.187
cog.uyava.m 0.211 0.108 0.392
cog.vidchuttya.m 0.107 0.502 0.180
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.10
SS loadings 0.103 0.207 0.341 0.486 0.219 0.212 0.269 0.225 0.350 0.442
Proportion Var 0.010 0.021 0.034 0.049 0.022 0.021 0.027 0.022 0.035 0.044
Cumulative Var 0.010 0.031 0.065 0.114 0.136 0.157 0.184 0.206 0.241 0.285
3) Приемлемый процент дисперсии для каждой переменной = не меннее 0,10 (то есть 10%), так как каждый из параметров должен объяснять хотя бы 10-ую чать
дисперсии по главной (первой) компоненте.
Те переменные, которые имеют менший показатель классифицируются как "малоинфолрмативные", и не будут включены в дальнейший анализ.
Таким образом, получаем 4 показателя: мышление, два вида памяти и восприятие (последняя таблица, выше). Все показатели обясняют 47% дисперсии
(маловато но пускай).
4) Далее, используем показатели дисперсий как веса, чтобы корректировать вклад каждой из 4-х переменных в измерение когнитивных способностей.
Создаем вектор вектор с весовыми коэффициентами:
> weight.cog <- PCA.cog$loadings[c(2:4, 6), "Comp.1"]^2 # вектор с весовыми коэффициентами
> weight.cog
cog.muslennya.m cog.pamyat.m cog.pamyat.sluh cog.spruym.m
0.1265463 0.1270816 0.1145223 0.1076040
5) Умножаем каждый из 4-х параметров на соответствующий весовой коэффициент, и получаем взвешеный результат.
> head(cog) # до взвешивания
cog.muslennya.m cog.pamyat.m cog.pamyat.sluh cog.spruym.m
Androshchuk_N 3.0 2 2 3.5
Bartmanskyy_Vlas 4.5 4 3 4.5
Vasylyuk_Vlad 3.0 2 2 4.0
Verteletska_Anastasiya 4.5 5 3 5.0
Voloshchuk_Maksym 4.0 3 3 3.5
Volskyy_Artem 2.5 3 2 5.0
> СOG <- cog * weight.cog # где, "cog" - таблица с 4-мя параметрами
> head(COG) # после взвешивания
cog.muslennya.m cog.pamyat.m cog.pamyat.sluh cog.spruym.m
Androshchuk_N 0.3796388 0.2152081 0.2290446 0.4447857
Bartmanskyy_Vlas 0.5718674 0.5061851 0.3228121 0.5153503
Vasylyuk_Vlad 0.3435669 0.2541633 0.2530926 0.4304161
Verteletska_Anastasiya 0.4842182 0.5726115 0.3812449 0.6327314
Voloshchuk_Maksym 0.5061851 0.3228121 0.3435669 0.4447857
Volskyy_Artem 0.3177041 0.3796388 0.2152081 0.5726115
Вот, собственно и все.
Хотелось бы получить обратную связь: на сколько уместно такое решение, на сколько грамотно, или я что-то мудрую.
Да! Заметил такую штуку.
Результаты взвешивания получаются разными, в зависимости от того перемножаем ли мы показатели коэффициентs повекторно, или на каждый из них
по отдельности.
Например, вот такой результат получается, если умножить 4 параметр на 4 коэффициент:
> head(cog[4] * weight.cog[4]) # должен получится аналог 4-го столбца из предыдущей таблицы, но нет...
cog.spruym.m
Androshchuk_N 0.3766141
Bartmanskyy_Vlas 0.4842182
Vasylyuk_Vlad 0.4304161
Verteletska_Anastasiya 0.5380202
Voloshchuk_Maksym 0.3766141
Volskyy_Artem 0.5380202
Все показатели, отличаются от предыдущих, кроме 3-го испытуемого ( 0.4304161 ).
Чертовщина какая-то!
r