Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.79 KB | None | 0 0
  1. ---
  2. title: "MODELE LINIOWE 1"
  3. author: "Maciej Tadej"
  4. output: pdf_document
  5. ---
  6.  
  7. ```{r setup, include=FALSE}
  8. knitr::opts_chunk$set(echo = TRUE)
  9. library(MASS)
  10. ```
  11.  
  12. **ZADANIE 1**
  13. \
  14. \
  15. Naszym celem w zadaniu pierwszym było wygenerowanie 100 wektorów z rozkładu normalnego dwuwymiarowego i zaznaczenie tych punktów na płaszczyźnie.
  16. \
  17. \
  18. Na początku używamy komendy set.seed, która zapewni nam powtarzalność wylosowanych danych próbkowych, z których będziemy korzystać w tym zadaniu.
  19. Następnie generujemy macierz, która jest wymiarów *1000x2*. Zawiera ona w związku z tym 1000 wektorów z rozkładu normalnego dwuwymiarowego.
  20. \
  21. \
  22. ```{r}
  23. set.seed(2000)
  24. m <- matrix(rnorm(1000*2,0,1),1000,2)
  25. ```
  26. \
  27. Teraz zgodnie z tym o co jesteśmy proszeni w poleceniu zadania umieszczamy naszą próbę na płaszczyźnie:
  28. \
  29. ```{r}
  30. plot(m, xlab = "wartość pierwszej współrzędnej", ylab = "wartość drugiej współrzędnej", col = "red")
  31. ```
  32. \
  33. \
  34. Widzimy, że punkty skupiają się w stosunkowo niewielkiej odległości od punktu *<0,0>*, co wskazuje na normalność rozkładu naszych danych. Należy zwrócić uwagę, że mogliśmy użyć funkcji *rnorm* do wygenrowania wektorów z rozkładu wielowymiarowego, pomimo że funkcja ta służy do generowania rozkładów jednowymiarowych, ponieważ jest to rozkład normalny i zmienne są nieskorelowane, co implikuje ich niezależność.
  35. \
  36. \
  37. **ZADANIE 2**
  38. \
  39. \
  40. Naszym drugim zadaniem jest odnaleźć przekształcenie liniowe, które zamieni otrzymaną wyżej chmurę punktów w chmurę z poniżych rozkładów:
  41. \
  42. \
  43. Aby znaleźć to przekształcenie będziemy korzystali z faktu podanego na liście 1:
  44. \
  45. \[
  46. Y = AX + B\ \ oraz \ \ zachodzi \ \ \mu^{Y} = A\mu^{X} + B \ \ i \ \ \Sigma^{Y} = A\Sigma^{X}A^{T}
  47. \]
  48. ```{r, echo=FALSE}
  49. mi <- c(4,2)
  50. sigma1 <- matrix(c(1, 0.9, 0.9, 1), 2, 2)
  51. ```
  52. **a)**
  53. \[
  54. \Sigma=
  55. \left[ {\begin{array}{cc}
  56. 1 & 0.9 \\
  57. 0.9 & 1 \\
  58. \end{array} } \right], \mu = (4,2)
  59. \]
  60. \
  61. Na samymy początku musimy znaleźć naszą macierz A. Aby to zrobić skorzystamy z rozkładu *choleskiego*. Macierz A otrzymana przy jego użyciu jest górnotrójkątna. Zauważmy ponadto, że współczynnik B jest naszym wektorem wartości oczekiwanych.
  62. Uzbrojeni w tę wiedzę możemy zacząć poszukiwanie przekształcenia liniowego Y, o które jesteśmy proszeni w treści zadania.
  63. \
  64. \
  65. ```{r}
  66. A1 <- chol(sigma1)
  67. B1 <- mi
  68. Y1 <- t(A1)%*%t(m) + B1
  69. ```
  70. \
  71. \
  72. Ponieważ macierz *A1* wygenerowaliśmy przy pomocy rozkładu choleskiego, musimy ją transponować podczas obliczania przekształcenia liniowego Y, aby odwrócić efekt transpozycji, który powstał w trakcie wykonywania funkcji *chol*. Następnie musimy również transponować naszą macierz wektorów z rozkładu normalnego, ponieważ jest ona wymiaru *1000x2*, a chcemy mnożyć ją z macierzą rozmiaru *2x1000*.
  73. Wygenerujemy jeszcze naszą chmurę punktów z zadania 1 po odpowiednim przekształceniu za pomocą gotowej funkcji w R: *mvrnorm*.
  74. \
  75. ```{r}
  76. a <- mvrnorm(1000, mi, sigma1)
  77. ```
  78. \
  79. Następnie umieszczamy obie przekształcone chmury na płaszczyźnie.
  80. \
  81. \
  82. ```{r}
  83. op <- par(mfrow = c(1,2))
  84. plot(t(Y1),xlim = c(1,8), ylim = c(-1,5), col = "red", main = "Moje przekształcenie",
  85. xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
  86. plot(a, xlim = c(1,8), ylim = c(-1,5), col = "blue", main = "Przekształcenie mvrnorm",
  87. xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
  88. ```
  89. \
  90. \
  91. **WNIOSEK**: Na podstawie porównania wykresów naszych przkeształceń możemy wnioskować, że moje przekształcenie liniowe jest dobre i spełnia warunki zadania. Punkty wykresu są skupione (tam jest ich centrum) w punkcie *<4,2>*, tak jak należy się spodziewać po wektorze wartości własnych, oraz widać, że dane są rosnące, co jest skutkiem tego, iż kowariancje w macierzy kowariancji (sigma1) są dodatnie. W związku z tymi dwoma rzeczami możemy również potwierdzić fakt, że przekształcenia liniowe zachowują normalność rozkładu.
  92. \
  93. \
  94. ```{r, echo=FALSE}
  95. mi <- c(4,2)
  96. sigma2 <- matrix(c(1,-0.9,-0.9, 1), 2, 2)
  97. ```
  98. **b)**
  99. \[
  100. \Sigma=
  101. \left[ {\begin{array}{cc}
  102. 1 & -0.9 \\
  103. -0.9 & 1 \\
  104. \end{array} } \right], \mu = (4,2)
  105. \]
  106. \
  107. Ponownie zaczynamy od poszukiwania macierzy A2. Wyznaczamy ją z rozkładu *choleskiego*. Macierz A otrzymana przy jego użyciu jest górnotrójkątna. Zauważmy ponadto, że współczynnik B jest naszym wektorem wartości oczekiwanych.
  108. Teraz możemy zacząć wyznaczać nasze przekształcenie liniowe Y, tak jak poprzednio.
  109. \
  110. \
  111. ```{r}
  112. A2 <- chol(sigma2)
  113. B2 <- mi
  114. Y2 <- t(A2)%*%t(m) + B2
  115. ```
  116. \
  117. \
  118. Ponieważ macierz *A1* wygenerowaliśmy przy pomocy rozkładu choleskiego, musimy ją transponować podczas obliczania przekształcenia liniowego Y, aby odwrócić efekt transpozycji, który powstał w trakcie wykonywania funkcji *chol*. Następnie musimy również transponować naszą macierz wektorów z rozkładu normalnego, ponieważ jest ona wymiaru *1000x2*, a chcemy mnożyć ją z macierzą rozmiaru *2x1000*.
  119. Wygenerujemy jeszcze naszą chmurę punktów z zadania 1 po odpowiednim przekształceniu za pomocą gotowej funkcji w R: *mvrnorm*.
  120. ```{r}
  121. b <- mvrnorm(1000, mi, sigma2)
  122. ```
  123. \
  124. \
  125. Następnie porównamy chmurę z zadania 1 przekształconą przez nas i przez wbudowaną funkcję w R.
  126. \
  127. \
  128. \
  129. \
  130. \
  131. ```{r}
  132. op1 <- par(mfrow = c(1,2))
  133. plot(t(Y2), ylim = c(-1,5), xlim = c(1, 8), col = "red", main = "Moje przekształcenie",
  134. xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
  135. plot(b, ylim = c(-1,5), xlim = c(1,8), col = "blue", main = "Przekształcenie mvrnorm",
  136. xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
  137. ```
  138. \
  139. \
  140. **WNIOSEK**: Na podstawie porównania wykresów naszych przkeształceń możemy wnioskować, że moje przekształcenie liniowe jest dobre i spełnia warunki zadania. Punkty wykresu są skupione (tam jest ich centrum) w punkcie *<4,2>*, tak jak należy się spodziewać po wektorze wartości własnych, oraz widać, że dane są malejące, co jest skutkiem tego, iż kowariancje w macierzy kowariancji (sigma2) są ujemne. W związku z tymi dwoma rzeczami możemy również potwierdzić fakt, że przekształcenia liniowe zachowują normalność rozkładu.
  141. \
  142. \
  143. ```{r, echo=FALSE}
  144. mi <- c(4,2)
  145. sigma3 <- matrix(c(9, 0, 0, 1), 2, 2)
  146. ```
  147. **c)**
  148. \
  149. \
  150. \[
  151. \Sigma=
  152. \left[ {\begin{array}{cc}
  153. 9 & 0 \\
  154. 0 & 1 \\
  155. \end{array} } \right], \mu = (4,2)
  156. \]
  157. Znowu zaczynamy od wyznaczenia macierzy A3. Posłuży nam do tego rozkład choleskiego, którym posługiwaliśmy się już wcześniej, pamiętamy że zwraca on macierz górnotrójkątną, a B jest wektorem wartości własnych.
  158. Możemy już przejść do wyznaczania naszego przekształcenia liniowego.
  159. \
  160. \
  161. ```{r}
  162. A3 <- chol(sigma3)
  163. B3 <- mi
  164. Y3 <- t(A3)%*%t(m) + B3
  165. ```
  166. \
  167. \
  168. Ponieważ macierz *A3* wygenerowaliśmy przy pomocy rozkładu choleskiego, musimy ją transponować podczas obliczania przekształcenia liniowego Y, aby odwrócić efekt transpozycji, który powstał w trakcie wykonywania funkcji *chol*. Następnie musimy również transponować naszą macierz wektorów z rozkładu normalnego, ponieważ jest ona wymiaru *1000x2*, a chcemy mnożyć ją z macierzą rozmiaru *2x1000*.
  169. Wygenerujemy jeszcze naszą chmurę punktów z zadania 1 po odpowiednim przekształceniu za pomocą gotowej funkcji w R: *mvrnorm*.
  170. ```{r}
  171. c <- mvrnorm(1000, mi, sigma3)
  172. ```
  173. \
  174. Następnie umieszczamy obie przekształcone chmury na płaszczyźnie.
  175. \
  176. \
  177. ```{r}
  178. op2 <- par(mfrow = c(1,2))
  179. plot(t(Y3), xlim = c(-5,15), ylim = c(-1,5), col = "red", main = "Moje przekształcenie",
  180. xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
  181. plot(c, xlim= c(-5, 15), ylim = c(-1,5), col = "blue", main = "Przekształcenie mvrnorm",
  182. xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
  183. ```
  184. \
  185. \
  186. **WNIOSEK**: Na podstawie porównania wykresów naszych przkeształceń możemy wnioskować, że moje przekształcenie liniowe jest dobre i spełnia warunki zadania. Punkty wykresu są skupione (tam jest ich centrum) w punkcie *<4,2>*, tak jak należy się spodziewać po wektorze wartości własnych, oraz widać, że dane ciągle są rozrzucone tak jak w zadaniu 1, co jest skutkiem tego, iż kowariancje w macierzy kowariancji (sigma3) są zerowe. W związku z tymi dwoma rzeczami możemy również potwierdzić fakt, że przekształcenia liniowe zachowują normalność rozkładu.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement