Hirdetés

2024. április 25., csütörtök

Gyorskeresés

Útvonal

Fórumok  »  Tudomány, oktatás  »  R segédlet

Hozzászólások

(#1) takitomi00


takitomi00
újonc

1. (20%)
Hozz létre egy mat nevű 80*30-as méretű numerikus mátrixot, amit tölts fel teljesen 20-50 közötti véletlen számokkal!
Készíts egy szoras nevű vektort, amibe tárold el a mat minden egyes sorának szórását!
mat2 nevű mátrixba fűzd össze mat és szorás tartalmát!

mat=matrix(sample(20:50, 80*50,replace=TRUE), nrow=80, ncol=50)
szoras=numeric()
for (i in 1:dim(mat)[1]) {
szoras=sd(mat[i,], na.rm=T)
}
szoras
mat2=cbind(mat, szoras)

2. (20%)
Készíts egy cserel nevű függvényt, ami bementként egy mátrixot és egy pozitív egész számot vár!
A mátrixba helyezz el annyi NA értéket véletlenszerűen, amennyi a bemenő egész szám volt (a véletlen generálás során az ismétlődés megengedett)!
Futtasd le a függvényt a mat mátrixra 25-ös értékkel

cserel=function(m, k){
for (1 in 1:k){
v1<-0
v2<-0
v1<-sample(1:80,1,replace=T)
v2<-sample(1:30,1,replace=T)
m[v1,v2]<-NA
}
}
cserel(mat,25)

3. (20%)
Jelenítsd meg egy diagramon az iris adathalmaz 3. oszlopának tartalmát: legyen főcím, tengelynevek és az x-tengely 15-sével legyen skálázva!
Illesz az adatokra egy lineáris modellt model néven, aminek a függő paramétere a 3. oszlop, független paraméterei pedig az 1. és 4. oszlopok!
Jelenítsd meg ploton a model által illesztett érétkeket piros színnel, 3-as vonalvastagságú folytonos vonallal!
Jelenítsd meg az ábrán az illesztett regressziós függvényt is, minden értékét 2 tizedesjegy pontosággal megjelenítve!
A hiba nevű numreikus vektorba tárold el, hogy abszolútértékben mekkora az eltérés az eredeti és az illesztett adatok között az egyes pontokban!

plot(iris[,3], main="3. feladat", xlab="x-tengely", ylab="y-tengely", xaxt="n")
y<-iris[,3]
axis (1, at=seq(0,length(iris[,3]),15), font=1, las=1)
model=lm(iris[,3]~iris[,1]+iris[,4])
lines(model$fitted, col="red", lwd=3)
text(50, max(y)+0, paste("y=",round(model$coef[1],2),"+",round(model$coef[2],2),"*x1+",round(model$coef[3],2),"*x2"))
hiba<-numeric()

for(i in 1:length(iris[,3])){
hiba(i)<-abs(iris[,3](i)-model$fitted(i))
}

4. (20%)
Jelenítsd meg egy diagramon az iris adathalmaz 2. oszlopának tartalmát folytonos vonallal: legyen főcím, tengelynevek és az x-tengely 25-sével legyen skálázva!
Simítsd az adatokat 5-öd rendő mozgóátlag alkalmazásával és a simított adatokat kék színű, folytonos, 2-es vastagságú vonallal jelenítsd meg!
A normalt nevű vektorba transzformáld át az eredeti adatokat a 2-6 értéktartományba az erre tanult módszerrel!

plot(iris[,2], type="l", main="4. feladat", xlab="x-tengely", ylab="y-tengely", xaxt="n")
axis (1, at=seq(0,length(iris[,2]),25), font=1, las=1)
simitott=filter(iris[,2], rep(1/5,5), sides=2)
lines(simitott, col="blue", lwd=2)

new_min<-2
new_max<-6
normalt<-round(((iris[,2]-min(iris[,2]))/(max(iris[,2])-min(iris[,2])))*(new_max-new_min)+new_min,2)

1.
mydata néven mentsd el az iris adathalmazt, majd töröld belőle az utolsó, nemnumerikus oszlopot. Az oszlop és a sor nevű változókba mentsd el a mydata megfelelő dimenzióit!
Készíts a pastecs csomag alkalmazásával leíró statisztikát a mydata-ról, amit a leirostat-ba mentesz el! (gyak03-1)
Majd egészítsd ki egy sorral a végére, ami az egyes oszlopok moduszát tartalmazza! (gyak03-1)
A plusz sor neve "modus" legyen!

mydata<-iris[,1:4]
sor<-dim(mydata)[1]
oszlop<-dim(mydata)[2]
library(pastecs)
leirostat<-stat.desc(mydata)
mod<-numeric()
for (k in 1:4)
mod[k]<-names(sort(table(mydata[,k]), decreasing=TRUE))[1]
mod

leirostat<-rbind(leirostat, mod)
row.names(leirostat)[15]<-c("modus")
leirostat

2.
Írjál egy valaszt nevű függvényt, mely 3 paramétert kap bementkünt: egy táblát (t) és két egyész számot (a,b).
A bemenentként kapott tábla két egész számmal definiált oszlopában szereplő érték közül mindig a nagyobb jelenjen meg az új oszlopban!!
Majd hívd meg (mydata, 1,4) paraméterekkel és az eredményt mentsd el mydata2-be!

valaszt<-function (t,a,b) {
egyik<-t[,a]
masik<-t[,b]
elem<-numeric()
for (i in 1:dim(t)[1])
elem<-max(egyik(i), masik(i), na.rm=TRUE)
tt<-cbind(t, elem)
return(tt)
}
mydata2<-valaszt(mydata,1,4)
mydata2

3. Jelenítsd meg boxploton a mydata2 oszlopainak tartalmát:a kiugró adatok ne látszódjanak, a főcím legyen: "Boxplot - iris"! (gyak03-1)
A boxplotok színe sorban legyen: zöld, kék, piros, sárga és fekete!
Az egyes adatsorokhoz tartozó alsó kvantiliseket számítsd ki a guant nevű vektorba és az ábrán azokat kösse össze egy barna szaggatott vonal a diagramon!

box2<-boxplot(mydata2, col=(c("green","blue", "red", "yellow", "black")), outline=FALSE, main="Boxplot - iris")
quant<-numeric()
for(i in 1:dim(mydata2)[2])
quant(i)<-quantile(mydata2[,i])[2]
lines(quant, col="brown", lwd=2, lt=3)

4.
Készíts mod néven egy kétváltozós lineáris regressziót a mydata-ra mod néven: független paraméter az 1. oszlop, függőek pedig a 2. és 3. oszlopok! (gyak05-1)
Majd a kapott modell alapján jósold meg y értékét az x1=5 és 6.7, illetve x2=4.5 és 6.2 értékekekre! (gyak05-2, gyak07-2)
Az eredeti pontokat, a regressziós görbét (az új, jósolt pontokra is) és annak egyenletét is jelenítsd meg egy ploton! (gyak05-2)
Az x tengely feliratai 25?t?s?vel kövessék egymást 90%kal elforgatva! A jósolt pontok legyenek zöld színűek és vastagabbak, mint a többi pont!

x1<-mydata2[,2]
x2<-mydata2[,3]
y<-mydata2[,1]
mod<-lm(y~x1+x2)
josol<-data.frame(x1=c(5, 6.7), x2=c(4.5, 6.2))
joslas<-predict(mod, newdata=josol)
joslas
plot(c(y, joslas), xaxt="n", ylab="y-értékek", xlab="")
axis(1,at=seq(0,length(y)+2, 25), font=1, las=2)
text(50, max(y)+0, paste("y=",round(mod$coef[1],2),"+",round(mod$coef[2],2),"*x1+",round(mod$coef[3],2),"*x2"))
lines(c(fitted(mod), joslas), col="red", lwd=2)
points(151,joslas[1], col="green", lwd=3)
points(152,joslas[2], col="green", lwd=3)

5.
A DMwR csomag algae nevű adathalmazának 4-10 oszlopait (mind) töltsd be a mydata3-ba! Számold össze és írasd ki az összes adathiányok számát mydata3-ban egy db változóba!
Az adathiányokat pótold a környező 6 elem súlyozott átlagával mydata4-be mentve az eredményt! (gyak05-2)
Határozd meg, hogy hány klaszterbe érdemes az adathalmaz rekordjait sorolni (2-10 közötti klaszterszámokat vizsgáld meg)! (gyak06-1)
A fenti eredmény ismeretében készítsd el a mydata4 klaszterezését a kmeans, kmedoid, hierarchikus (euklideszi távolságot használva) és sűrűség alapú klaszterezéssel (minPts=3, epszilon=0.5) katlag, kmed, hier és sur változokba mentve ezeket! (gyak06
A 4 klaszterezés eredményét (melyik rekord melyik klaszterbe tartozik) fűzd az eredeti tábla mögé 4 oszlopba!
A hierarchikus és a kmeans klaszterezés eredményét jelenítsd meg egy közös ploton, grafikusan is jelölve a kialakult klasztereket (kmaeans esetében rád van bízva a megjelenítés módja)!
(gyak06)

library(DMwR)
mydata3<-algae[,4:10]
db<-0
for (i in 1:dim(mydata3)[1])
for (j in 1:dim(mydata3)[2])
if (is.na(mydata3[i,j]))
db<-db+1
db

mydata4<-knnImputation(mydata3, k = 6, meth = "weighAvg")

minta<-scale(mydata4)
wss <- (nrow(minta)-1)*sum(apply(minta,2,var))
for (i in 2:10) wss(i) <- sum(kmeans(minta, centers=i)$withinss)
plot(1:10, wss, type="b", xlab="Number of Clusters",
ylab="Within groups sum of squares")

kn<-6
katlag<-kmeans(minta,kn)
library(cluster)
kmed<-pam(minta, kn)
d <- dist(minta, method = "euclidean")
hier<-hclust(d, method="ward")
library(fpc)
sur<-dbscan(minta, 0.5, 3)

minta2<-cbind(minta, katlag$cluster,kmed$cluster, cutree(hier, k=kn), sur$cluster)

par(mfrow=c(1,2))
plot(hier)
rect.hclust(hier, k=kn, border="red")

library(fpc)
plotcluster(minta, katlag$cluster)

[ Szerkesztve ]

(#2) haromegesz14 válasza takitomi00 (#1) üzenetére


haromegesz14
aktív tag

Szerintem máskor ha ZH-ra kell a puska, logoszférában tedd közzé a saját topikodban :U ;]

[ Szerkesztve ]

10 féle ember létezik, aki ismeri a bináris számrendszert, és aki nem!

Útvonal

Fórumok  »  Tudomány, oktatás  »  R segédlet
Copyright © 2000-2024 PROHARDVER Informatikai Kft.