Математические достижения школьника на сегодняшний день являются важным показателем как системы образования в целом, так и личных особенностей ребенка, которые могут повлиять на его будущее. Данная работа - попытка ответить, какие факторы влияют на математические достижения школьника, и, в частности, что более важно для успеваемости школьников в наши дни: количество книг, имеющихся дома, или наличие планшетов/ПК?
Для ответа на эти вопросы использовались данные международной оценки математики восьмом классе - TIMSS 2015. Для анализа были использованы следующие переменные: BSMMAT01 - математические достижения; BSBG01 - пол; BSBG06A - наличие собственного компьютера/планшета; BSBG06B - наличие общего компьютера/планшета; BSBG06C - наличие учебного стола; BSBG06D - наличие собственной комнаты; BSBG06E - наличие Интернет-соединения; BSBG06F - наличие собственного мобильного телефона; BSBG06G - наличие игровой системы; BSBG06H - наличие музыкальных инструментов (например, гитара, фортепиано); BSBG06I - наличие автомобиля (один или несколько); BSBG06J - наличие квартиры (или дома) с 4 и более комнатами; BSBG06K - наличие посудомоечной машины; BSBG10A - рождение в стране/за ее пределами; BSBG04 - количество книг в доме (1: 0-10 книг; 2: 11-25 книг; 3: 26-100 книг; 4: 101-200 книг; 5: более 200);
library(haven)
library(foreign)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(polycor)
library(corrplot)
## corrplot 0.84 loaded
library(psych)
##
## Attaching package: 'psych'
## The following object is masked from 'package:polycor':
##
## polyserial
BSGRUSM6 <- read_sav("BSGRUSM6.sav")
df = BSGRUSM6 %>% dplyr::select("BSBG06A", "BSBG06B", "BSBG06C",
"BSBG06D", "BSBG06E", "BSBG06F", "BSBG06G", "BSBG06H", "BSBG06I", "BSBG06J",
"BSBG06K", "BSMMAT01", "BSBG01", "BSBG10A", "BSBG04")
df = df %>% na.omit()
df$BSMMAT01 = as.numeric(df$BSMMAT01)
df$BSBG01 = as.factor(df$BSBG01) # 1: Girl; 2: Boy
df$BSBG10A = as.factor(df$BSBG10A)#GEN\BORN IN <COUNTRY> 1:yes; 2: no
df$BSBG04 = as.numeric(df$BSBG04)#GEN\AMOUNT OF BOOKS IN YOUR HOME 1: 0–10 books; 2: 11–25 books; 3: 26–100 books; 4: 101–200 books; 5: More than 200
df$BSBG06A = as.factor(df$BSBG06A) #GEN\HOME POSSESS\COMPUTER TABLET OWN 1:yes; 2: no
df$BSBG06B = as.factor(df$BSBG06B) #GEN\HOME POSSESS\COMPUTER TABLET SHARED
model = lm(BSMMAT01~BSBG01 + BSBG10A + BSBG04 + BSBG06A + BSBG06B, data = df)
summary(model)
##
## Call:
## lm(formula = BSMMAT01 ~ BSBG01 + BSBG10A + BSBG04 + BSBG06A +
## BSBG06B, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -250.060 -54.498 2.039 54.050 272.025
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 499.873 3.842 130.098 < 2e-16 ***
## BSBG012 9.413 2.309 4.077 4.63e-05 ***
## BSBG10A2 -1.098 6.404 -0.171 0.864
## BSBG04 11.981 1.106 10.833 < 2e-16 ***
## BSBG06A2 13.840 3.217 4.303 1.72e-05 ***
## BSBG06B2 -22.734 3.123 -7.278 3.96e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 77.69 on 4590 degrees of freedom
## Multiple R-squared: 0.04314, Adjusted R-squared: 0.04209
## F-statistic: 41.38 on 5 and 4590 DF, p-value: < 2.2e-16
Переменная рождение в стране/за ее пределами оказалась незначимой. Все остальные переменные значимы на уровне значимости, близком к 0. p-value полученной модели < 2.2e-16 (модель значима), Adjusted R-squared = 0.04209, что является очень низким значением. Таким образом, согласна аутпуту модели: - мальчики, в сравнении с девочками, на имеют математическую успеваемость на 9.413 выше; - при увеличении переменной “количество книг” на одну единицу (переход в следующую категорию), математическая успеваемость увеличивается на 11.98; - не имеющие собственный компьютер/планшет, в сравнении с теми, у кого он есть, имеют успеваемость по математике выше на 13.84; - у учеников, не имеющих общего компьютера или планшета, математические достижения ниже на 22.734;
model1 <- update(model, ~.+ BSBG04*BSBG06B)
summary(model1)
##
## Call:
## lm(formula = BSMMAT01 ~ BSBG01 + BSBG10A + BSBG04 + BSBG06A +
## BSBG06B + BSBG04:BSBG06B, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -250.942 -54.781 1.775 54.299 271.199
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 497.4931 4.0969 121.432 < 2e-16 ***
## BSBG012 9.4686 2.3083 4.102 4.17e-05 ***
## BSBG10A2 -0.9846 6.4031 -0.154 0.8778
## BSBG04 12.7829 1.2053 10.606 < 2e-16 ***
## BSBG06A2 13.6824 3.2173 4.253 2.15e-05 ***
## BSBG06B2 -8.7044 8.9564 -0.972 0.3312
## BSBG04:BSBG06B2 -5.0340 3.0121 -1.671 0.0947 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 77.68 on 4589 degrees of freedom
## Multiple R-squared: 0.04372, Adjusted R-squared: 0.04247
## F-statistic: 34.96 on 6 and 4589 DF, p-value: < 2.2e-16
Интерактивный эффект статистически значим (на уровне значимости = 0.1), сравним модели с помощью показателей AIC и anova.
AIC(model1)
## [1] 53060.48
AIC(model)
## [1] 53061.28
anova(model, model1)
## Analysis of Variance Table
##
## Model 1: BSMMAT01 ~ BSBG01 + BSBG10A + BSBG04 + BSBG06A + BSBG06B
## Model 2: BSMMAT01 ~ BSBG01 + BSBG10A + BSBG04 + BSBG06A + BSBG06B + BSBG04:BSBG06B
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 4590 27704866
## 2 4589 27688013 1 16853 2.7932 0.09473 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AIC второй модели меньше, а аутпут anova показывает, что Pr(>F) < 0.1 => мы значимо улучшили нашу модель.
summary(model1)
##
## Call:
## lm(formula = BSMMAT01 ~ BSBG01 + BSBG10A + BSBG04 + BSBG06A +
## BSBG06B + BSBG04:BSBG06B, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -250.942 -54.781 1.775 54.299 271.199
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 497.4931 4.0969 121.432 < 2e-16 ***
## BSBG012 9.4686 2.3083 4.102 4.17e-05 ***
## BSBG10A2 -0.9846 6.4031 -0.154 0.8778
## BSBG04 12.7829 1.2053 10.606 < 2e-16 ***
## BSBG06A2 13.6824 3.2173 4.253 2.15e-05 ***
## BSBG06B2 -8.7044 8.9564 -0.972 0.3312
## BSBG04:BSBG06B2 -5.0340 3.0121 -1.671 0.0947 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 77.68 on 4589 degrees of freedom
## Multiple R-squared: 0.04372, Adjusted R-squared: 0.04247
## F-statistic: 34.96 on 6 and 4589 DF, p-value: < 2.2e-16
Таким образом, p-value выбранной модели < 2.2e-16, значит, модель значима, Adjusted R-squared выбранной модели = 0.04247, что говорит нам о том, что модель объясняет только 4.24% случаев. Кроме того, значимыми предикторами являются переменные BSBG01, BSBG04, BSBG06A, BSBG04:BSBG06B. Так: - мальчики, в сравнении с девочками, на имеют математическую успеваемость на 9.47 выше; - при увеличении переменной “количество книг” на одну единицу (переход в следующую категорию), математическая успеваемость увеличивается на 12.78; - не имеющие собственный компьютер/планшет, в сравнении с теми, у кого он есть, имеют успеваемость по математике выше на 13.68; - интерактивный эффект имеет негативную связь, в дальнейшем будет рассмотрен график взаимосвязи.
df1 = df %>% dplyr::select(-BSMMAT01, -BSBG01, -BSBG10A, -BSBG04)
Матрица корреляций:
df1 <- as.data.frame(lapply(df1, as.factor))
df.cor = hetcor(df1)
df.cor
##
## Two-Step Estimates
##
## Correlations/Type of Correlation:
## BSBG06A BSBG06B BSBG06C BSBG06D BSBG06E BSBG06F
## BSBG06A 1 Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06B -0.07561 1 Polychoric Polychoric Polychoric Polychoric
## BSBG06C 0.3793 -0.004901 1 Polychoric Polychoric Polychoric
## BSBG06D 0.2574 0.003977 0.5015 1 Polychoric Polychoric
## BSBG06E 0.3285 0.3715 0.3927 0.1608 1 Polychoric
## BSBG06F 0.2577 0.3332 0.3581 0.1726 0.5748 1
## BSBG06G 0.281 -0.05713 0.06928 0.1041 0.1557 0.2273
## BSBG06H -0.00151 0.1143 0.167 0.05854 0.2097 0.2621
## BSBG06I 0.1823 0.2073 0.1896 0.1922 0.3172 0.241
## BSBG06J 0.131 0.02949 0.16 0.3304 0.09635 0.04038
## BSBG06K 0.1893 0.0424 0.2341 0.2095 0.2198 0.367
## BSBG06G BSBG06H BSBG06I BSBG06J BSBG06K
## BSBG06A Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06B Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06C Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06D Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06E Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06F Polychoric Polychoric Polychoric Polychoric Polychoric
## BSBG06G 1 Polychoric Polychoric Polychoric Polychoric
## BSBG06H 0.1188 1 Polychoric Polychoric Polychoric
## BSBG06I 0.2333 0.1716 1 Polychoric Polychoric
## BSBG06J 0.137 0.07844 0.3378 1 Polychoric
## BSBG06K 0.3886 0.2255 0.3153 0.2452 1
##
## Standard Errors:
## BSBG06A BSBG06B BSBG06C BSBG06D BSBG06E BSBG06F BSBG06G BSBG06H
## BSBG06A
## BSBG06B 0.03443
## BSBG06C 0.03312 0.04005
## BSBG06D 0.02746 0.02885 0.02747
## BSBG06E 0.04456 0.0426 0.04688 0.04432
## BSBG06F 0.05612 0.05256 0.0573 0.05346 0.05202
## BSBG06G 0.03045 0.02958 0.03638 0.0259 0.05006 0.06345
## BSBG06H 0.02888 0.02834 0.03423 0.02458 0.04647 0.05775 0.02509
## BSBG06I 0.02828 0.02752 0.0331 0.02422 0.04161 0.05218 0.02537 0.02423
## BSBG06J 0.02797 0.02774 0.03288 0.02223 0.04434 0.05403 0.02463 0.02356
## BSBG06K 0.0327 0.03166 0.03975 0.027 0.05515 0.07749 0.02436 0.02557
## BSBG06I BSBG06J
## BSBG06A
## BSBG06B
## BSBG06C
## BSBG06D
## BSBG06E
## BSBG06F
## BSBG06G
## BSBG06H
## BSBG06I
## BSBG06J 0.02214
## BSBG06K 0.02629 0.02524
##
## n = 4596
График, отображающий матрицу корреляций:
cor.plot(df.cor)
Затем, с помощью Parallel Analysis Scree Plots было отобрано первоначальное число факторов. Так, график (число треугольников над пунктиром) и аутпут показывают, что оптимальное число = 5.
df1 <- as.data.frame(lapply(df1, as.numeric))
fa.parallel(df.cor$correlations, n.obs=4596, fa="both", n.iter=100)
## Parallel analysis suggests that the number of factors = 5 and the number of components = 4
Попробуем построить модель с числом факторов, равным 5 и отсутствием вращения.
fa1 = fa(df.cor$correlations, nfactors=5, rotate="none", fm="ml")
fa.diagram(fa(df.cor$correlations, nfactors=5, rotate="none", fm="ml"))
Как видно на диаграмме, фактор №5 не объясняет ни одну переменную. Попробуем уменьшить число факторов.
fa1 = fa(df.cor$correlations, nfactors=4, rotate="none", fm="ml")
fa.diagram(fa(df.cor$correlations, nfactors=4, rotate="none", fm="ml"))
В данном случае фактор №4 не объясняет ни одну переменную. Уменьшаем дальше.
fa1 = fa(df.cor$correlations, nfactors=3, rotate="none", fm="ml")
fa.diagram(fa(df.cor$correlations, nfactors=3, rotate="none", fm="ml"))
В случае числа факторов, равного 3, все факторы объясняют 2 и более переменные, Proportions Explained распределены следующим образом: 0.53:0.28:0.19. Попробуем посмотреть на модель с 2 факторами.
fa2 = fa(df.cor$correlations, nfactors=2, rotate="none", fm="ml")
fa.diagram(fa(df.cor$correlations, nfactors=2, rotate="none", fm="ml"))
В данной модели все факторы объясняют 3 и более переменные, но Proportion Explained распределена неравномерно. Остановимся на 3 факторах.
Далее попробуем добавить в модель вращение varimax и oblimin, а также построить модель не с корреляциями, а с изначальной датой и cor = “mixed”.
fa1 = fa(df.cor$correlations, nfactors=3, rotate="varimax", fm="ml")
fa.diagram(fa(df.cor$correlations, nfactors=3, rotate="varimax", fm="ml"))
fa1 = fa(df.cor$correlations, nfactors=3, rotate="oblimin", fm="ml")
## Loading required namespace: GPArotation
fa.diagram(fa(df.cor$correlations, nfactors=3, rotate="oblimin", fm="ml"))
fa3 = fa(df1, nfactors = 3, cor="mixed", fm="mle")
fa.diagram(fa(df1, nfactors = 3, cor="mixed", fm="mle"))
Все модели показали лучший результат, чем модель без вращения. Вращение oblimin (в обоих случаях) демонстрирует лучшее распределение Proportion Explained, все переменные, входящие в факторы, совпадают в последних двух моделях, так, мы остановимся на последней модели для интерпретации факторов.
f2 <- df1[c('BSBG06E', 'BSBG06F', 'BSBG06B')]
f1 <- df1[c('BSBG06C', 'BSBG06D', 'BSBG06A')]
f3 <- df1[c('BSBG06K', 'BSBG06G', 'BSBG06I', 'BSBG06J')]
a = fa3$scores
a = cbind(a, f1, f2, f3)
model4 = lm(df$BSMMAT01~df$BSBG01 + df$BSBG10A + df$BSBG04 + df$BSBG06A + df$BSBG06B + df$BSBG04*df$BSBG06B + a$ML2 + a$ML1 + a$ML3)
summary(model4)
##
## Call:
## lm(formula = df$BSMMAT01 ~ df$BSBG01 + df$BSBG10A + df$BSBG04 +
## df$BSBG06A + df$BSBG06B + df$BSBG04 * df$BSBG06B + a$ML2 +
## a$ML1 + a$ML3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -250.963 -53.805 1.872 53.863 269.783
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 496.4015 4.1226 120.410 < 2e-16 ***
## df$BSBG012 10.4456 2.3238 4.495 7.12e-06 ***
## df$BSBG10A2 -0.5034 6.3783 -0.079 0.9371
## df$BSBG04 12.0515 1.2138 9.929 < 2e-16 ***
## df$BSBG06A2 18.5907 3.5332 5.262 1.49e-07 ***
## df$BSBG06B2 5.5675 9.3720 0.594 0.5525
## a$ML2 -8.8800 1.8128 -4.898 9.99e-07 ***
## a$ML1 -0.3823 1.5034 -0.254 0.7993
## a$ML3 2.2684 1.6732 1.356 0.1752
## df$BSBG04:df$BSBG06B2 -5.8035 3.0034 -1.932 0.0534 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 77.36 on 4586 degrees of freedom
## Multiple R-squared: 0.05205, Adjusted R-squared: 0.05019
## F-statistic: 27.98 on 9 and 4586 DF, p-value: < 2.2e-16
Так, модель значима, так как p-value < 2.2e-16. Adjusted R-squared = 0.05019, что немного выше, чем у предыдущей модели, но все равно очень мало. Значимыми предикторами являются следующие переменные: BSBG01, BSBG04, BSBG06A, ML2, BSBG04:BSBG06B2. - мальчики, в сравнении с девочками, на имеют математическую успеваемость на 10.45 выше; - при увеличении переменной “количество книг” на одну единицу (переход в следующую категорию), математическая успеваемость увеличивается на 12.05; - не имеющие собственный компьютер/планшет, в сравнении с теми, у кого он есть, имеют успеваемость по математике выше на 18.59; - фактор, относящийся к минимальному набору технических вещей, необходимых для ребенка, отображает негативную связь с зависимой переменной, т.е. при увеличении значения, математические достижения будут уменьшаться; - интерактивный эффект имеет негативную связь, в дальнейшем будет рассмотрен график взаимосвязи.
Интеракция
library(lattice)
#model2
xyplot(df$BSMMAT01 ~ df$BSBG04, main = "Наличие общего планшета/ПК (1 - есть, 2 - нет)", xlab = "Фактор №2", ylab = "Количество книг в доме", groups = df$BSBG06B, data= df, type= c('p','r'),
grid= T, lwd= 3, auto.key= T,)
Вывод: при увеличении числа книг в доме те, у кого есть общий компьютер/планшет, имеют лучшие достижения в математике, чем те, у кого его нет (разрыв увеличивается).
plot(df$BSMMAT01~df$BSBG04, xlab = "Количество книг в доме", ylab = "Математические достижения")
plot(df$BSMMAT01~a$ML2, xlab = "Фактор №2", ylab = "Математические достижения")
fa.diagram(fa(df1, nfactors = 3, cor="mixed", fm="mle"))
Таким образом, число книг в доме прямо пропорционально успеваемости по математике, тогда как наличие собственного компьютера/планшета негативно влияет на учебные достижения. Общий компьютер, наоборот, увеличивает успеваемость, и при росте числа книг, этот разрыв увеличивается. Также на достижения в математике влияет пол.