2. Pogrupować dane z pliku dane_perla2.csv według pól x i y na 4 klasy
metodą k-średnich. Następnie przeanalizować częstości występowania
elementów z różnych klas (pole klasa) w wybranych skupiskach.
Policzyć jaka cześć elementów "odstaje" od najczęstszych wyborów
w swoich skupiskach.
Uwaga: przed wykonaniem zadania proponuję ustawić generator liczb
pseudolosowych poleceniem set.seed(201
Zadanie2
skupiska=read.csv2("skupiska.csv")
skupiska
podzial=kmeans(skupiska[,1:2],4)
podzial
plot(skupiska[,1:2],pch=podzial$cluster,col=podzial$cluster)
kolor=c("blue","red","grey","yellow")
plot(skupiska$x, skupiska$y, col = "white", xlab = "x", ylab = "y")
text(skupiska$x, skupiska$y, skupiska$klasa, col = kolor[podzial$cluster])
#
(tabl = table(podzial = podzial$cluster, klasa=skupiska$klasa))
print("Błąd na zbiorze uczącym:", quote = F)
1-sum(diag(tabl))/sum(tabl)
points(podzial$centers, cex=2, pch=19)
Przeanalizować wyniki wyborów prezydenckich w 2010 roku (dane pzt2010.csv)
- zbadać popracie dla kandydatów pod kątem geograficznym. Narysować odpowiednią
mapę percepcji. Czy można (i jest sens) wykonywać dla takich danych
test niezalezności?
Uwaga. Aby uczynić mape percepcji czytelniejszą można ograniczyć się do,
na przykład, czterech kandydatów z największym poparciem. Inne zmiany
zwiększające czytelność dodatkowo punktowane.
dene=read.csv2("wybory.csv")
attach(dene)
dene
dane2=dene[,8:17] #zły nawias był
names(dane2)=c(1:10)
dane2
library(ca)
plot(ca(dane2),mass=T)
suma_kol=colSums(dane2)
suma_kol
#wybieram 2,3,,4,7
czterech
czterech
czterech=data.frame(K1=dane2[,2],K2=dane2[,3],K3=dane2[,4],K4=dane2[,7])
plot(ca(czterech),mass=T)
chisq.test(czterech)
Narysować histogram (o 20 klasach) oraz estymator gęstości dla zmiennej
x w 1-szej klasie (zmienna klasa) danych dane_usmiech2.csv. Przetestować
hipotezę, że dane te pochodzą z rozkładu normalnego.
dane=read.csv2("dane_usmiech2.csv")
attach(dane)
dane2=data.frame(x=dane$x[klasa==1])
dane2
plot(dane2)
attach(dane2)
k = 20
mi = mean(dane2)
sigma = sd(dane2)
ile = length(dane2)
w=1:k
podzial = qnorm(w/k, mi, sigma)
podzial
podzial[1] = min(dane2)-0.1
podzial[length(podzial)] = max(dane2)+0.1
szereg = table(cut(dane2[,], podzial))
szereg
(t=chisq.test(szereg))
t
1-pchisq(t$statistic, k-3)
(hist(dane2[,], podzial, col = "yellow"))
plot(density(dane2[,]))
detach(dane2)
detach(dane)
Dla danych z pliku wzrost.csv sporządzić wykres zawierający:
* histogram (około 15 klas)
* jądrowy estymator gęstości
* gęstość rozkładu normalnego o parametrach estymowanych na podstawie danych
dane=read.csv2("wzrost.csv")
dane
attach(dane)
length(wzrost)
k=15
dl=(max(wzrost)-min(wzrost))/(k-1)
dl
podzial=dl*(0:k)-dl/2+min(wzrost)
podzial
table(cut(wzrost,podzial))
podzial2=podzial[c(1,3:13,16)]
podzial2
szereg=table(cut(wzrost,podzial2))
hist(wzrost,podzial2)
plot(density(wzrost))
sr=mean(wzrost)
od=sd(wzrost)
gest=function(x) dnorm(x,sr,od)
x=seq(min(wzrost),max(wzrost),0.5)
hist(wzrost,podzial2)
lines(x,gest(x),col="red",lwd=3)
lines(density(wzrost),col="blue",lwd=3)
Dane z pliku wzrost.csv rozłożyć w szereg rozdzielczy:
* (*) o 6 klasach, różnej długości, za to, w przybliżeniu, jednakowej liczności. W oparciu o ten szereg narysować histogram.
#podzial na 6 klas
dane=read.csv2("wzrost.csv")
dane
attach(dane)
k=6
w=0:k
sr=mean(wzrost)
od=sd(wzrost)
podzial=qnorm(w/k,sr,od)
podzial
podzial[1]=min(wzrost)-5
podzial[7]=max(wzrost)+5
podzial
szereg=table(cut(wzrost,podzial))
szereg
hist(wzrost,podzial)
# Przetestować normalność dla danych z pliku wzrost.csv za pomocą testu chi-kwadrat, w oparciu o szereg rozdzielczy o 15 klasach o jednakowej liczności teoretycznej (przykład z wykładu). Następnie wykonać ten sam test, ale przed utworzeniem szeregu rozdzielczego dokonać randomizacji danych, zaburzając je o wartość z rozkładu jednostajnego na przedziale [-½, ½].
dane=read.csv2("wzrost.csv")
dane
attach(dane)
k=15
w=0:k
sr=mean(wzrost)
od=sd(wzrost)
podzial=qnorm(w/k,sr,od)
podzial
podzial[1]=min(wzrost)-5
podzial[16]=max(wzrost)+5
podzial
szereg=table(cut(wzrost,podzial))
szereg
hist(wzrost,podzial)
teor=length(wzrost)/k
stat.test=sum(((szereg-teor)^2)/teor)
stat.test
qchisq(0.95,k-3)
#czyli odrzucamy
#zaburzamy
x=seq(-0.5,0.5,0.01)
zab=sample(x,length(wzrost),replace=T)
dane2=data.frame(wzrost=wzrost+zab)
attach(dane2)
k=15
w=0:k
sr=mean(wzrost)
od=sd(wzrost)
podzial=qnorm(w/k,sr,od)
podzial
podzial[1]=min(wzrost)-5
podzial[16]=max(wzrost)+5
podzial
szereg=table(cut(wzrost,podzial))
szereg
hist(wzrost,podzial)
teor=length(wzrost)/k
stat.test=sum(((szereg-teor)^2)/teor)
stat.test
qchisq(0.95,k-3)
#zatem przyjmujemy, gdyż stat.test<qchisq o danych parametrach.
Podzielić dane z pliku zakupy.csv na trzy mniej więcej jednakowo liczne grupy ze względu na wiek klienta (powiedzmy Y, M, O). Następnie zbadać, czy różnica średnich wydatków w tych grupach jest istotna statystycznie.
dane=read.csv2("zakupy.csv")
# wykonam test chi^2 niezaleznosci
attach(dane)
chisq.test(table(WYDATEK,(cut(WIEK,3)))) #jest ok, ale klasy mało liczne
podzial=seq(min(WYDATEK),max(WYDATEK), length=5)
table(cut(WYDATEK,podzial))
wiek=cut(WIEK,3)
levels(wiek)=c("Y", "M", "O")
table(wiek,cut(WYDATEK,podzial))
chisq.test(table(wiek,cut(WYDATEK,podzial))) #jeszcze można by pokombinować z gabarytami klas, ale już jest znośnie.
Zadanie jest zrobione przez Karola i mnie ze mnie:
3. Dla zależności y od x (dane regresja2.csv) dopasować krzywą regresji
zadaną równaniem y = a * sin(b*x) + c oraz wybraną nieparametryczną metodą
regresji. Narysować (i porównac) wykresy. Dla metody parametrycznej wyznaczyć
wartośc współczynnika R^2.
dane =read.csv2("regresja2.csv")
dane
attach(dane)
#regresja paramteryczna
reg = nls(y ~ a*(sin(b*x))+c , start=list(a=1,b=1,c=0))
summary(reg)
#regresja nie parametryczna
reg2=loess(y~x)
summary(reg2)
#wykresy
plot(x,y)
ndane = data.frame(x = seq(min(x), max(x), length = 300))
#parametryczny
lines(ndane$x, predict(reg, ndane), lwd = 2, col = "blue")
#nie parametryczny
lines(ndane$x, predict(reg2, ndane), lwd = 2, col = "red")
#obliczamy R_kwadrat dla regresji parametrycznej
a = 2.008283
b=1.001095
c = 0.014549
x=dane$x
y = a*(sin(b*x))+c
y_t=y
y=dane$y
roznica1= (y-mean(y))^2
roznica2 = (y_t-mean(y))^2
R_kwadrat = sum(roznica2)/sum(roznica1)
R_kwadrat
Narysować histogram oraz estymator gęstości dla
zmiennej x w 1-szej klasie danych dane_usmiech2.csv.
Przetestować hipotezę, że dane te pochodzą z rozkładu normalnego.
dane=read.csv2("dane_usmiech2.csv")
attach(dane)
dane2=data.frame(x=dane$x[klasa==1])
dane2
k = 40
mi = mean(x)
sigma = sd(x)
ile = length(x)
w = 0:k
podzial = qnorm(w/k, mi, sigma)
podzial
podzial[1] = min(x)-0.1
podzial[length(podzial)] = max(x)+0.1
szereg = table(cut(x, podzial))
szereg
t=chisq.test(szereg)
t
1-pchisq(t$statistic, k-3)
(hist(x, podzial, col = "violet"))
#ZADANIE 2
> wyk=read.csv2("czas_wykonania2.csv")
> attach(wyk)
> kw=kwalifikacje
> cz=czas
> plec=M
> datach(wyk)
Error: could not find function "datach"
> detach(wyk)
> ?anova
> anova(lm(cz~kw)
+ )
Analysis of Variance Table
Response: cz
Df Sum Sq Mean Sq F value Pr(>F)
kw 1 29.400 29.400 90.451 3.646e-15 ***
Residuals 88 28.603 0.325
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> anova(lm(cz[46:60]~kw[46:60]))
Analysis of Variance Table
Response: cz[46:60]
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 14 0.73733 0.052667
> anova(lm(cz[46:60]~kw[46:90]))
Error in model.frame.default(formula = cz[46:60] ~ kw[46:90], drop.unused.levels = TRUE) :
variable lengths differ (found for 'kw[46:90]')
> anova(lm(cz[46:90]~kw[46:90]))
Analysis of Variance Table
Response: cz[46:90]
Df Sum Sq Mean Sq F value Pr(>F)
kw[46:90] 1 12.6750 12.6750 135.22 7.309e-15 ***
Residuals 43 4.0308 0.0937
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> #użyłem testu anova żeby
> #poniewaz pozwala ona na przetestowanie wiecej niż jednego kryterium
> par(mfrow=c(2,1))#wykresy w jednym oknie
> #wykresy pudełkowe powinny pomóc
> boxplot(cz[46:90]~kw[46:90],col=heat.colors(3))
> #z wykresu mozna powiedzieć że wraz ze wzrostem klasy czas wykonania maleje
1. Narysować histogram o 20 klasach dla zmiennej x dla danych z pliku
dane_perla2.csv (z wyłączeniem klasy 3-ciej). Przetestować hipotezę, że
pochodzą one z rozkładu jednostajnego na przedziale [-1,38; 1,385].
dane=read.csv2("dane_perla2.csv")
attach(dane)
dane_1_2=x[klasa!="3"]
dane_1_2
detach(dane)
plot(dane_1_2)
hist(dane_1_2)
k = 20
mi = mean(dane_1_2)
sigma = sd(dane_1_2)
ile = length(dane_1_2)
w=0:k
podzial = qunif(w/k, mi, sigma)
podzial
szereg = table(cut(dane_1_2, podzial))
szereg
(t=chisq.test(szereg))
2. Pogrupować dane z pliku dane_perla2.csv według pól x i y na 4 klasy
metodą k-średnich. Następnie przeanalizować częstości występowania
elementów z różnych klas (pole klasa) w wybranych skupiskach.
Policzyć jaka cześć elementów "odstaje" od najczęstszych wyborów
w swoich skupiskach.
Uwaga: przed wykonaniem zadania proponuję ustawić generator liczb
pseudolosowych poleceniem set.seed(2011).
dane = read.csv2("dane_usmiech2.csv")
dane
attach(dane)
x= x[klasa ==1]
x
detach(dane)
#wykonajmy histogram dla danych x
hist (x,20)
#widzimy ze program dobrał zły podział i mamy więcej niz 20 klas
#dokonajmy własnego podzialu
k = 20
mi = mean(x)
sigma = sd(x)
w =0:k
podzial = qnorm(w/k, mi , sigma)
podzial
podzial[1]=min(x)-0.05
podzial[length(podzial)]=max(x)+0.05
podzial
#histogram wedlug naszego podzialu
hist(x,podzial)
#dokonajmy testu na normalność rozkładu naszej zmiennej
szereg=table(cut(x,podzial))
szereg
(t=chisq.test(szereg))
t
1-pchisq(t$statistic,k-3)
#z testu wynika ze p-value jest bliskie 1 dlatego przyjmujemy hipoteze
3. Dla zmiennych x i y z uzwględnieniem podziału na klasy policzyć:
- średnią
- medianę
- wariancję
- skośność
Traktując dane z pliku dane_perla2.csv jako próbkę statystyczną pochodządzą
z próby prostej o pewnym rozkładzie.
perla=read.csv2("dane_perla2.csv")
perla
attach(perla)
x_1=x[klasa=="1"]
x_2=x[klasa=="2"]
x_3=x[klasa=="3"]
y_1=y[klasa=="1"]
y_2=y[klasa=="2"]
y_3=y[klasa=="3"]
#Podzial x i y na klasy, lacznie 6 grup
#Srednia
(mean(x_1))
(mean(x_2))
(mean(x_3))
(mean(y_1))
(mean(y_2))
(mean(y_3))
#mediana
(median(x_1))
(median(x_2))
(median(x_3))
(median(y_1))
(median(y_2))
(median(y_3))
#wariancja
(var(x_1))
(var(x_2))
(var(x_3))
(var(y_1))
(var(y_2))
(var(y_3))
#skosnosc, nalezy wczytac pakiet: e1071
e1071::skewness(x_1)
e1071::skewness(x_2)
e1071::skewness(x_3)
e1071::skewness(y_1)
e1071::skewness(y_2)
e1071::skewness(y_3)
detach(perla)
zadania 2 zadanie 3
dane =read.csv2("regresja2.csv")
dane
attach(dane)
#regresja paramteryczna
reg = nls(y ~ a*(sin(b*x))+c , start=list(a=1,b=1,c=0))
summary(reg)
#regresja nie parametryczna
reg2=loess(y~x)
summary(reg2)
#wykresy
plot(x,y)
ndane = data.frame(x = seq(min(x), max(x), length = 300))
#wykres parametrycznej regresji liniowej
lines(ndane$x, predict(reg, ndane), lwd = 2, col = "green")
#wykres nie parametrycznej regresji liniowej
lines(ndane$x, predict(reg2, ndane), lwd = 2, col = "pink")
#spisujemy wartości parametrów z wyników regresji parametrycznej aby obliczyc
#współczynnik determinacji
a=2.008283
b=1.001095
c=0.014549
x=dane$x
y=dane$y
y_t=a*(sin(b*x))+c
roznica1= (y-mean(y))^2
roznica2 = (y_t-mean(y))^2
R_kwadrat = sum(roznica2)/sum(roznica1)
R_kwadrat
#współczynnik determinacji bliski 1 stąd wynika że nasza regresjaparametryczna
#to dobry model
dane=read.csv2("dane_perla2.csv")
dane
attach(dane)
#tworzę nowe dane które będą mi potrzebne do rozwiązania zadania,
#mianowicie obcinam je do zmiennej x nie biorąc również pod uwagę
#klasy trzeciej:
dane2=x[klasa!="3"]
dane2
detach(dane)
#rysujemy wykres i histogran
plot(dane2)
hist(dane2)
k = 20
a=-1.38
b=1.385
w=0:k
podzial = qunif(w/k, a, b)
podzial
#tworzę szereg rozdzielczy
szereg = table(cut(dane11, podzial))
szereg
#wykonuję test chi^2
(t=chisq.test(szereg))
dane=read.csv2("dane_perla2.csv")
dane
attach(dane)
#tworzę nowe dane które będą mi potrzebne do rozwiązania zadania,
#mianowicie obcinam je do zmiennej x nie biorąc również pod uwagę
#klasy trzeciej:
dane2=x[klasa!="3"]
dane2
detach(dane)
#rysujemy wykres i histogran
plot(dane2)
hist(dane2)
k=20
a=-1.38
b=1.385
w=0:k
dl=(max(x)-min(x))/(k-1)
dl
podzial=dl*(0:k)-(dl/2)+min(x)
podzial
szereg=table(cut(x,podzial))
szereg
t=chisq.test(szereg)
t
1-pchisq(t$statistic,k-3)
Narysować histogram o 15 klasach dla zmiennej x dla danych z pliku
dane_perla2.csv (z wyłączeniem klasy 3-ciej). Przetestować hipotezę, że
pochodzą one z rozkładu jednostajnego na przedziale [-1,38; 1,385].
2. Pogrupować dane z pliku dane_perla2.csv według pól x i y na 4 klasy
metodą k-średnich. Następnie przeanalizować częstości występowania
elementów z różnych klas (pole klasa) w wybranych skupiskach.
Policzyć jaka cześć elementów "odstaje" od najczęstszych wyborów
w swoich skupiskach.
Uwaga: przed wykonaniem zadania proponuję ustawić generator liczb
pseudolosowych poleceniem set.seed(2011).
dane=read.csv2("dane_perla2.csv")
attach(dane)
set.seed(2011)
library(cluster)
dane[,1:2]=scale(dane[,1:2])
p2<-clara(dane[,1:2],4,metric="euclidean")
points(p2$medoids,pch=2,col="black")
tbl=table(podzial=p2$clustering,prawdziwe=dane[,3])
tbl
#skupisko nr 1 sklada sie jedynie z elementow z klasy 1 i 3
#skupisko nr 2 sklada sie z elementow z klasy 1 i mniejszej ilosci z klasy 3
#skupisko 3 i 4 sklada sie z elementow z klas 2 i 3 (przewaga z klay 2)
#Policzyć jaka cześć elementów "odstaje" od najczęstszych wyborów
w swoich skupiskach:
(tbl[1,3]+tbl[2,3]+tbl[3,3]+tbl[4,3])/sum(tbl)
3. Dla danych z pliku czas_wykonania2.csv przetestować hipotezę, że wśród osób
na 3-cim poziomie kwalifikacji kobiety wykonują badaną czynność tak samo szybko
jak mężczyźni, przeciwko temu, że robią to wolniej na poziomie istotności 0,95.
1. Przeanalizować wyniki wyborów prezydenckich w 2010 roku (dane pzt2010.csv)
- zbadać popracie dla kandydatów pod kątem geograficznym. Narysować odpowiednią
mapę percepcji. Czy można (i jest sens) wykonywać dla takich danych
test niezalezności?
Uwaga. Aby uczynić mape percepcji czytelniejszą można ograniczyć się do,
na przykład, czterech kandydatów z największym poparciem. Inne zmiany
zwiększające czytelność dodatkowo punktowane.
2. Narysować histogram (o 20 klasach) oraz estymator gęstości dla zmiennej
x w 1-szej klasie (zmienna klasa) danych dane_usmiech2.csv. Przetestować
hipotezę, że dane te pochodzą z rozkładu normalnego.
3. Dla zależności y od x (dane regresja2.csv) dopasować krzywą regresji
zadaną równaniem y = a * sin(b*x) + c oraz wybraną nieparametryczną metodą
regresji. Narysować (i porównac) wykresy. Dla metody parametrycznej wyznaczyć
wartośc współczynnika R^2.