Es 1 pulizia dati
- mask_nam = isnamef(data)
- mask_inf = isinf(data)
- mask_neg = data < 0
Genera matrice maschera con 1 nelle posizioni che soddisfano il comando.
- somma_nam = sum(mask_nam(:))
- somma_inf = sum(mask_inf(:))
- somma_neg = sum(mask_neg(:))
Somma la matrice e somma gli 1.
- data(mask_neg | mask_inf) = nan
- somma_colonne = sum-(isnan(data))
- somma_righe = sum(isnan(data), 2)
Sostituisce inf e neg con nan.
Conta i nan per colonna.
Conta i nan per riga.
- perc_riga = (somma_righe . 100)/size(data, 2)
- perc_colonna = (somma_colonne . 100)/size(data, 1)
(n riga .100)/n colonne
(n colonna .100)/n righe
- data_reduced = data(:, perc_colonna < x)
- data_reduced = data(perc_righe < x, :)
Tengo le colonne con meno di x % nan.
Tengo le righe con meno di x % nan.
Es 2 test statistici
- kurt = kurtosis(data)
- skw = skewness(data)
- (ho, p, stato, indice) = lillietest(data)
- histogram(data, 20)
- q-qplot(data)
- ttest, ttest2, nttest, logrank, ranksum, ztest
Se = 3 gaussianx = 0 gaussiana.
Se p<0,05 non gaussiane.
20 bins mettere le unità di misura.
Se mille stime rag - gaussiane.
In base a una chiusa.
Es 1 pulizia dati
- mask_nan = isna(data)
- mask_inf = isinf(data)
- mask_neg = data < 0
Genera matrice maschera uno 1 nelle posizioni che soddisfano il comando.
- somma_nan = sum(mask_nan(:))
- somma_inf = sum(mask_inf(:))
- somma_neg = sum(mask_neg(:))
Somma la matrice e somma gli 1.
- data(mask_neg | mask_inf) = nan
Sostituisce inf e neg con nan.
- somma_colonne = sum(isnan(data))
Conta i nan per colonna.
- somma_righe = sum(isnan(data),2)
Conta i nan per riga.
- perc_riga = (somma_righe . 100)/size(data,2)
(n riga . 100) / n colonne
- perc_colonne = (somma_colonne . 100)/size(data,1)
(n colonna . 100) / n righe
- data_reduced = data(:, perc_colonne < x)
Tengo le colonne con meno di x % nan.
- data_reduced = data(perc_righe < x , :)
Tengo le righe con meno di x % nan.
Es 2 test statistici
- kurt = kurtosis(data)
Se = 3 gaussiane.
- skew = skewness(data)
Se = 0 gaussiane.
- [hb, p, stat, critico] = lillietest(data)
Se p<0.05 non gaussiane.
- histogram(data,20)
20 bins mette le unità di misura.
- q-q plot(data)
Se sulla stessa riga, gaussiane.
- ttest, ttest2, signtest, logrank, ranksum, ztest
In base a cosa chiede.
Es 3 regressione lineare
- y = data(i,1)
- x_non_intercept = data(:,5)
- x = [ones(length(x_non_intercept)) x_non_intercept]
- beta_hat = (x'x)^(-1)(x'y)
- y_hat = x * beta_hat
- residui = y - y_hat
- xtxinv = inv(x'x)
- o^2_hat = sum(residui.^2) / (size(x,1) - size(x,2))
- var_beta_hat = diag(o^2_hat * xtxinv)
- standard_error = sqrt(var_beta_hat)
- SSE = sum(residui.^2)
- SST = sum((y - mean(y)).^2)
- R2 = 1 - SSE/SST
- RMSE = sqrt(mean(residui.^2))
- CI_lower = beta_hat - 1.96 standard error
- CI_upper = beta_hat + 1.96 standard error
Analisi residui
- skew e kurtosi per normalità
- histogram e Q-plot
- plot(y, y_hat)
- stem(1:length(residui), residui)
xlabel('Indici del soggetti')
ylabel('Residui' unità di misura)
hold on
- scatter(y_hat, residui)
- plot([min(y_hat) max(y_hat)], [0,0])
- mean(residui) per la media nulla
[r.hat - sort, a.sort] = sort(r.hat)
autovar(predizioni[:, sort])
xlabel('sulla seconda il valore predetto')
Collinearità
'autovalori = eig(x'.x)
k = max(autovalori)/min(autovalori)
VIF = 1/(1-R2)
N = size(x,1)
M = size(x,2)
R2_adj = 1 - (N-1)/(N-M) sse/sst R2 adjusted
AIC = N.log(sse) + 2.M minore e meglio
BIC = N.log(sse) + M.log(N) minore e meglio
Regolarizzazione
lambda = come indicato dal problema
[beta_hat, info] = lasso(x,Y,'Intercept',false,'Standardize',true,'Alpha',0 or 1,'Lambda',lambda,'CV',5)
In base a x voglio lasso o Ridge.
[mse_min, i_lambda] = min(info.mse)
Trovo il minimo MSE.
lambda_best = lambda(i_lambda)
lambda equivalente al min MSE.
beta_hat_best = beta_hat(:,i_lambda)
b equivalente al miglior lambda.
intercept_best = info.Intercept(i_lambda)
Es 4a clustering
- plot dei segnali da mostrare
Si dovrebbe iniziare il numero di cluster ottimo già dal plot.
- ng(x)
x = numero che da il prof1 stesso.
- k = x
- [cluster centroid] = kmeans(eg, k, 'distance', 'sqeuclidean', 'Replicates', x, 'MaxIter', x)
e valori li da il prof1 stesso.
- sil = silhouette(data, cluster)
Per farlo ci piace tentativi di k uso l'indice di silhouette medio maggiore.
Ciclo FOR
kmeans
memorizzo silhouette
mean(silhouette)
centroidi {2} = centroidi
i numeri dei k
END
- salgo il k con la silhouette media migliore
Es 5b survival analysis
- ng(x)
Li da il prof.
- [km_values, km_t] = cdf(data, 'Censoring', ~c, 'Function', 'survivor')
c pensato al contrario della funzione.
- censoring_times = data(c==0)
Cerco i punti di S(t) con il tempo censurato.
- St_censoring = interp1(km_t, km_values, censoring_times, 'previous')