1
+ rm(list = ls())
2
+
3
+ library(MASS )
4
+
5
+ # --- CZESC TRZECIA LABORATORIUM NR 1 ---
6
+ rm(list = ls())
7
+
8
+ # Przypisanie wartości
9
+ X1 <- data.frame (x = c(2 ,2 ,2 ,1 ,3 ), y = c(2 ,1 ,3 ,2 ,2 ))
10
+ X2 <- data.frame (x = c(6 ,6 ,6 ,5 ,7 ), y = c(0 ,1 ,- 1 ,0 ,0 ))
11
+
12
+ # Wyznaczenie wartości średnich
13
+ m1 <- apply(X1 , 2 , mean )
14
+ m2 <- apply(X2 , 2 , mean )
15
+
16
+ # Wyznaczenie macierzy kowariancji
17
+ S1 <- cov(X1 )
18
+ S2 <- cov(X2 )
19
+
20
+ # Liczba elementów klas 1 i 2 oraz całkowita liczba
21
+ n1 <- nrow(X1 )
22
+ n2 <- nrow(X2 )
23
+ n <- n1 + n2
24
+
25
+ # Wyznaczenie macierzy zmienności wewnątrzgrupowej W
26
+ W <- ((n1 - 1 ) * S1 + (n2 - 1 ) * S2 )/ (n - 2 )
27
+
28
+ # Wyznaczenie wektora a
29
+ a <- ginv(W ) %*% (m2 - m1 )
30
+
31
+ # Nanoszenie punktow na wykres
32
+ plot(X1 , xlim = c(- 2 ,7 ), ylim = c(- 2 ,4 ), pch = 21 , col = " #AAAAAA" , bg = " #EEEEEE" , cex = 3 , xlab = " X" , ylab = " Y" , font = 2 , asp = 1 )
33
+ abline(v = 0 , h = 0 , col = " gray" )
34
+ points(X2 , pch = 21 , col = " #AAAAAA" , cex = 3 , bg = " #EEEEEE" )
35
+ text(X1 , " 1" , col = " blue" , font = 2 )
36
+ text(X2 , " 2" , col = " orange" , font = 2 )
37
+
38
+ # Rysowanie prostych rozdzielajacych
39
+ b <- 0.5 * t(a ) %*% (m1 + m2 )
40
+ abline(0 , a [2 ] / a [1 ], col = " red" , lty = 2 )
41
+ abline(b / a [2 ], - a [1 ] / a [2 ], col = " red" , lwd = 2 )
42
+
43
+
44
+ # --- CZESC DRUGA LABORATORIUM NR 1 ---
45
+ rm(list = ls())
46
+
47
+ S <- matrix (c(1 ,0 ,0 ,1 ),2 ,2 )
48
+ mt1 <- c(2 ,2 )
49
+ mt2 <- c(6 ,0 )
50
+ n1 <- 60
51
+ n2 <- 60
52
+ n <- n1 + n2
53
+
54
+ X1 <- mvrnorm(n1 , mt1 , S )
55
+ X2 <- mvrnorm(n2 , mt2 , S )
56
+
57
+ m1 <- apply(X1 , 2 , mean )
58
+ m2 <- apply(X2 , 2 , mean )
59
+
60
+ # Wyznaczenie macierzy kowariancji
61
+ S1 <- cov(X1 )
62
+ S2 <- cov(X2 )
63
+
64
+ # Liczba elementów klas 1 i 2 oraz całkowita liczba
65
+ n1 <- nrow(X1 )
66
+ n2 <- nrow(X2 )
67
+ n <- n1 + n2
68
+
69
+ # Wyznaczenie macierzy zmienności wewnątrzgrupowej W
70
+ W <- ((n1 - 1 ) * S1 + (n2 - 1 ) * S2 )/ (n - 2 )
71
+
72
+ # Wyznaczenie wektora a
73
+ a <- ginv(W ) %*% (m2 - m1 )
74
+
75
+ plot(X1 , ylim = c(- 5 ,5 ), xlim = c(- 2 ,10 ), pch = 19 , col = " blue" , xlab = " X" , ylab = " Y" , font = 2 , asp = 1 )
76
+ abline(v = 0 , h = 0 , col = " gray" )
77
+ points(X2 , pch = 19 , col = " orange" )
78
+
79
+ # Rysowanie prostych rozdzielajacych
80
+ b <- 0.5 * t(a ) %*% (m1 + m2 )
81
+ abline(0 , a [2 ] / a [1 ], col = " red" , lty = 2 )
82
+ abline(b / a [2 ], - a [1 ] / a [2 ], col = " red" , lwd = 2 )
83
+
84
+
85
+ # --- CZESC TRZECIA LABORATORIUM NR 1 ---
86
+ rm(list = ls())
87
+ library(scatterplot3d )
88
+
89
+ X1 <- data.frame (x = c(2 , 2 , 2 , 1 , 3 , 2 , 2 ), y = c(2 , 1 , 3 , 2 , 2 , 2 , 2 ), z = c(2 , 2 , 2 , 2 , 2 , 1 , 3 ))
90
+ X2 <- data.frame (x = c(4 , 4 , 4 , 3 , 5 , 4 , 4 ), y = c(4 , 3 , 5 , 4 , 4 , 4 , 4 ), z = c(4 , 4 , 4 , 4 , 4 , 3 , 5 ))
91
+
92
+ # Wyznaczenie wartości średnich
93
+ m1 <- apply(X1 , 2 , mean )
94
+ m2 <- apply(X2 , 2 , mean )
95
+
96
+ # Wyznaczenie macierzy kowariancji
97
+ S1 <- cov(X1 )
98
+ S2 <- cov(X2 )
99
+
100
+ # Liczba elementów klas 1 i 2 oraz ich całkowitej liczba
101
+ n1 <- nrow(X1 )
102
+ n2 <- nrow(X2 )
103
+ n <- n1 + n2
104
+
105
+ # Wyznaczenie macierzy zmienności wewnątrzgrupowej W
106
+ W <- ((n1 - 1 ) * S1 + (n2 - 1 ) * S2 )/ (n - 2 )
107
+
108
+ # Wyznaczenie wektora a
109
+ a <- ginv(W ) %*% (m2 - m1 )
110
+
111
+ # Wyznaczanie wyrazu wolnego
112
+ b <- - 0.5 * t(a ) %*% (m1 + m2 )
113
+
114
+ # Rysowanie punktów klasy 1
115
+ s3d <- scatterplot3d(X1 , pch = 21 , color = " #AAAAAA" , bg = " #EEEEEE" , cex.symbols = 3 , xlim = c(0 , 5 ), ylim = c(0 , 5 ), zlim = c(0 , 5 ), angle = 123 )
116
+
117
+ # Rzutowanie współrzędnych punktów z 3D na 2D
118
+ X1.coords <- s3d $ xyz.convert(X1 )
119
+ X2.coords <- s3d $ xyz.convert(X2 )
120
+
121
+ # Tekst dla punktów klasy 1
122
+ text(X1.coords , " 1" , col = " blue" , font = 2 )
123
+
124
+ # Kreslenie hiperplaszczyzny
125
+ s3d $ plane3d(- b / a [3 ], - a [1 ] / a [3 ], - a [2 ] / a [3 ], draw_lines = F , draw_polygon = T , polygon_args = list (col = rgb(1 , 1 , 0 , 0.4 )))
126
+
127
+ # Rysowanie punktów klasy 2
128
+ s3d $ points3d(X2 , pch = 21 , col = " #AAAAAA" , bg = " #EEEEEE" , cex = 3 )
129
+
130
+ # Tekst dla punktów klasy 2
131
+ text(X2.coords , " 2" , col = " orange" , font = 2 )
132
+
133
+ # --- CZESC CZWARTA LABORATORIUM NR 1 ---
134
+ rm(list = ls())
135
+
136
+ # Przypisanie wartosci do klas
137
+ X1 <- data.frame (x = c(1 , 2 , 2 , 2 , 3 ), y = c(2 , 3 , 2 , 1 , 2 ))
138
+ X2 <- data.frame (x = c(3 , 4 , 4 , 4 , 5 ), y = c(4 , 5 , 4 , 3 , 4 ))
139
+ X3 <- data.frame (x = c(4 , 5 , 5 , 5 , 6 ), y = c(6 , 7 , 6 , 5 , 6 ))
140
+ X4 <- data.frame (x = c(8 , 9 , 9 , 9 , 10 ), y = c(8 , 9 , 8 , 7 , 8 ))
141
+ X5 <- data.frame (x = c(9 , 10 , 10 , 10 , 11 ), y = c(10 , 11 , 10 , 9 , 10 ))
142
+
143
+ # Nanoszenie punktow na wykres
144
+ plot(X1 , xlim = c(0 ,12 ), ylim = c(0 ,12 ), pch = 21 , col = " #AAAAAA" , bg = " #EEEEEE" , cex = 3 , xlab = " X" , ylab = " Y" , font = 2 , asp = 1 )
145
+ abline(v = 0 , h = 0 , col = " gray" )
146
+ points(X2 , pch = 21 , col = " #AAAAAA" , cex = 3 , bg = " #EEEEEE" )
147
+ points(X3 , pch = 21 , col = " #AAAAAA" , cex = 3 , bg = " #EEEEEE" )
148
+ points(X4 , pch = 21 , col = " #AAAAAA" , cex = 3 , bg = " #EEEEEE" )
149
+ points(X5 , pch = 21 , col = " #AAAAAA" , cex = 3 , bg = " #EEEEEE" )
150
+
151
+ text(X1 , " 1" , col = " blue" , font = 2 )
152
+ text(X2 , " 2" , col = " red" , font = 2 )
153
+ text(X3 , " 3" , col = " darkgreen" , font = 2 )
154
+ text(X4 , " 4" , col = " black" , font = 2 )
155
+ text(X5 , " 5" , col = " orange" , font = 2 )
156
+
157
+ # Wyznaczanie srednich w klasach
158
+ m1 <- apply(X1 , 2 , mean )
159
+ m2 <- apply(X2 , 2 , mean )
160
+ m3 <- apply(X3 , 2 , mean )
161
+ m4 <- apply(X4 , 2 , mean )
162
+ m5 <- apply(X5 , 2 , mean )
163
+
164
+ # Wyznaczanie macierzy kowariancji
165
+ S1 <- cov(X1 )
166
+ S2 <- cov(X2 )
167
+ S3 <- cov(X3 )
168
+ S4 <- cov(X4 )
169
+ S5 <- cov(X5 )
170
+
171
+ # Liczności klas
172
+ n1 <- nrow(X1 )
173
+ n2 <- nrow(X2 )
174
+ n3 <- nrow(X3 )
175
+ n4 <- nrow(X4 )
176
+ n5 <- nrow(X5 )
177
+
178
+ # Ogólna liczność oraz liczba klas
179
+ n <- n1 + n2 + n3 + n4 + n5
180
+ g <- 5
181
+
182
+ # Średnia dla wszystkich punktów
183
+ m <- apply(rbind(X1 , X2 , X3 , X4 , X5 ), 2 , mean )
184
+
185
+ # Macierz zmienności międzygrupowej
186
+ B <- (n1 * (m1 - m ) %*% t(m1 - m ) + n2 * (m2 - m ) %*% t(m2 - m ) + n3 * (m3 - m ) %*% t(m3 - m ) + n4 * (m4 - m ) %*% t(m4 - m ) + n5 * (m5 - m ) %*% t(m5 - m ))/ (g - 1 )
187
+
188
+ # Macierz zmienności wewnątrzgrupowej
189
+ W <- 1 / (n - g )* ((n1 - 1 ) * S1 + (n2 - 1 ) * S2 + (n3 - 1 ) * S3 + (n4 - 1 ) * S4 + (n5 - 1 ) * S5 )
190
+
191
+ # Macierz pomocnicza
192
+ U <- ginv(W ) %*% B
193
+
194
+ # Wyznaczenia wartosci i wektorow własnych
195
+ lambda <- eigen(U )
196
+
197
+ # Wektor własny odpowiadający maksymalnej wartości własnej
198
+ a <- lambda $ vectors [,which.max(lambda $ values )]
199
+
200
+ # Rysowanie kierunku a
201
+ abline(0 , a [2 ] / a [1 ], col = " violet" , lwd = 2 )
202
+
203
+ # Funkcja do rzutowania obserwacji na kierunek a
204
+ rzutowanie <- function (X , A ) {
205
+ Xz <- (X $ y * A + X $ x ) / (A ** 2 + 1 )
206
+ Yz <- A * Xz
207
+ data.frame (x = Xz , y = Yz )
208
+ }
209
+
210
+ # Wyznaczenie współczynnika kierunkowego prostej
211
+ A <- a [2 ] / a [1 ]
212
+
213
+ # Wykreślanie zrzutowanych punktów
214
+ points(rzutowanie(X1 , A ), col = " blue" , pch = 19 , cex = 1.5 )
215
+ points(rzutowanie(X2 , A ), col = " red" , pch = 19 , cex = 1.5 )
216
+ points(rzutowanie(X3 , A ), col = " darkgreen" , pch = 19 , cex = 1.5 )
217
+ points(rzutowanie(X4 , A ), col = " black" , pch = 19 , cex = 1.5 )
218
+ points(rzutowanie(X5 , A ), col = " orange" , pch = 19 , cex = 1.5 )
219
+
220
+ rm(list = ls())
0 commit comments