forked from yordanbabukov/Statistics-and-probabilities-notes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3-new.txt
133 lines (103 loc) · 12.5 KB
/
3-new.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
### - 3. Изследване на данни с една променлива - ###
#Грубо казано има два вида типове данни: числови и категорни. Категорните са данни, които описват някакво качество на обектите, които изследваме.
#Типичен пример за категорна промелнлива (фактор) е цветът на очите при... организмите, които имат очи. Възможни категории (нива на фактора) са "зелен", "кафяв", "син" и т.н.
eyecolour = c("Green", "Green", "Brown", "Blue", "Green", "Blue") #Нека това е векторът, който държи информацията за цвета на очите
table(eyecolour) #Тази функция прави таблица, в която се вижда броят на наблюденията, които попадат във всяко ниво на фактора
barplot(table(eyecolour), col=c("blue", "brown", "green")) #С функцията 'barplot', която приема като аргумент таблица, правим стълбчеста диаграма на данните
#Ние знаем, че векторът 'eyecolour', който дефинирахме, пази данните за категорна променлива, но засега R го възприема просто като вектор от стрингове. Можем (и е много препоръчително) директно да му кажем,
#че става въпрос за фактор:
Icolour=factor(eyecolour, levels = c("Green", "Blue", "Brown")) #Експлицитно казваме на R, да третира вектора като нива на фактор и го записваме в нов обект
barplot(table(Icolour), col=rainbow(3))
beer=scan() #Алтернативен начин за записване на данни под формата на вектор, чрез използването на функцията 'scan'
#3 4 1 1 3 4 3 3 1 3 2 1 2 1 2 3 2 3 1 1 1 1 4 3 1
числата от 1 до 4 отговарят на даден вид бира, продаден в заведение.
barplot -> показва чрез височина на колоните колко пъти е настъпило дадено събитие или процентно колко събитията са в дадена категория.
barplot(beer) -> лошо (грешно) представяне на данните, не искаме 25 катерории, искаме само 4!
barplot(table(beer)) #Стандартен барплот
barplot(table(beer)/length(beer), names = c("Bugrasko", "Stolichno", "Tuborg", "Shumensko")) #В този барплот вече не се показват броят на наблюденията, а тяхната пропорция, т.к. сме разделили всичко на общия брой наблюдения
Същият резултат може да бъде демонстриран и чрез диаграмата на кашкавалените пити.
BEER=table(beer) #Записваме таблицата
pie(BEER) -> не много ясно и безцветна.
names(BEER) = c("Bugrasko", "Stolichno", "Tuborg", "Shumensko") #Даваме имена на видовете бира
pie(BEER) -> вече с имена, но пак е безцветна
pie(BEER, col = rainbow(4), main = "The best beer") -> вече е оцветена с открояващи се цветове и със заглавие на диаграмата.
#Другият вид данни са числовите, които от своя страна могат да бъдат дискретни или непрекъснати. Пример за дискретна числова променлива е броят деца в семейството. За непрекъсната променлива може да смятаме например височината на човек или теглото му.
#Като правило за различаване на числови от категорни данни може да ни служи идеята, че изчисляването на средно при категорните променливи е не особено смислено (би било странно да търсим средния цвят на очите на хората)
Най-често характеризирането на числови данни става чрез измерването на някаква нейна величина (средно или медиана) и тяхното стандартно отклонение.
Често ползвани функции в R: mean, var, sd, median, fivenum, summary
Нека годишната заплата(в милиони) на CEO-тата е следната:
sals = scan()
# 12 .4 5 2 50 8 3 1 4 0.25
quantile(sals,.25) #С тази функция намираме квантилите на извадката. В случая .25 квантилът е стойността на това наблюдение, така че 1/4 от наблюденията да са по-малки от него, а останалите 3/4 да са по-големи от него (респективно вляво и вдясно от него във вариационния ред)
quantile(sals,c(.25,.75)) #Взимаме два квантила наведнъж. В случая са .25 и .75.
quantile(sals, seq(0,1,.1))
Какво е квартил?
1ви квартил представлява стойността, под която 25% от данните имат по-ниски стойности.
2ри квартил съвпада с медианата. т.е. стойността, под която 50% от данните имат по-ниски стойности.
3ти квартил представлява стойността, под която 75% от данните имат по-ниски стойности.
Формула за пресмятане на 1ви, 2ри, 3ти квартил:
1+(length(sals)-1)*25/100
1+(length(sals)-1)*50/100
1+(length(sals)-1)*75/100
Получаваме, кой е елементът, под който са 25/50/75 процента от данните.
Пример:
1+(length(sals)-1)*25/100 = 3.25
sort(sals)
0.25 0.40 1.00 2.00 3.00 4.00 5.00 8.00 12.00 50.0
3.25тият елемент е между 1 и 2, като е на 0.25 разстояние от 1 и 0.75 разстояние от 2. (т.е. 1.25)
1+(length(sals)-1)*75/100 = 7.75
7.75тият елемент е между 5 и 8, като е на 0.75 разстояние от 5 и 0.25 разстояние от 8. (т.е. 7.25) 0.25 разстояние от 5 до 8 = 0.75 (3/4)
формула:
елементът отлявата страна+(елементът от дясната страна-елементът от лявата страна)*разстоянието
5+(8-5)*.75 = 7.25
*Забележка: 1ви квартил = 0.25 квантил = 25 персентил.
summary(sals) #Връща дескриптивни статистики. -> min/max/median/mean/1st Q/3rd Q
fivenum(sals) -> връща ни следните измервания на извадката: минимум, медиана на първите 50% от данни, медиана, медиана на 2рите 50% от данните, максимум
IQR(sals) #'IQR' идва от Inter-Quartile Range и дава разликата между Q3 и Q1. В какъв диапазон са ни сравнително добрите стойности на извадката.
Разлика между lower hinge (медианата на първите 50% от данните) и първи квартил:
Медиата е просто средата на данните.
Квартилът е по-точен, тъй когато е между 2 стойности не е средното на двете, а има тежест определяща го евентуално по-близо до единия от двата.
*Съществуват различни методи за изчисляване на квартилите. Ето примерни два метода:
1) медианата на първите 50% от елементите е 1ви квартил.
2) по-горе описания алгоритъм получаваме 1ви квартил
*В общия случай метод 1 и метод 2 връщат различен резултат. fivenum връща метод 1. summary връща метод 2.
mean(sals)
mean(sals,trim=1/10) #Аргументът 'trim' ,,реже'' по 1/10 от двете страни на вариационния ред на данните. Това е удобно, когато данните са ни симетрично (по възможност) и имаме наличие на аутлайъри (outliers) и искаме да изчислим средното като се абстрахираме от тях.
*outlier -> данни, които много се различават от останалите данни в извадката.
Представяне на числови данни:
Нека имаме данни за точките вкарани от играчи в баскетболен мач
scores = scan()
#2 3 16 23 14 12 4 13 2 0 0 0 6 28 31 14 4 8 2 5
stem(scores) #Прави stem and leaves плот
stem(scores, scale=2) #същото като горното, но разделя дългите резултати на 2 реда.
Преобразуване на числови данни в категорни:
Искаме да категоризираме на заплатите на CEO-тата по следния начин:
група 1: получават от 0 до 1 милион.
група 2: получават от 1 до 5 милиона.
група 3: получават от 5 до 50 милиона.
Това става чрез функция cut.
categories <- cut(sals, breaks=c(0,1,5,max(sals)))
С breaks указваме групите.
table(categories)
Именуване на категориите:
levels(categories) <- c("poor", "rich", "damn")
table(categories)
Представяне на данни чрез хистограма:
x <- scan()
#29.6 28.2 19.6 13.7 13.0 7.8 3.4 2.0 1.9 1.0 0.7 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1
hist(x) #Правим хистограма, като скалата по оста y дава броят на наблюденията, които попадат във всеки интервал
Може да направим и процентна пропорция чрез хистограма:
hist(x, probability=TRUE)
rug(x) #показва ни къде точно се намират наблюденията.
rug(jitter(x)) #леко размърдва наблюденията с еднакви стойности, за да ги разграничим/видим че са повече от една.
Какво е jitter?
jitter най-кратко казано е честота.
hist(x,breaks=10) #с break указваме, колко колони да имаме в хистограмата.
hist(x,breaks=c(0,1,2,3,4,5,10,20,max(x))) #Вместо брой на стълбчетата можем директно да кажем, кои да са краищата на интервалите, които служат за основа на стълбчетата
Друг начин за представяне на числови данни е чрез боксплот.
boxplot(x) #Прави боксплот, още известен като ,,кутия с мустаци''. Самата кутия има за граници Q1 и Q3. Мустаците са дълги 1.5*(Q3-Q1), а черната ивица в средата маркира медианата.
Останалите (кръгчетата) са т.н. outlier-и.
outlier -> много особени наблюдения (изключения)
Пример: брой изядени сандвичи за месец от студентите по КН, група 6.
sandwiches <- c(4, 7, 6, 4, 5, 2, 0, 6, 3, 1, 0, 5, 4, 57, 8, 1, 6, 3)
boxplot(sandwiches)