ROZGRZEWKA #regresja k- najbliższych sąsiadów - e
Transkrypt
ROZGRZEWKA #regresja k- najbliższych sąsiadów - e
Laboratorium nr 7 z wielowymiarowej analizy danych – Daniel Kosiorowski
ROZGRZEWKA #regresja k- najbliższych sąsiadów – autorka skryptu
mgr Anna Węgrzynkiewicz#
W przypadku gdy dysponujemy próbą postaci { yi , xi }in=1 ⊂ » d +1 , regresję
nieparametryczną k-najbliższych sąsiadów definiujemy za pomocą formuły
fˆ (x) = ave( yi | xi ∈ N k (x)),
gdzie ‘ave’ oznacza średnią,\item N k jest sąsiedztwem zawierającym kpunktów najbliższych do x (zazwyczaj w sensie odległości euklidesowej).
Przy założeniu pewnego rodzaju regularności, co do łącznego rozkładu
prawdopodobieństwa P (Y , X) można pokazać, że gdy n, k → ∞ w taki sposób, że
k / n → 0 , to fˆ (x) → E (Y | X = x) .
regresja_knn <- function(x, X, k) {
# x - wektor - punkt, dla którego liczymy regresję
# X - próba (pierwsza kolumna to zmienna objaśniana!)
# k - ilość najbliższych sąsiadów
# zamiana wektora x na macierz, żeby działała funkcja 'norm'
x <- t(as.matrix(x))
# obliczenie odległości każdego punktu do punktu x
dist <- c()
for (i in 1:nrow(X)) {
dist[i] <- norm(x - X[i,-1])
}
# uszeregowanie dostępnych iksów od najbliższych, do najdalszych
X_dist <- X[order(dist),]
# obliczenie średniej z k najbliższych igreków
y <- mean(X_dist[(1:k), 1])
return(y)
}
X<- c(1:300)
X_1 <- c(1:100)
X_2 <- c(101:200)
X_3 <- c(201:300)
Y_1 <- -1.2*cos(0.19*X_1)+0.2*X_1# podstawowy proces
Y_2 <- cos(0.08*X_2)+15
Y_3 <- 20-0.05*X_3
Y1 <- c(Y_1, Y_2, Y_3)
epsilon1 <- rnorm(100, 0, 1)
epsilon2 <- rnorm(100, 0, 2)
epsilon3 <- rnorm(100, 0, 3)
epsilon <- c(epsilon1, epsilon2, epsilon3)
Y<-Y1+epsilon
1
Laboratorium nr 7 z wielowymiarowej analizy danych – Daniel Kosiorowski
dane<-cbind(Y,X)
plot(X,Y)
#regresja w każdym punkcie
for (i in 1:nrow(dane)) {
y[i] <- regresja_knn(dane[i,-1], dane, 20)
}
points(X,y,col="red",type="l",lwd=2)
#reszty regresji
e <- Y1-y
Zadanie: porównać dopasowanie metody NK z dopasowaniem regresji k- najbliższych
sąsiadów dla powyżej zdefiniowanego zbioru dane. Zmienić liczbę sąsiadów na k=5,
porównać wyniki. Czy potrafisz uogólnić powyższy kod na większą liczbę zmiennych
niezależnych?
PRZYKŁAD 28 #Składowe główne#
Z systemu MOODLE ściągamy zbiór danych HOSPITAL
Interesują nas zmienne 5:12
Przed przeprowadzeniem analizy głównych składowych – centrujemy zmienne!!!
DATA=scale(HOSPITAL[,5:12], center = TRUE, scale = FALSE)
fit <- princomp(DATA, cor=TRUE)
#fit <- princomp(DATA, cor=FALSE) sprawdzić ten wariant
summary(fit) # podsumowanie wyników
loadings(fit) # ładunki
plot(fit,type="lines") # wykres osypiska
fit$scores # współrzędne obiektów w układzie współrzędnych policzonych
składowych
biplot(fit)
# Rotacja składowych typu Varimax
2
Laboratorium nr 7 z wielowymiarowej analizy danych – Daniel Kosiorowski
library(psych)
fit <- principal(DATA, nfactors=2, rotate="varimax")
fit
biplot(fit)
?principal
Zadanie: Przeprowadź analizę głównych składowych dla zbioru DGP_1
PRZYKŁAD 29 #Analiza czynnikowa#
# Analiza czynnikowa NW
# Dane z Moodle – HOSPITAL – ich zmienność staramy się wyjaśnić za pmocą
trzech ukrytych czynników
# dla ułatwienia interpretacji stosujemy rotację „Varimax”
fit <- factanal(DATA, 3, rotation="varimax")
print(fit, digits=2, cutoff=.3, sort=TRUE)
# układ współrzędnych czynnik 1 vs. czynnik 2
load <- fit$loadings[,1:2]
plot(load,type="n") # set up plot
names=c('Beds','Admissions','Census','Visits','Births','Tot..Exp.','Payroll.Exp.','Personnel')
text(load,labels=names,cex=1.7) # do rysunku dodajemy nazwy zmiennych
Zadanie: w systemie Moodle znajdziesz zbiór danych COMPANIES – dotyczący
rozpatrywanych
pod
względem
wybranych
wskaźników
przedsiębiorstw
ekonomicznych – przeprowadź analizę czynnikową, liczba czynników wynosi dwa.
#ALTERNATYWNY PAKIET R
library(FactoMineR)
wyniki <- PCA(DATA) # graphs generated automatically
summary(wyniki)
barplot(wyniki$eig[,1],main="Eigenvalues",names.arg=1:nrow(result$eig))
Zadanie dla ambitnych studentów: Analizę głównych składowych można w R
przeprowadzić na wiele sposobów. W pakiecie {rrcov} znajdziemy przykłady tzw.
odpornej analizy głównych składowych. Porównaj jej wyniki z wynikami klasycznej
analizy głównych składowych. Porównaj procedury PcaCov i PcaClassic.
pca <- PcaCov(DATA)
summary(pca)
screeplot(pca)
biplot(pca)
plot(pca,k=2)
3