Optimasi Support Vector Machine untuk Memprediksi Adanya ...
· Web viewR-codes C = vector aanmaken Bv. Leeftijd leeftijd [1] 18 22 17 19 19 Factor = getallen...
Transcript of · Web viewR-codes C = vector aanmaken Bv. Leeftijd leeftijd [1] 18 22 17 19 19 Factor = getallen...
R-codes
C
= vector aanmaken
Bv. Leeftijd <- c(18,22,17,19,19)> leeftijd[1] 18 22 17 19 19
Factor
= getallen in vector zijn niet numeriek, hierdoor weet R dat ze niet numeriek zijn.
Bv. > tramnummer <- factor(c(1,21,22,4,22,21,1,4))mean(tramnummer)[1] NAWarning message:In mean.default(tramnummer) : argument is not numeric or logical: returning NA
Levels
= Verschillende waarden in vector weergeven
Bv. > tramnummer[1] 1 21 22 4 22 21 1 4 Levels: 1 4 21 22
Ordered
= Volgorde van levels. = TRUE
Bv. > uitslag <- factor(c("brons", "goud", "goud", "brons", "zilver", "brons", "brons", "brons"), levels = c( "brons", "zilver", "goud" ), ordered = TRUE)> uitslag[1] brons goud goud brons zilver brons brons brons Levels: brons < zilver < goud
Data frame
= verschillende vectoren van dezelfde steekproef in een grotere structuur zetten zodat R dit weet
Bv. > mijnEersteDataFrame <- data.frame(sport, onderwijs)> mijnEersteDataFrame sport onderwijs1 voetbal ASO2 basketbal ASO3 voetbal TSO4 basketbal ASO5 zwemmen BSO6 voetbal TSO7 badminton TSO8 voetbal ASO
$
= Specifieke kolom raadplegen uit de dataframeOPM: levels: R weet dat data niet numeriek is en geeft de verschillende waarden weer.
Bv.> mijnEersteDataFrame$sport[1] voetbal basketbal voetbal basketbal zwemmen voetbal badminton voetbal Levels: badminton basketbal voetbal zwemmen
Dim
= Dimensies. De grootte van de data frame
Bv.> dim(mijnEersteDataFrame)[1] 8 2
Length
= Steekproefgrootte raadplegen (andere manier dan dim)
Bv.> length(mijnEersteDataFrame$sport)[1] 8> length(mijnEersteDataFrame$onderwijs)[1] 8
Names
= namen van vectoren
Bv.> names(mijnEersteDataFrame)[1] "sport" "onderwijs"
Read.delim
= Nieuwe data frame aanmaken via bestand op laptop
Bv.> data <- read.delim(file="MyData.txt")
NA
= not available, voor missing data.
Bv.> gewicht <- c(69,64,NA,76,78,75,74,51)> gewicht[1] 69 64 NA 76 78 75 74 51
Table
= Frequentieverdeling
Bv.> table(MyData$opleiding)ped psy soc 10 18 2
Table / dim
= Relatieve frequentieverdeling
Bv.> table(MyData$opleiding)/dim(MyData)[1]
ped psy soc 0.33333333 0.60000000 0.06666667
Prop.table
= Relatieve frequentie (andere mogelijkheid)
Bv.> prop.table(table(MyData$opleiding))
ped psy soc 0.33333333 0.60000000 0.06666667
Table met twee variabelen
= Bivairate frequentieverdeling
Bv. > table(MyData$geslacht, MyData$opleiding) ped psy soc M 7 7 0 V 3 11 2
Prop.table met twee variabelen
= Relatieve bivariate frequentieverdeling
Bv.> prop.table(table( MyData$geslacht, MyData$opleiding)) ped psy soc M 0.23333333 0.23333333 0.00000000 V 0.10000000 0.36666667 0.06666667
Pie
= cirkeldiagram. Nuttig voor nominale variabelen.
Bv.pie(table(MyData$score))
Barplot
= Lijndiagram. Nuttig voor discrete variabelen.
Bv.> barplot(table(MyData$motivatie))
Hist
= Histogram. Nuttig voor continue variabelen.
Bv.> hist(x=MyData$lengte)
Hist & Breaks
= aantal klassen bepalen in histogram.
Bv.hist(x=MyData$lengte, breaks = 5)
Plot
= Spreidingsdiagram/ Scatterplot. Wordt gebruikt voor bivariate frequentieverdelingen van continue variabelen.
Bv. > plot(x=MyData$lengte, y=MyData$motivatie)
Mean
= gemiddelde
Bv. > mean(MyData$score)[1] 11.4
> mean(c(12,14,13,9,8,45))[1] 16.83333
Median
= Mediaan
Bv.> median(MyData$score)[1] 11
> median(c(10,15,13,17))[1] 14
As.numeric
= niet numerieke niveaus omzetten in numerieke niveaus
Bv.> as.numeric(MyData$opleiding) [1] 2 2 2 2 2 1 2 2 2 1 1 2 3 3 1 1 2 1 2 2 1 1 1 2 2 2 2 2 1 2
> median(as.numeric(MyData$opleiding))[1] 2
Geen R-code voor variantie, maar:
= wel te berekenen met verschillende reeds gekende codes en de formule.
Bv.> x <- MyData$score Geven deze data de naam x voor gemakkelijkheid> xbar <- mean(x) xbar is de naam voor het gemiddelde> n <- dim(MyData)[1] Steekproef berekenen en krijgt de naam n> sum((x-xbar)^2)/n Formule variantie: som van x – het gemiddelde van x,
tot de tweede, delen door n[1] 27.50667 uitkomst
Max – Min
= Variatiebreedte
Bv.> max(MyData$iq) - min(MyData$iq)[1] 63
IQR
= Interkwartielafstand.
Bv.> IQR(MyData$lengte)[1] 15.5
Geen R-code voor spreidingsmaat d, maar:
= wel te berekenen met de reeds gekende codes en de formule.
Bv.> table(MyData$opleiding) Frequentietabel opvragen van de data (nodig voor
modus en p)ped psy soc 10 18 2 Modus = 18, p = 30> (1-(18/30))/(1-(1/3)) De formule van d invullen met de gegevens.[1] 0.6
Cor
= Correlatiecoëfficiënt berekenen van steekproef.= Kan ook gebruikt worden voor de schatting van de correlatiecoëfficiënt van de populatie!
Bv.> cor(mydata$gewicht, mydata$lengte)[1] 0.4741137
Cor (method = “kendall”)
= Kendall berekenen.
Bv.> cor(sportdata$lengte, sportdata$leeftijd, method="kendall")[1] 0.2526885
Lm (formula =)
= Enkelvoudig lineair model. = Nodig argument is de R formula waarmee we specificeren voor welke variabelen we de regressielijn aanvragen. Kortom: regressielijn berekenen. Belangrijk: links = Y, rechts = X. = OOK MEERVOUDIG LINEAIR MODEL!= Hierbij is formula aangepast: 2 delen gescheiden door ~ . Links = afhankelijke variabele, rechts = lijst van predictoren, gescheiden van elkaar door een + (let op: + is hier GEEN som). Als laatste nog: data = … zegt welke dataframe gebruikt moet worden.
Bv.> lm(formula = mydata$gewicht ~ mydata$lengte)
Call: Y Xlm(formula = mydata$gewicht ~ mydata$lengte)
Coefficients: (Intercept) mydata$lengte intercept = b0 -27.199 0.592 mydata$lengte = b1
> lm(formula= uitgaven ~ duur + leeftijd, data=gezondheid)
Call:lm(formula = uitgaven ~ duur + leeftijd, data = gezondheid)
Coefficients: Output bestaat uit lijst van (Intercept) duur leeftijd alle coëfficiënten van het best 59.2600 2.0234 0.9468 passende (hyper)vlak.
Pnorm
= Oppervlakte onder de curve (normal verdeeld), aan de linkerkant van x. Kans onder een bepaalde waarde.= 3 argumenten nodig: q (= x), mean (=gem) en sd (=standaarddeviatie).
Bv.> pnorm(q=8, mean=10,sd=2)[1] 0.1586553
> pnorm(q=130, mean=100, sd=15) - pnorm(q=120, mean=100, sd=15)[1] 0.06846109
Qnorm
= Omgekeerde van pnorm. Geeft de waarde q, met p kans. Berekent de waarde op de x-as van de normaalverdeling.
Bv.> qnorm(p=0.5, mean=10,sd=2)[1] 10
Pt
= werkt hetzelfde als pnorm maar dan voor een t-verdeling. Dus de kans onder een bepaalde waarde berekenen, p-waarde vinden.= 2 argumenten: q en df (degrees of freedom)
Bv.> pt(q=1.3, df=10)[1] 0.8886171
Qt
= werkt hetzelfde als qnorm, maar dan voor een t-verdeling. Dus berekent de waarde op de x-as van een t-verdeling.
Bv.> qt(p=0.15, df=10)[1] -1.093058
Lower.tail = FALSE
= om aan te duiden dat je de rechterkant wil berekenen ipv de linkerkant
Bv.> pt(q=1,df=120, lower.tail=FALSE)[1] 0.1596614
> qt(p=0.60, df=150, lower.tail=FALSE)[1] -0.2537969
Pf
= werkt hetzelfde als pnorm, maar dan voor een F-verdeling. De kans onder een bepaalde waarde berekenen.=3 argumenten: q, df1 en df2
Bv.
> pf(q=2,df1=10,df2=3)[1] 0.6906222
qf
= werkt hetzelfde als qnorm, maar dan voor een F-verdeling. Berekent de waarde op de x-as van een F-verdeling.
Bv.> qf(p=0.2,df1=50,df2=10)[1] 0.7052699
Var
= schatting maken van de variantie in de populatie(!)
Bv.> var(mydata$iq)[1] 246.5471
> var(sportdata$sport)[1] 1.13316
Cov
= schatting maken van de covariantie in de populatie(!)
Bv.> cov(mydata$gewicht, mydata$lengte)[1] 76.85057
> cov(sportdata$sport, sportdata$tijd)[1] 2.039384
t-test
= t-toets voor één steekrproef berekenen wanneer sigma onbekend is. = voorwaarden om een t-test te mogen doen: X moet tenminste van intervalniveau zijn en normaalverdeeld zijn of de steekproef moet groot zijn (>30)= 4 argumenten: x, mu, alternative en soms conf.level (= betrouwbaarheid verschillend van 95%)
Bv.> t.test(x=bmi, mu=25.3, alternative="two.sided") x = data, mu = nulhypothese,
alternative = alternatieve hypothese. Deze kan eenzijdig (“greater” of “less”) zijn, of tweezijdig (“two.sided”)
One Sample t-test
data: bmit = 0.5307, df = 29, p-value = 0.5997 t = waarde van toetsingsgrootheid T.
df = vrijheidsgraden (n-1). P-value = overschrijdingskans.
alternative hypothesis: true mean is not equal to 25.3 95 percent confidence interval: Betrouwbaarheidsinterval voor mu. 24.02585 27.46711sample estimates: Gaat over de schatting van mu.mean of x 25.74648
> t.test(x=bmi, mu=25.3, alternative="two.sided", conf.level=0.9)
One Sample t-test
data: bmit = 0.5307, df = 29, p-value = 0.5997alternative hypothesis: true mean is not equal to 25.390 percent confidence interval: 90 ipv 95 door ‘conf.level’ in formule 24.31702 27.17593sample estimates:mean of x 25.74648
t-test (2)
= Welch t-toets. Wordt gebruikt voor twee steekproeven.= argumenten: x, y, alternative
Bv.> t.test(x=tijdM, y=tijdV, alternative="two.sided")
Welch Two Sample t-test
data: tijdM and tijdVt = -0.89953, df = 197.89, p-value = 0.3695alternative hypothesis: true difference in means is not equal to 095 percent confidence interval: -1.8998569 0.7095718sample estimates:mean of x mean of y 22.60957 23.20472
Binom.test
= exacte binomiale toets berekenen. = argumenten: x, n, p, alternative
Bv.> binom.test(x=1, n=10, p=0.08, alternative = "greater")
Exact binomial test
data: 1 and 10number of successes = 1, number of trials = 10, p-value = 0.5656alternative hypothesis: true probability of success is greater than 0.0895 percent confidence interval: 0.005116197 1.000000000sample estimates:probability of success 0.1
Qqnorm
= opvragen van de normale qq-plot van x
Bv.qqnorm(qq.steekproef$x)
powerBinom
= power berekenen.= 5 argumenten: steekproefgrootte n, proportie onder de nulhypothese p0, proportie onder de alternatieve hypothese p1, de significantie sig.level = alpha, soort hypothese: alternative = “two.sided” of “one.sided”. = niet standaard in R install.packages(“exactci”) ingeven om dit te installeren.
Bv.> powerBinom(n=10,p0=0.08, p1=0.15, sig.level=0.05, alternative = "one.sided")
power and sample size for single binomial response
n = 10 p0 = 0.08 p1 = 0.15 power = 0.1798035 alternative = one.sided sig.level = 0.05
NOTE: use rejections in correct direction only
> powerBinom(power=0.90,p0=0.08,p1=0.15, alternative="one.sided") Kan ook sig.level en n weglaten. N vervangen door power om zo de minimale steekrpoefgrootte te bepalen.
power and sample size for single binomial response
n = 177 p0 = 0.08 p1 = 0.15 power = 0.9017898 alternative = one.sided sig.level = 0.05
NOTE: use rejections in correct direction only
Delta
= de absolute waarde van het verschil tussen de verwachting onder H0 en Ha. = wordt gebruikt als argument voor power.t.test
Bv.Zie voorbeeld in volgende r-code.
power.t.test
= Berekent de power onder de specifieke alternatieve hypothese.= zes argumenten: steekproefgrootte n, de schatting van de standdaarddeviatie sd, de significantie sig.level = alpha, het aantal steekproeven (type=”one.sample”), de soort hypothese (alternative=”two.sided”) en delta.
Bv.> power.t.test(n=30, delta=1, sd=4.61, alternative="two.sided", sig.level=0.05, type="one.sample")
One-sample t test power calculation
n = 30 delta = 1 sd = 4.61 sig.level = 0.05 power = 0.208701 alternative = two.sided
pwr.t2n.test
= power berekenen bij een t-toets met twee onafhankelijke steekproeven onder de assumptie dat de varianties identiek zijn in beide populaties. = belangrijk argument: d= niet standaard in R instal.packages(“pwr”) ingeven om dit te installeren.
> pwr.t2n.test( n1= length(con), n2=length(exp), d=1/2.1, sig.level=0.05, alternative="greater")
t test power calculation
n1 = 56 n2 = 119 d = 0.4761905 sig.level = 0.05 power = 0.9001047 alternative = greater
Head()
= eerste paar gegevens van een data frame weergeven
Bv. > head(gezondheid) geslacht duur uitgaven leeftijd1 M 30 142 392 M 25 95 273 M 54 188 504 V 29 116 415 M 21 103 396 M 28 185 39
Confint
= betrouwbaarheidsintervallen voor 𝛽0 en 𝛽1 berekenen.Bv.> confint(myLM, level=0.95) Confint gebruikt level en niet sig.level of conf.level! 2.5 % 97.5 %(Intercept) 84.88996 109.51784gezondheid$duur 1.55357 2.44788
fitted ()
= predicties ŷi opvragen.
Bv.> fitted(myLM) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 157.2257 147.2220 205.2431 155.2249 139.2191 153.2242 135.2177 147.2220 153.2242 131.2162 135.2177 129.2155 179.2336 151.2235 135.2177 159.2264 129.2155 157.2257 139.2191 153.2242 169.2300 137.2184 169.2300 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 153.2242 179.2336 165.2286 145.2213 171.2307 141.2199 145.2213 145.2213 177.2329 139.2191 149.2228 155.2249 169.2300 153.2242 161.2271 153.2242 167.2293 169.2300 175.2322 181.2344 129.2155 179.2336 141.2199
Residuals()
= lijst van alle residuen yi - ŷi
Bv.> residuals(myLM) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 -15.2256518 -52.2220266 -17.2430529 -39.2249268 -36.2191264 31.7757983 15.7823237 34.7779734 69.7757983 54.7837738 -2.2176763 11.7844988 8.7663727 -10.2234767 79.7823237 -13.2263769 -54.2155012Summary()
= toont in een keer alle berekeningen.
Bv.> summary(myLM)
Call:lm(formula = gezondheid$uitgaven ~ gezondheid$duur) Tonen welke regressie in lm() werd
gestopt
Residuals: Gemiddelde wordt niet gegeven want is altijd 0 bij residuen!
Min 1Q Median 3Q Max Sterke assymetrie tussen 1Q en 3Q -98.220 -27.461 -1.725 26.538 108.774 kan aanwijzen dat 𝜀i niet normaal is. In dit geval zijn ze wel redelijk symmetrisch.Coefficients:
Estimate Std. Error t value Pr(>|t|) estimate = schatting van corresp. parameter. Std.Error = standaardfout. voorlaatste = waarde van t-verdeelde statistiek om de corresp. Hypothese te toetsen. Laatse kolom = p-waarde
(Intercept) 97.204 6.252 15.547 <2e-16 *** Geeft info over β0
gezondheid$duur 2.001 0.227 8.812 <2e-16 *** Geeft info over β1
---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 39.45 on 250 degrees of freedom = σ𝜀 (met ^ op)Multiple R-squared: 0.237, Adjusted R-squared: 0.234 = R2 en aangepaste R2
F-statistic: 77.66 on 1 and 250 DF, p-value: < 2.2e-16 = Resultaat van modelselectie
pwr.r.test
= power berekenen van de toets van H0: β1 = 0= argument: waarde van de correlatiecoëfficiënt die je wenst te kunnen detecteren met een hoge kans (= equivalent van effectgrootte bij t-toets). Deze waarde kan je best bepalen in termen van de regressiecoëfficiënt β1.
Bv. > rho <- 0.2* sqrt(var(gezondheid$duur))/ sqrt (var(gezondheid$uitgaven))> rho[1] 0.04866528> pwr.r.test (n=252, r=0.04866528, sig.level= 0.05)
approximate correlation power calculation (arctangh transformation)
n = 252 r = 0.04866528 sig.level = 0.05 power = 0.1200969 alternative = two.sided
Beta
= gestandaardiseerde regressiecoëfficiënt= niet te verwarren met populatiewaarden van de regressiecoëfficiënten β
Scatterplot3d
= driedimensionaal spreidingsdiagram opmaken.= package schatterplot3d installeren!
Bv.> scatterplot3d(gezondheid$duur, gezondheid$leeftijd, gezondheid$uitgaven)
Plot3d
= interactieve grafiek aanmaken die met de muis geroteerd kan worden.= package rgl installeren!
Pairs
= functie om alle paarsgewijze spreidingsdiagrammen te tekenen (meer dan 3 dimensies).
Bv.> pairs(mydata[c(1,2,3,7,8)])
Lower.panel = NULL
= de helft van de diagrammen verwijderen
Bv.> pairs(mydata[c(1,2,3,7,8)], lower.panel=NULL)
Vif()
= Variance inflation factor voor elke predictor berekenen.= elke VIF = 1: ideaal Als VIF < 2 of 3: geen probleemAls één of meerdere VIF > 10: duidelijk teken van collineariteit, model mag niet gebruikt worden.Als alle VIFs < 10, maar niet veel kleiner: grijze zone, voorzichtig zijn. = p-waarde met didt model berekenen: kan zijn dat p-waarde niet excact is!
Bv.> vif(LM) duur leeftijd 1.001911 1.001911 Beiden bijna gelijk aan 1, lineair model kan veilig
gebruikt worden met twee predictoren.
Anova
= analysis of variance= analyseert de varianties (SSres, SSmod, SSTot) van beide modellen en berekent de F-verhouding. = argumenten: twee modellen
Bv.> anova(LMA, LMB)Analysis of Variance Table
Model 1: wt ~ gestation + parity + age + wt.1 + number De twee modellen die Model 2: wt ~ gestation + parity + age + wt.1 + number + dage + dwt vergeleken worden. Res.Df RSS Df Sum of Sq F Pr(>F) Anova tabel: twee regels1 593 161805 (één per model).2 591 158268 2 3536.4 6.6028 0.001459 ** Per model aantal VG en de
kwadranten van de residuen. --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pwr.f2.test
= power berekenen van de F-toets met p-k vrijheidsgraden in de teller en n-p-1 vrijheidsgraden in de noemer. = Argumenten: aantal vrijheidsgraden in de teller (u), aantal vrijheidsgraden in de noemer (v) en de effectgrootte f2 (f2).
Bv.> pwr.f2.test(u=4, f2=0.333, power=0.9)
Multiple regression power calculation
u = 4 v = 46.25834 f2 = 0.333 sig.level = 0.05 power = 0.9
margin=…
= argument waarmee R weet dat hij de proporties per rij moet berekenen.
Bv.> prop.table(x=table(netRichting), margin=1) richtingonderwijsnet andere letteren soc. wet. wet. katho 0.15384615 0.15384615 0.57692308 0.11538462 officieel 0.07058824 0.14705882 0.67647059 0.10588235
Chisq.test
= berkenet de p-waarde van de chi kwadraat toets. = Argument: tabel met de frequenteiverdelingen in de k populaties. Geen alternative want chi kwadraat toets is altijd tweezijdig!
Bv.> chisq.test(x=table(netRichting))
Pearson's Chi-squared test
data: table(netRichting)X-squared = 6.0231, df = 3, p-value = 0.1105
ES.w2
= effectgrootte berekenen.
Bv.> prop.k <- prop/2> prop.k [,1] [,2] [,3] [,4][1,] 0.075 0.075 0.290 0.06[2,] 0.075 0.050 0.225 0.15> w <- ES.w2(prop.k)> w[1] 0.2275419