Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---
- title: "MODELE LINIOWE 1"
- author: "Maciej Tadej"
- output: pdf_document
- ---
- ```{r setup, include=FALSE}
- knitr::opts_chunk$set(echo = TRUE)
- library(MASS)
- ```
- **ZADANIE 1**
- \
- \
- 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.
- \
- \
- 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.
- 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.
- \
- \
- ```{r}
- set.seed(2000)
- m <- matrix(rnorm(1000*2,0,1),1000,2)
- ```
- \
- Teraz zgodnie z tym o co jesteśmy proszeni w poleceniu zadania umieszczamy naszą próbę na płaszczyźnie:
- \
- ```{r}
- plot(m, xlab = "wartość pierwszej współrzędnej", ylab = "wartość drugiej współrzędnej", col = "red")
- ```
- \
- \
- 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ść.
- \
- \
- **ZADANIE 2**
- \
- \
- 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:
- \
- \
- Aby znaleźć to przekształcenie będziemy korzystali z faktu podanego na liście 1:
- \
- \[
- Y = AX + B\ \ oraz \ \ zachodzi \ \ \mu^{Y} = A\mu^{X} + B \ \ i \ \ \Sigma^{Y} = A\Sigma^{X}A^{T}
- \]
- ```{r, echo=FALSE}
- mi <- c(4,2)
- sigma1 <- matrix(c(1, 0.9, 0.9, 1), 2, 2)
- ```
- **a)**
- \[
- \Sigma=
- \left[ {\begin{array}{cc}
- 1 & 0.9 \\
- 0.9 & 1 \\
- \end{array} } \right], \mu = (4,2)
- \]
- \
- 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.
- Uzbrojeni w tę wiedzę możemy zacząć poszukiwanie przekształcenia liniowego Y, o które jesteśmy proszeni w treści zadania.
- \
- \
- ```{r}
- A1 <- chol(sigma1)
- B1 <- mi
- Y1 <- t(A1)%*%t(m) + B1
- ```
- \
- \
- 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*.
- Wygenerujemy jeszcze naszą chmurę punktów z zadania 1 po odpowiednim przekształceniu za pomocą gotowej funkcji w R: *mvrnorm*.
- \
- ```{r}
- a <- mvrnorm(1000, mi, sigma1)
- ```
- \
- Następnie umieszczamy obie przekształcone chmury na płaszczyźnie.
- \
- \
- ```{r}
- op <- par(mfrow = c(1,2))
- plot(t(Y1),xlim = c(1,8), ylim = c(-1,5), col = "red", main = "Moje przekształcenie",
- xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
- plot(a, xlim = c(1,8), ylim = c(-1,5), col = "blue", main = "Przekształcenie mvrnorm",
- xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
- ```
- \
- \
- **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.
- \
- \
- ```{r, echo=FALSE}
- mi <- c(4,2)
- sigma2 <- matrix(c(1,-0.9,-0.9, 1), 2, 2)
- ```
- **b)**
- \[
- \Sigma=
- \left[ {\begin{array}{cc}
- 1 & -0.9 \\
- -0.9 & 1 \\
- \end{array} } \right], \mu = (4,2)
- \]
- \
- 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.
- Teraz możemy zacząć wyznaczać nasze przekształcenie liniowe Y, tak jak poprzednio.
- \
- \
- ```{r}
- A2 <- chol(sigma2)
- B2 <- mi
- Y2 <- t(A2)%*%t(m) + B2
- ```
- \
- \
- 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*.
- Wygenerujemy jeszcze naszą chmurę punktów z zadania 1 po odpowiednim przekształceniu za pomocą gotowej funkcji w R: *mvrnorm*.
- ```{r}
- b <- mvrnorm(1000, mi, sigma2)
- ```
- \
- \
- Następnie porównamy chmurę z zadania 1 przekształconą przez nas i przez wbudowaną funkcję w R.
- \
- \
- \
- \
- \
- ```{r}
- op1 <- par(mfrow = c(1,2))
- plot(t(Y2), ylim = c(-1,5), xlim = c(1, 8), col = "red", main = "Moje przekształcenie",
- xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
- plot(b, ylim = c(-1,5), xlim = c(1,8), col = "blue", main = "Przekształcenie mvrnorm",
- xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
- ```
- \
- \
- **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.
- \
- \
- ```{r, echo=FALSE}
- mi <- c(4,2)
- sigma3 <- matrix(c(9, 0, 0, 1), 2, 2)
- ```
- **c)**
- \
- \
- \[
- \Sigma=
- \left[ {\begin{array}{cc}
- 9 & 0 \\
- 0 & 1 \\
- \end{array} } \right], \mu = (4,2)
- \]
- 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.
- Możemy już przejść do wyznaczania naszego przekształcenia liniowego.
- \
- \
- ```{r}
- A3 <- chol(sigma3)
- B3 <- mi
- Y3 <- t(A3)%*%t(m) + B3
- ```
- \
- \
- 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*.
- Wygenerujemy jeszcze naszą chmurę punktów z zadania 1 po odpowiednim przekształceniu za pomocą gotowej funkcji w R: *mvrnorm*.
- ```{r}
- c <- mvrnorm(1000, mi, sigma3)
- ```
- \
- Następnie umieszczamy obie przekształcone chmury na płaszczyźnie.
- \
- \
- ```{r}
- op2 <- par(mfrow = c(1,2))
- plot(t(Y3), xlim = c(-5,15), ylim = c(-1,5), col = "red", main = "Moje przekształcenie",
- xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
- plot(c, xlim= c(-5, 15), ylim = c(-1,5), col = "blue", main = "Przekształcenie mvrnorm",
- xlab = "Wartość pierwszej współrzędnej", ylab = "Wartość drugiej współrzędnej")
- ```
- \
- \
- **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