ESEMPIO
GLMlibrary(ISLR)library(tibble)as_tibble(Default)# A tibble: 10,000 x 4default student balance income<fct> <fct> <dbl> <dbl>1 No No 730. 44362.2 No Yes 817. 12106.3 No No 1074. 31767.4 No No 529. 35704.5 No No 786. 38463.6 No Yes 920. 7492.7 No No 826. 24905.8 No Yes 809. 17600.9 No No 1161. 37469.10 No No 0 29275.# ... with 9,990 more rowsset.seed(42)head(Default)default student balance income1 No No 729.5265 44361.6252 No Yes 817.1804 12106.1353 No No 1073.5492 31767.1394 No No 529.2506 35704.4945 No No 785.6559 38463.4966 No Yes 919.5885 7491.559default_idx = sample(nrow(Default), 5000)default_trn = Default[default_idx, ]default_tst = Default[-default_idx, ]
###################################################################################### Linear regression#####################################################################################
default_trn_lm = default_trndefault_tst_lm = default_tst# Since linear regression expects a numeric response variable,
we coerce the response# to be numeric (we also shift the results, as we require 0 and 1, not 1 and 2.) ```R default_trn_lm$default = as.numeric(default_trn_lm$default) - 1 default_tst_lm$default = as.numeric(default_tst_lm$default) - 1 model_lm = lm(default ~ balance, data = default_trn_lm) summary(model_lm) ``` Call: lm(formula = default ~ balance, data = default_trn_lm) Residuals: Min 1Q Median 3Q Max -0.2306 -0.0698 -0.0271 0.0196 0.9905 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -7.352e-02 4.795e-03 -15.33 <2e-16 *** balance 1.272e-04 4.932e-06 25.79 <2e-16 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.1693 on 4998 degrees of freedom Multiple R-squared: 0.1174, Adjusted R-squared: 0.1173 F-statistic: 665 on 1 and 4998 DF, p-value: < 2.2e-16 ```R plot(default ~ balance, data = default_trn_lm, col = "darkorange", pch = "|", ylim = c(-0.2, 1), main = ```"Using Linear Regression for Classification"
abline(h = 0, lty = 3)
abline(h = 1, lty = 3)
abline(h = 0.5, lty = 2)
abline(model_lm, lwd = 3, col = "dodgerblue")
# First issue
all(predict(model_lm) < 0.5)[1] TRUE
# Second issue
any(predict(model_lm) < 0)[1] TRUE
#####################################################################################
Logistic regression (single predictor example)
####################################################################################
model_glm = glm(default ~ balance, data = default_trn, family = "binomial")
# family = "binomial" - two class classification. If "gaussian" normal linear regression
coef(model_glm)(Intercept) balance-10.452182876 0.005367655
# predict function. Default type is "link" -> beta_0 + beta_1*x_i
head(predict(model_glm))9149 9370 2861 8302 6415 5189-6.9616496 -0.7089539 -4.8936916 -9.4123620 -9.0416096 -7.3600645
# Predicted probability
head(predict(model_glm, type = "response"))9149 9370 2861 8302 6415 51890.0009832 0.3296827 0.0074127 0.0001057 0.0001507 0.0005377
"response"))9149 9370 2861 8302 6415 51899.466353e-04 3.298300e-01 7.437969e-03 8.170105e-05 1.183661e-04 6.357530e-04 # Class definition model_glm_pred = ifelse(predict(model_glm, type = "response") > 0.5, "Yes", "No") head(model_glm_pred) 9149 9370 2861 8302 6415 5189 "No" "No" "No" "No" "No" "No" # Training classification error rate calc_class_err = function(actual, predicted) { mean(actual != predicted) } err <- calc_class_err(actual = default_trn$default, predicted = model_glm_pred) # Confusion matrix table("actual" = default_trn$default, "predicted" = model_glm_pred) predicted actual No Yes No 4815 17 Yes 122 46 # Accuracy acc <- sum(diag(table(default_trn$default, model_glm_pred)))/length(model_glm_pred) err+acc[1] 1 plot(default ~ balance, data = default_trn_lm, col = "darkorange", pch = "|",ylim = c(-0.2, 1), main = "Using Logistic Regression
for Classification") abline(h = 0, lty = 3) abline(h = 1, lty = 3) abline(h = 0.5, lty = 2) curve(predict(model_glm, data.frame(balance = x), type = "response"), add = TRUE, lwd = 3, col = "dodgerblue") abline(v = -coef(model_glm)[1] / coef(model_glm)[2], lwd = 2)
# for logistic regression with a single predictor, the decision boundary is given by the point # x_1 = (-beta_0)/(beta_1)
##################################################################################### # Multinomial logistic regression ##################################################################################### library(nnet) set.seed(430) iris_obs = nrow(iris) iris_idx = sample(iris_obs, size = trunc(0.50 * iris_obs)) iris_trn = iris[iris_idx, ] iris_test = iris[-iris_idx, ] model_multi = multinom(Species ~ ., data = iris_trn, trace = FALSE) summary(model_multi)$coefficients
(Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width versicolor 26.81602 -6.983313 -16.24574 20.35750 3.218787 virginica
-34.24228 -8.398869 -17.03985 31.94659 11.594518
head(predict(model_multi, newdata = iris_trn))[1] setosa virginica setosa setosa virginica setosaLevels: setosa versicolor virginica
head(predict(model_multi, newdata = iris_trn, type = "prob"))setosa versicolor virginica23 1.000000e+00 2.607782e-19 3.891079e-44106 4.461651e-38 2.328295e-09 1.000000e+0037 1.000000e+00 1.108222e-18 1.620112e-4240 1.000000e+00 5.389221e-15 1.525649e-37145 1.146554e-28 9.816687e-07 9.999990e-0136 1.000000e+00 6.216549e-16 7.345269e-40
ESERCIZI• Caricare in R il file “ArtMagazine.RData”.In questo esempio, il sito web artsymag.com vuole decidere quali riviste pubblicizzare in una e-mail da inviare peruna campagna di marketing ai clienti. Il sito artsymag.com decide di comprare da aziende esterne dati sui suoiclienti. Tali aziende, ad esempio, dispongono di dati quali il reddito, il numero di persone in casa, e così via. Levariabili che artsymag.com acquista sono i seguenti:
- Reddito Household Income (Reddito; arrotondato $1,000.00).
- IsFemale Gender (IsFemale = 1 se la persona è femmina, 0 altrimenti).
- IsMarried Marital Status (IsMarried = 1 se sposato, 0 altrimenti).
- HasCollege College Educated (HasCollege = 1 se ha frequentato per uno o più anni il college, 0 altrimenti).
- IsProfessional Employed in a Profession (IsProfessional = 1 se lavora, 0 altrimenti).
- IsRetired Retired (IsRetired = 1 se in pensione, 0 altrimenti).
- Unemployed Not employed (Unemployed = 1 se non lavoratore, 0 altrimenti).
- ResLength Length of Residency in Current City (ResLength; in anni).
- Dual Dual Income if Married (Dual = 1 se doppio reddito, 0 altrimenti).
- Minors Children (Minors = 1 se i bambini in casa hanno meno di 18 anni, 0 altrimenti).
- Own Home ownership (Own = 1 se la casa di residenza è di proprietà, 0 altrimenti).
- House Resident type (House = 1 se risiede in una casa unifamiliare, 0 altrimenti).
- White Race (White = 1
se è di razza bianca, 0 altrimenti).
14. English Language (English = 1 se la prima lingua parlata in casa è l'inglese, 0 altrimenti).
In aggiunta a queste variabili per ogni cliente http://www.artsymag.com ottiene le seguenti informazioni da una fonte terza:
15. PrevArt Precedentemente acquistato una rivista d'arte (PrevArt = 1 se precedentemente ha acquistato una rivista di arte, 0 altrimenti).
16. PrevCin Precedentemente acquistata una rivista di cinema (PrevCin = 1 se precedentemente ha acquistato una rivista di cinema, 0 altrimenti).
La variabile dipendente Y è creata considerando l'esperimento: dopo l'invio di 673 e-mail contenenti pubblicità per "Art Magazine", il cliente si abbona oppure no alla rivista (variabile Buy). La variabile dipendente Y è:
17. Buy Acquista "Art Magazine" (Buy= 1 se acquista "Art Magazine", 0 altrimenti).
Si esegua la seguente analisi sul dataset "Art
Magazine.Rdata”:• Si stimi con un barplot (hint: si usi prop.table()) l’associazione tra la variabile dipendente Y e le seguenti:Gender, Home Ownership, College Educated, PrevArt and PrevCinema. Si evidenzi quali risultano essere le variabili più associate in base al barplot.
<h2>Associazione tra la variabile dipendente Y e le seguenti variabili</h2>
<ul>
<li>Gender</li>
<li>Home Ownership</li>
<li>College Educated</li>
<li>PrevArt</li>
<li>PrevCinema</li>
</ul>
<h3>Barplot dell'associazione</h3>
<img src="barplot.png" alt="Barplot dell'associazione">
* Si stimi un modello di regressione logistica, con Buy come variabile dipendente e Gender, Not Employed, Income and English (obs.no è solamente l’ID cliente) come covariate. Ci sono delle covariate che dovrebbero essere rimosse dal modello? Sulla base di quale test?
<h2>Modello di regressione logistica</h2>
<p>Variabile dipendente: Buy</p>
<p>Covariate: Gender, Not Employed, Income, English</p>
<h3>Rimozione delle covariate non significative</h3>
<p>Per determinare le covariate non significative, si utilizza un test statistico.</p>
• Dopo aver rimosso le variabili non significative, si stimi il nuovo modello di regressione e si compari con i due modelli che si ottengono aggiungendo rispettivamente PrevArt e PrevCinema. Si scelga il miglior modello (hint: chi square test sulla devianza) e si commenti la significatività dei coefficienti.
<h2>Confronto dei modelli di regressione</h2>
<p>Modello 1: Nuovo modello di regressione dopo la rimozione delle covariate non significative</p>
<p>Modello 2: Modello di regressione con l'aggiunta di PrevArt</p>
<p>Modello 3: Modello di regressione con l'aggiunta di PrevCinema</p>
<h3>Confronto dei modelli</h3>
<p>Per determinare il miglior modello, si utilizza un test del chi quadrato sulla devianza.</p>
<p>Si commenta la significatività dei coefficienti dei modelli.</p>
* Si preveda la probabilità di acquistare Art Magazine, attraverso il miglior modello, per...
<h2>Previsione della probabilità di acquistare Art Magazine</h2>
<p>Utilizzando il miglior modello, si prevede la probabilità di acquistare Art Magazine per...</p>
ipotiroidici sulla base di alcuni parametri clinici e di laboratorio.Una seconda classe di metodi – detti di classificazione probabilistica – cercano invece di modellare le classi stesse,ovvero di trovare una funzione di densità di probabilità che descriva la distribuzione dei dati all'interno di ciascuna classe.In questi casi la risposta che si ottiene è una probabilità di appartenenza ad ogni classe.Questi metodi si concentrano sul modellare la distribuzione dei dati all'interno di ciascuna classe e sulla stima delle probabilità di appartenenza ad ogni classe.Un esempio è la classificazione di email in spam o non spam sulla base di alcune caratteristiche dei messaggi.Una terza classe di metodi – detti di classificazione basata su regole – cercano di definire delle regole di classificazione che descrivano il comportamento dei dati all'interno di ciascuna classe.In questi casi la risposta che si ottiene è una regola di classificazione che descrive il comportamento dei dati all'interno di ciascuna classe.Questi metodi si concentrano sul definire delle regole che descrivano il comportamento dei dati all'interno di ciascuna classe.Un esempio è la classificazione di transazioni finanziarie come sospette o non sospette sulla base di alcune regole di comportamento finanziario.ipotiroidei. In questo caso, la classificazione dei campioni può essere fatta misurando alcune variabili sui campioni in esame, identificando i baricentri delle distribuzioni dei campioni, e tracciando delle superfici a metà strada tra i diversi baricentri. Come detto, questi metodi procedono alla classificazione dei campioni in una di K classi disponibili.
Per costruire il modello di classificazione, in tutti i casi si parte dalla Regola di Bayes: "un campione va assegnato alla classe per la quale sia maggiore la sua probabilità di appartenenza". Il processo di classificazione è quindi un processo a due stadi:
- Stadio 1: Misurare alcune variabili sui campioni in esame e identificare i baricentri delle distribuzioni dei campioni.
- Stadio 2: Tracciare delle superfici a metà strada tra i diversi baricentri e assegnare i campioni alle classi corrispondenti.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.