Sunteți pe pagina 1din 30

Pagina proiect

Cuprins
1. Introducere

Importanța temei

Prin intermediul acestui studiu voi dori să aflu dacă există legături între variabilele
studiate numerice ( „ethanol”- consumul de etanol, „educ”-numărul de educație, „unemrate”-rata
șomajului, „age”-vârsta, „famsize”-numărul membrilor de familie) și variabilele nenumerice (
„status”-nivel , „married”-stare civilă ).
Pentru a putea cerceta ne va trebui o bază de date utilizând limbajul de programare
Python.

Obiectivele studiului

Acest proiect are ca și obiective:


- Obținerea unor rezultate favorabile cercetării, adică să existe relație de dependență între
cele trei variabile cantitative si cele 2 calitative;
- Observarea modului de influență a unei/ unor variabile asupra celorlalte;
- Identificarea punctelor de extrem și eliminarea acestora;
- Existența corelațiilor, asocierilor, concordanțelor dintre variabile;
- Estimarea și testarea mediilor;
- Identificarea modelelor de regresie și a coeficientului de corelație;
- Alegerea celui mai potrivit model de regresie.

În realizarea proiectului voi folosi următoarele metode prin intermediul cărora voi avea în
vedere îndeplinirea obiectivelor menționate mai sus.
Pentru a putea începe cercetarea propriu zisă, a fost nevoie de operațiuni preliminare și de
transformare a variabilelor aflate din baza de date. În urma modificărilor asupra bazei de date, s-a
utilizat analiza grafică și numerică a variabilelor analizate. Aceasta fiind urmată de analiza
statistică a variabilelor categoriale. Ultimele metode au fost estimarea și testarea mediilor,
respectiv analiza de regresie și corelație.
2. Prezentarea bazei de date

Baza de date utilizată a fost salvată în format CSV și importată în limbajul de programare
Python, denumită Alcohol.
Cod utilizat
import pandas as pd
from pandas import read_csv
from pandas import concat
alcohol=pd.read_csv("alcohol.csv")
Figura 1: Importarea bazei de date inițiale

*Sursa: Python
Această bază este împărțită în 34 de variabile: 12 numerice și 22 categoriale.

Tabel 1: Baza de date inițială

*Sursa: Python
În continuarea analizei efectuate din cele 12 variabile numerice s-au folosit doar 5, acestea
fiind: “unemrate”, “age”, “educ”, “famsize”, și “ethanol”, iar din cele 22 categoriale voi folosi
doar 2 (“status” și “married”).

Operațiile preliminare constau în realizarea unei selecții pentru cele trei variabile
numerice “educ”, “age” și “unemrate” astfel încât noua bază obținută să conțină valori mai mari
decât media (13.309611) pentru variabila “educ”, valori mai mari decât media asociate
variabilei “age” (38.384358) și variabilei “unemrate” mai mici decât valoarea 4.
În urma acestor operații, am ales ca variabila numerică “famsize” să o transform într-o
variabilă nenumerică cu trei categorii. Astfel am folosit acest cod în programul python:
Cod utilizat
alcohol['d_famsize']=pd.cut(alcohol.famsize, bins=[1,3,4,13],
labels=['small','average','high'],include_lowest=True)

average=alcohol.loc[alcohol['famsize']<4]
small=alcohol.loc[alcohol['famsize']<=3]
high=alcohol.loc[alcohol['famsize']>3]

Condițiile pentru noua variabilă creată („d_famsize”) au fost puse în funcție de analiza
descriptivă, folosind următorul cod:
Cod utilizat
print(alcohol.describe())

Figura 2: Analiza descriptivă pentru variabila “famsize”

*Sursa: Python
În urma acestei selecții a rezultat o nouă bază de date, conținând doar 262 de observații
din cele 9822 din baza de date inițială.

Figura 5: Baza în urma selecției

*Sursa: Python

Pentru a nu se crea o confuzie între variabila “married” și categoria pe care o voi forma, am
decis să o redenumesc cu numele „statut” folosind codul de mai jos:

Cod utilizat

alcohol=alcohol.rename(columns={'married':'statut'})

În baza inițială, variabila “married” avea categoriile denumite cu codurile 0 și 1, 1 reprezentând


persoanele căsătorite. Pentru o mai bună vizualizare asupra cercetării am decis redenumirea categoriilor,
astfel: categoria 0 să reprezinte persoanele necăsătorite, iar categoria 1 persoanle căsătorite.

Cod utilizat
statut=alcohol.statut
bins=[-1,0,1]
groups_names=['Casatorit','Necasatorit']
statut=pd.cut(alcohol['statut'],bins,labels=groups_names)
alcohol['statut']=pd.cut(alcohol['statut'],bins,labels=groups_names)
print(statut)
Pentru variabila “status” în baza inițială avea categoriile denumite cu codurile 1, 2, 3
reprezentând 1- persoanele pensionare, 2-persoanele șomere și 3- angajații. Pentru o mai bună
vizualizare asupra cercetării am decis redenumirea categoriilor expuse mai sus.
Cod utilizat

status=alcohol.status
bins=[0,1,2,3]
groups_names=['Pensionar','Somer','Angajat']
status=pd.cut(alcohol['status'],bins,labels=groups_names)
alcohol['status']=pd.cut(alcohol['status'],bins,labels=groups_names)
print(status)

Figura 6: Redenumirea categoriilor celor doua varaiabile categoriale

*Sursa: Python

Baza a fost exportată pentru a putea fi utilizată în realizarea cercetării.


Cod utilizat
alcohol.to_csv('alcool.csv')
Figura 6: Export baza de date

*Sursa: Python

3. Analiza grafică și numerică a variabilelor analizate

Analiza descriptivă are rolul de a scoate în evidență asemănarile/deosebirile dintre


variabilele analizate, a vedea diferențele dintre județe pe baza variabilelor analizate. Pe baza
graficului de tip Box-plot se pot observa punctele extreme din baza de date sau punctele care au
valori mult mai mari decât media.Măsurătorile tendinței centrale includ media, mediana și modul,
în timp ce măsurile de variabilitate includ abaterea standar, variabilele minime/maxime, skewness
și kurtosis.

3.1. Analiza descriptivă a variabilelor numerice și nenumerice (tabele de


frecvență)
3.1.1 Analiza descriptivă a variabilelor numerice
Cod utilizat
import scipy.stats as st
print(alcohol.describe())

Variabila “ethanol”

Cod utilizat
ethanol=alcohol.ethanol
print('the mean of the ethanol is', ethanol.mean())
print('the median of the ethanol is', ethanol.median())
print(st.mode(ethanol))
print('The kurtosis of the ethanol is',st. kurtosis(ethanol))
print('The skewness of the ethanol is',st.skew(ethanol))
Figura 7: Indicatorii statistici descriptivi

*Sursa: Python
Cod utilizat

print(alcohol.ethanol.describe())

Figura 8: Indicatorii statistici descriptivi ai variabilei “ethanol”

*Sursa: Python

Interpretări:
Media= 2.16 cap de locuitor.
Valoarea medie a variabilei Ethanol este egala cu 2.16 consum de etanol pe cap de
locuitor.

Mediana= 2.23 cap de locuitor.


50% dintre persoane au un consum de etanol de până la 2.23 pe cap de locuitor, iar restul de
50% au peste 2.23 pe cap de locuitor.
Quartila 1 = 1.83 cap de locuitor
25 % din persoane au un consum de etanol până la 1.83 cap de locuitor și 75 % au mai mult de
1.83 cap de locuitor.
Quartila 3 = 2.44 cap de locuitor
75 % din persoane au un consum de etanol până la 2.44 cap de locuitor și 25% au mai mult de
2.44 cap de locuitor.

Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 0.27 cap de locuitor
Arată o variație în medie a consumului de etanol față de nivelul mediu cu 0.27 cap de
locuitor.

Indicatori ai formei ( Asimetria și Boltirea)

Coeficientul de asimetrie Pearson (Skewness) = -0.51arată că distribuția este asimetrică la


stanga. (<0)
Coeficientul de boltire Fisher (Kurtosis) = -1.25 arată că distribuția este platicurtică.(<0).

Variabila “educ”

Cod utilizat

educ=alcohol.educ
print('the mean of the ethanol is', ethanol.mean())
print('the median of the educ is', educ.median())
print(st.mode(educ))
print('The kurtosis of the educ is',st. kurtosis(educ))
print('The skewness of the educ is',st.skew(educ))

Figura 9: Indicatorii statistici descriptivi

*Sursa: Python
Cod utilizat
print(alcohol.educ.describe())
Figura 10: Indicatorii statistici descriptivi ai variabilei “educ”

*Sursa: Python

Interpretări:
Media= 16.18 ani de școlarizare.
O persoană are în medie ani de școlarizare de 16.18 ani
Mediana= 16 ani.
50% dintre persoane au anii de școlarizare de până la 16 ani, iar restul de 50% au peste 16 ani.
Quartila 1 = 15 ani.
25 % din persoane au anii de școlarizare până la 15 ani și 75 % au mai mult de 15 ani.
Quartila 3 = 18 ani.
75 % din persoane au anii de școlarizare până la 18 ani și 25% au mai mult de 18 ani.

Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 1.48 ani
Arată o variație în medie a anilor de școlarizare față de nivelul mediu cu 1.48 ani.

Indicatori ai formei ( Asimetria și Boltirea)

Coeficientul de asimetrie Pearson (Skewness) = -0.12 arată că distribuția este asimetrică


la stânga. (<0).
Coeficientul de boltire Fisher (Kurtosis) = -1.17arată că distribuția este platicurtică. (<0).
Variabila “unemrate”

Cod utilizat
unemrate=alcohol.unemrate
print('the mean of the unemrate is', unemrate.mean())
print('the median of the unemrate is', unemrate.median())
print(st.mode(unemrate))
print('The kurtosis of the unemrate is',st. kurtosis(unemrate))
print('The skewness of the unemrate is',st.skew(unemrate))

Figura 11: Indicatorii statistici descriptivi

*Sursa:Python

Cod utilizat
print(alcohol.unemrate.describe())
Figura 12: Indicatorii statistici descriptivi ai variabilei “unemrate”

*Sursa:Python
Interpretări:
Media= 3.52 %
Rata șomajului în medie o valoare de 3.52%.
Mediana= 3.59%.
50% dintre persoane au valoarea ratei șomajului de până la3.59 %, iar restul de 50% au peste
3.59%.
Quartila 1 = 3.30%.
25 % din persoane au valoarea ratei șomajului până la 3.30% și 75 % au mai mult de 3.30%.
Quartila 3 = 3.80%.
75 % din persoane au valoarea ratei șomajului până la 3.80% și 25% au mai mult de 3.80%.

Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 0.33%.
Arată o variație în medie a ratei șomajului față de nivelul mediu cu 0.33%.

Indicatori ai formei ( Asimetria și Boltirea)

Coeficientul de asimetrie Pearson (Skewness) = -0.50 arată că distribuția este asimetrică


la stânga. (<0)
Coeficientul de boltire Fisher (Kurtosis) = -1.01 arată că distribuția este platicurtică. (<0).

Variabila “unemrate”
Cod utilizat
age=alcohol.age
print('the mean of the age is', age.mean())
print('the median of the age is', age.median())
print(st.mode(age))
print('The kurtosis of the ageis',st. kurtosis(age))
print('The skewness of the age is',st.skew(age))
Figura 13: Indicatorii statistici descriptivi

*Sursa:Python

Cod utilizat

print(alcohol.age.describe())
Figura 14: Indicatorii statistici descriptivi ai variabilei “age”

*Sursa:Python

Interpretări:
Media= 46.64 ani

Vârsta medie a persoanelor este de 46.64 ani.


Mediana= 45 ani.
50% dintre persoane au vârsta de până la 45 ani, iar restul de 50% au peste 45 ani.
Quartila 1 = 41 ani.
25 % din persoane au vârsta până la 41 ani și 75 % au mai mult de 41 ani.
Quartila 3 = 52 ani.
75 % din persoane au vârsta până la 52 ani și 25% au mai mult de 52 ani.

Indicatori ai dispersiei:
Abaterea standard (Std. Deviation) = 6.16 ani.
Arată o variație în medie a vârstei persoanelor față de nivelul mediu cu 6.16 ani.
Indicatori ai formei ( Asimetria și Boltirea)

Coeficientul de asimetrie Pearson (Skewness) = 0.55 arată că distribuția este asimetrică la


dreapta. (>0)
Coeficientul de boltire Fisher (Kurtosis) = -0.97arată că distribuția este platicurtică.(<0)

3.1.2 Analiza descriptivă a variabilelor nenumerice


Cod utilizat

cross_tab=pd.crosstab(alcohol.statut, alcohol.status,margins=True)
print(cross_tab)
Tabel 2: Tabel de frecvență

*Sursa:Python

Figura 15: Analiza descriptivă a variabilelor categoriale

*Sursa:Python
3.2. Analiza grafică a variabilelor numerice și nenumerice

3.2.1 Analiza grafică a variabilelor numerice

 Boxplot

Cod utilizat

from pandas.tools.plotting import boxplot


ethanol=alcohol.ethanol
print(boxplot(ethanol))

Grafic 1: Boxplot pentru variabila “ethanol”

*Sursa:Python
După cum putem observa în graficul de mai sus, variabila “ethanol” nu conține valori extreme.

Cod utilizat
educ=alcohol.educ
print(boxplot(educ))
Grafic 2: Boxplot pentru variabila “educ”

*Sursa:Python
În graficul de mai sus, observăm că pentru variabila “educ” nu avem valori extreme.

Cod utilizat
unemrate=alcohol.unemrate
print(boxplot(unemrate))

Grafic 3: Boxplot pentru variabila “unemrate”

*Sursa:Python
În graficul cu numărul 3, observăm că variabila “unemrate” nu prezintă valori extreme.

Cod utilizat
age=alcohol.age
print(boxplot(age))
Grafic 4: Boxplot pentru variabila “age”

*Sursa:Python
Ca și celelalte variabile numerice, variabila “age” nu prezintă valori extreme.

 Histograma

Cod utilizat
print(alcohol.ethanol.hist(bins=50, color='red'))

Grafic 5:Histograma pentru variabila “ethanol”

*Sursa:Python
După cum observăm în histograma de mai sus avem distribuție asimetrică la stânga
deoarece coeficientul de asimetrie Pearson (Skewness) = -0.51<0 și coeficientul de boltire Fisher
(Kurtosis)= -1.25 <0, arătând că distribuția este platicurtică.

Cod utilizat
print(alcohol.educ.hist(bins=50, color='green'))
Grafic 6:Histograma pentru variabila “educ”

*Sursa:Python
După cum observăm în histograma cu numărul 6 avem distribuție asimetrică la stânga
deoarece coeficientul de asimetrie Pearson (Skewness) = -0.12<0 și coeficientul de boltire Fisher
(Kurtosis)= -1.17<0, arătând că distribuția este platicurtică.

Cod utilizat
print(alcohol.unemrate.hist(bins=50, color='pink'))

Grafic 7:Histograma pentru variabila “unemrate”

*Sursa:Python
După cum observăm în histograma cu numărul 7 avem distribuție asimetrică la stânga
deoarece coeficientul de asimetrie Pearson (Skewness) = -0.50<0 și coeficientul de boltire Fisher
(Kurtosis)= -1.01<0, arătând că distribuția este platicurtică.
Cod utilizat
print(alcohol.age.hist(bins=50, color='orange'))

Grafic 8:Histograma pentru variabila “age”

*Sursa:Python
După cum observăm în graficul de mai sus avem distribuție asimetrică la stânga deoarece
coeficientul de asimetrie Pearson (Skewness) = 0.55>0 și coeficientul de boltire Fisher
(Kurtosis)= -0.97<0, arătând că distribuția este platicurtică.

3.2.2 Analiza grafică a variabilelor nenumerice

 Bar plot

Cod utilizat

import seaborn as sns


sns.countplot(x="status",data=alcohol, palette="pastel")
Grafic 9:Bar plot pentru variabila “status”

*Sursa:Python
În bar plotul de mai sus se observă faptul că cele mai multe persoane din baza de date au
ocupația de “Angajat”, urmată de ocupația “Somer” cu cele mai puține persoane.

Cod utilizat
sns.countplot(x="statut",data=alcohol, palette="pastel")

Grafic 10:Bar plot pentru variabila “statut”

*Sursa:Python
În bar plotul de mai sus se observă faptul că cele mai multe persoane din baza de date au
statutul de “Necasatorit”.
Cod utilizat
sns.countplot(x="d_famsize",data=alcohol, palette="pastel")
Grafic 11:Bar plot pentru variabila “d_famsize”

*Sursa:Python
În bar plotul cu numărul 11 se observă faptul că numărul membrilor de familie cu categoria
„small” are cel mai ridicat nivel, urmat de categoria „average”.

4. Analiza statistică a variabilelor categoriale


4.1 Tabelarea datelor

Cod utilizat
cross_tab=pd.crosstab(alcohol.d_famsize, alcohol.statut,margins=True)
print(cross_tab)
Tabel 3: Tabelarea datelor între cele 2 variabile categoriale
*Sursa:Python
Conform tabelului 3, putem afirma că cele mai multe persoane căsătorite fac parte din categoria
familiilor cu un număr redus de membri și toate persoanele cu un număr mediu și mare de membri nu
sunt căsătoriți. În schimb, cele mai multe persoanele necăsătorite se regăsesc tot în categoria familiilor
cu un număr redus de membri.

4.2 Analiza de asociere

Cod utilizat

from scipy.stats import chi2_contingency


cross_tab=pd.crosstab(alcohol.d_famsize, alcohol.statut,margins=True)
print(cross_tab)
rezultat_chi_sq2=chi2_contingency(cross_tab)

Tabel 4: Analiza de asociere

*Sursa:Python
Ipoteze:
H0=nu există asociere între variabile
H1=există asociere între variabile

Deoarece Sig=0.007 <0.05 rezulă că ipoteza nulă se respinge, astfel cu o probabilitate de 95%
putem afirma că există asociere între cele 2 variabile.
4.3 Analiza de concordanță

Cod utilizat
import scipy
valori_observate=alcohol.status.value_counts()
valori_asteptate=scipy.array([6,4,2])
res1=scipy.stats.chisquare(valori_observate,f_exp=valori_asteptate)

Tabel 4: Analiza de concordanță

*Sursa:Python

Ipoteze:
H0=există concordanță între variabile
H1=nu există concordanță între variabile

Deoarece Sig=0.0 <0.05 rezulă că ipoteza nulă se respinge, astfel cu o probabilitate de 95%
putem afirma că nu există concordanță între cele 2 variabile.

5. Estimarea și testarea mediilor


5.1 Estimarea mediei prin interval de încredere
Cod utilizat

import statsmodels.stats.api as sms


print('confidence interval',sms.DescrStatsW(ethanol).tconfint_mean())
Figura 16: Intervalul de încredere pentru variabila “ethanol”

*Sursa:Python

Cu o probabilitate de 95% putem garanta că, consumul de etanol pe cap de locuitor


este cuprins în intervalul [2.1291688148216674, 2.1968492892947578].

5.2 Testarea unei medii cu o valoare fixă

Cod utilizat
from scipy import stats
print(stats.ttest_1samp(unemrate,0))

Figura 17: Testarea mediei cu o valoare fixă

*Sursa:Python

5.3 Testarea diferenței dintre două medii (eșantioane independente sau eșantioane perechi)

Cod utilizat

age_Casatorit=alcohol.loc[alcohol['statut']=='Casatorit']
agel_Necasatorit=alcohol.loc[alcohol['statut']=='Necasatorit']
print(stats.ttest_ind(age_Casatorit.age,agel_Necasatorit.age))
print(stats.ttest_ind(age_Casatorit.age,agel_Necasatorit.age,equal_var=False))
Figura 17: Testarea diferenței dintre două medii

*Sursa:Python
Ipoteze:
H0=µ1=µ2=0
H1=cel puțin o medie diferită de 0

Sig = 0.07
α= 0,05 rezultă că Sig>α
Cu o probabilitate de 0.95 putem afirma că se acceptă ipoteza nulă, în concluzie cele două medii
sunt egale cu 0.

5.4 Testarea diferenței dintre trei sau mai multe medii.

Cu ajutorul testului ANOVA am putut observa dacă sunt diferențe semnificative între mediile
variabilelor studiate. Pentru a verifica cele spuse am formulat următoarele ipoteze:
H0: µ1=µ2=µ3
H1: cel puțin două medii sunt egale

Cod utilizat
import statsmodels.api as sm
from statsmodels.formula.api import ols
model=ols('ethanol~status',data=alcohol).fit()
print(sm.stats.anova_lm(model,typ=2))
Figura 18: Testarea diferenșei dintre trei și mai multe medii

*Sursa:Python

După cum putem observa din figura 18 valoarea Sig pentrucele 2 variabilele analizate
este mai mică decât α care este egală cu 0,05, ceea ce ne duce la respingerea ipotezei nule,
respectiv a lui H0 și la acceptarea ipotezei alternative H1. Prin urmare putem afirma că între
mediile variabilelor (ethanol și status) există diferențe semnificative.

6. Analiza de regresie și corelație

6.1 Analiza de corelație

 Coeficientul Pearson

Cod utilizat

from scipy.stats import pearsonr


print(st.pearsonr(unemrate,age))

Figura 19: Coeficientul Pearson

*Sursa:Python

Se poate garanta cu o probabilitate de 0,95 că între cele două variabile există o corelație
scăzută pozitivă(r=0.08 >0).

6.2 Analiza de regresie

6.2.1 Analiza de regresie liniară simplă


Cod utilizat

ethanol=alcohol.ethanol
unemrate=alcohol.unemrate
X=unemrate
X=sm.add_constant(X)

model=sm.OLS(ethanol,X)
results=model.fit()
print(results.summary())

print('Parameters: ',results.params)
print('R2: ',results.rsquared)
print('Standard errors: ', results.bse)
print('Predicted values: ',results.predict())
erori=results.bse
print(stats.ttest_1samp(erori,0))

Tabel 5: Analiza de regresie liniară simplă

*Sursa:Python
Modelul de regresie liniară simplă analizat în decursul acestui proiect, este format dintr-o
variabilă dependent Y= ethanol și o variabilă independent X= unemrate.

Ecuația modelului de regresie


Yi= β0+ βi*xi+ ε
ethanol = 4.0276-0.5284* unemrate

Interpretare:
β0 = 4.0276: atunci când valoare ratei șomajului este egală cu 0, variabila dependentă,
consumul de etanol, are o valoare medie de 4.0276 pe cap de locuitor.
Faptul că ( β1= -0.5284)< 0 arată că între variabile există o legătură negativă, adică la o creștere a
ratei șomajului cu o unitate, consumul de etanol scade, în medie, cu 0.5284 pe cap de locuitor.

Raportul de corelație: R = 0.4


Valoarea estimată a raportului de corelație ne indică faptul că între consumul de etalon și
rata șomajului există o legătură medie.
Figura 20: Raportul de corelație

*Sursa:Python

6.2.2 Analiza de regresie liniară multiplă

Cod utilizat

from pandas import DataFrame


X_multiplu=DataFrame({'age': alcohol.age,
'unemrate': alcohol.unemrate})
X_multiplu=sm.add_constant(X_multiplu)
Y=alcohol.ethanol
model_multiplu=sm.OLS(Y, X_multiplu)
results_multiplu=model_multiplu.fit()
print(results_multiplu.summary())

Tabel 6: Analiza de regresie liniară multiplă

*Sursa:Python
Ecuația modelului
ethanol=4.1540-0.0031*age-0.5237*unemrate
Atunci când toate variabilele independente sunt egale cu 0, variabila ethanol este, în medie, cu
4.1540 pe cap de locuitor.
La o creștere cu o unitate a vârstei și a ratei șomajului, consumul de etanol pe cap de locuitor
scade cu 0.0031 pe cap de locuitor, respectiv scade cu 0.5237 pe cap de locuitor.

6.2.3 Analiza de regresie neliniară