Sebuah uji hipotesis statistik dilakukan berdasarkan data sampel untuk menguji apakah hipotesis yang diajukan dapat diterima atau ditolak. Dalam hal ini, hipotesis statistik mengacu pada asumsi mengenai parameter populasi1.
Langkah
1. Ajukan hipotesis
Terdapat dua jenis hipotesis dalam statistik, yaitu hipotesis nol (H0) dan hipotesis alternatif (H1). H0 diajukan dengan asumsi bahwa sampel data tidak dipengaruhi oleh penyebab tertentu atau murni karena probabilitas. Sementara, H1 diajukan dengan asumsi bahwa sampel data dipengaruhi oleh penyebab tertentu.
2. Tentukan level signifikan
Diterima atau tidaknya hipotesis bergantung pada area dimana nilai probabilitas itu berada. Ingat bahwa probabilitas memiliki rentang nilai 0 hingga 1. Dalam hal ini, area penentu diterima tidaknya hipotesis ditentukan oleh kita sendiri. Tidak ada batasan yang pasti berapa nilai yang dijadikan acuan, namun level signifikan yang biasa dipakai bernilai 0.01, 0.05, dan 0.1.
3. Tentukan uji statistik
Uji statistik dilakukan untuk menghasilkan nilai p-value yang nantinya digunakan sebagai penentu apakah hipotesis yang diajukan sebelumnya diterima atau ditolak. Terdapat beberapa jenis uji statistik yang bisa digunakan, bergantung pada seperti apa sampel data yang digunakan 2.
4. Menentukan level kritis ($\alpha$)
Area lingkup probabilitas dibatasi berdasarkan dua jenis, satu sisi dan dua sisi. Apabila satu sisi, maka level kritis sama dengan level signifikan. Sementara, apabila dua sisi, maka level kritis bernilai positif dan negartif level signifikan per dua ($ \pm \frac{\alpha}{2} $)3.
Level signifikan.
5. Interpretasi hasil
Jika p-value berada diluar level signifikan, maka H0 ditolak atau H1 diterima dan data sampel dipengaruhi oleh penyebab tertentu. Begitu juga sebaliknya, jika p-value berada pada level signifikan, maka H0 diterima atau H1 ditolak dan data sampel tidak dipengaruhi oleh suatu penyebab tertentu (murni karena probabilitas).
Contoh penerapan
Dalam studi meteorologi atau klimatologi, seringkali kita mengkaji suatu fenomena dan menghubungkannya dengan variabel meteorologi. Pada contoh ini, kita akan mencoba melakukan uji signifikansi apakah cold surge (CS) dan cross equatorial northerly surge (CENS) berpengaruh terhadap transpor uap air ketika berpropagasi di Benua Maritim Bagian Barat.
Data yang digunakan adalah data model ERA5, rentang tahun 2010-2019 dengan resolusi temporal harian.
1. Merumuskan hipotesis
H0 = rata-rata variabel transpor uap air saat kejadian CS dan CENS sama dengan rata-rata variabel secara keseluruhan. H1 = rata-rata variabel transpor uap air saat kejadian CS dan CENS tidak sama dengan rata-rata variabel secara keseluruhan.
2. Menentukan level signifikan ($ \alpha $)
Level signifikan yang diambil bernilai 5% atau 0.05.
3. Melakukan uji statistik
Uji statistik dilakukan dengan menggunakan uji student-t dua sisi3. Berikut merupakan formulanya.
\[t = \frac{\overline{x_1} - \overline{x_2}} {\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}\]di mana $\overline{x}$, $\overline{s}$, dan $n$ masing-masing merupakan rata-rata, varians, dan jumlah sampel data. Sementara itu, subscript 1 dan 2 menandakan variabel saat kejadian CS atau CENS dan rata-rata secara keseluruhan. Dalam hal ini, perhitungan statistik dilakukan untuk tiap grid spasial.Data tiap grid dihitung dengan memanfaatkan fungsi ttest
4 yang telah tersedia di NCL. Perhitungan ini menghasilkan p-value dan nilai t.
4. Menentukan level kritis
Oleh karena uji statistik dilakukan menggunakan metode student-t test dua sisi, maka level kritis adalah $\pm \frac{\alpha}{2}$. Sehingga, level signifikan menjadi 2.5% untuk masing-masing sisi. Nilai 2.5% dalam uji signifikansi termasuk dalam kategori kuat (substantial) (Wilks, 2019).[3]
5. Interpretasi hasil
H0 diterima apabila p-value berada pada rentang $ \pm \frac{\alpha}{2} $. Sedangkan H0 ditolak apabila p-value bernilai lebih besar atau kurang dari sama dengan nilai $ \pm \frac{\alpha}{2} $. Dengan ditolaknya H0, maka perbedaan variabel saat kejadian CS atau CENS dengan variabel pada kondisi reratanya dapat dikatakan bermakna atau signifikan secara statistik.
Implementasi di NCL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
begin
; use function for calculate t and p-value
undef ("signif")
function signif(xavg, xvar, xn, yavg, yvar, yn)
begin
iflag = False ; population variance similar
tval_opt = False ; p-value only
prob = ttest(xavg,xvar,xn,yavg,yvar,yn,iflag,tval_opt)
pval = (/prob/)
pval@long_name = "probability"
copy_VarCoords(xavg,pval)
diff = xavg - yavg
diff@long_name = "difference of the means"
copy_VarCoords(xavg,diff)
return ([/ xavg, diff, pval /])
end
;;------------------------------------------------------------------------------------------:
; MAIN CODE
;;------------------------------------------------------------------------------------------:
; input data
xncs = 32 ; number of CS days
xncens = 31 ; number of CENS days
yn = 53 ; monthly average (nov-mar, 2010-2019)
pathin = "../data/#/"
;---iuq_ivq : integrated moisture flux (zonal & meridional)
xiuqcsavg = fmb1cs->iuqcsmean(:,:,:)
xiuqcsvar = fmb1cs->iuqcsvari(:,:,:)
xivqcsavg = fmb1cs->ivqcsmean(:,:,:)
xivqcsvar = fmb1cs->ivqcsvari(:,:,:)
xiuqcensavg = fmb1cens->iuqcensmean(:,:,:)
xiuqcensvar = fmb1cens->iuqcensvari(:,:,:)
xivqcensavg = fmb1cens->ivqcensmean(:,:,:)
xivqcensvar = fmb1cens->ivqcensvari(:,:,:)
yiuqavg_ = dim_avg_n(fmb2->iuq(:,:,:),0)
yiuqvar_ = dim_variance_n(fmb2->iuq(:,:,:),0)
yivqavg_ = dim_avg_n(fmb2->ivq(:,:,:),0)
yivqvar_ = dim_variance_n(fmb2->ivq(:,:,:),0)
yiuqavg = new((/21, 141, 121/), typeof(yiuqavg_), yiuqavg_@_FillValue)
yiuqvar = new((/21, 141, 121/), typeof(yiuqavg_), yiuqavg_@_FillValue)
yivqavg = new((/21, 141, 121/), typeof(yiuqavg_), yiuqavg_@_FillValue)
yivqvar = new((/21, 141, 121/), typeof(yiuqavg_), yiuqavg_@_FillValue)
printMinMax(xiuqcsavg,0)
print("xiuqcsvar")
printMinMax(xiuqcsvar,0)
printMinMax(xivqcsavg,0)
print("xivqcsvar")
printMinMax(xivqcsvar,0)
printMinMax(xiuqcensavg,0)
print("xiuqcensvar")
printMinMax(xiuqcensvar,0)
printMinMax(xivqcensavg,0)
print("xivqcensvar")
printMinMax(xivqcensvar,0)
print(" ")
do i=0, 20
yiuqavg(0:0,:,:) = (/yiuqavg_/)
yiuqvar(0:0,:,:) = (/yiuqvar_/)
yivqavg(0:0,:,:) = (/yivqavg_/)
yivqvar(0:0,:,:) = (/yivqvar_/)
yiuqavg_ := yiuqavg(0:0,:,:)
yiuqvar_ := yiuqvar(0:0,:,:)
yivqavg_ := yivqavg(0:0,:,:)
yivqvar_ := yivqvar(0:0,:,:)
yiuqavg(i,:,:) = yiuqavg_
yiuqvar(i,:,:) = yiuqvar_
yivqavg(i,:,:) = yivqavg_
yivqvar(i,:,:) = yivqvar_
end do
;---{del}.[iuq, ivq] : Vertically Integrated Moisture flux divergence
xvimfdcsavg = fmb1cs->vimfdcsmean(:,:,:)
xvimfdcsvar = fmb1cs->vimfdcsvari(:,:,:)
xvimfdcensavg = fmb1cens->vimfdcensmean(:,:,:)
xvimfdcensvar = fmb1cens->vimfdcensvari(:,:,:)
yvimfdavg_ = dim_avg_n(fmb2->vimfd(:,:,:),0)
yvimfdvar_ = dim_variance_n(fmb2->vimfd(:,:,:),0)
printMinMax(xvimfdcsavg,0)
printMinMax(xvimfdcsvar,0)
printMinMax(xvimfdcensavg,0)
printMinMax(xvimfdcensvar,0)
printMinMax(yvimfdavg_,0)
printMinMax(yvimfdvar_,0)
yvimfdavg = new((/21, 141, 121/), typeof(yvimfdavg_), yvimfdavg_@_FillValue)
yvimfdvar = new((/21, 141, 121/), typeof(yvimfdavg_), yvimfdavg_@_FillValue)
;printVarSummary(yvimfdavg_)
;printVarSummary(yvimfdavg)
do i=0, 20
yvimfdavg(0:0,:,:) = (/yvimfdavg_/)
yvimfdvar(0:0,:,:) = (/yvimfdvar_/)
yvimfdavg_ := yvimfdavg(0:0,:,:)
yvimfdvar_ := yvimfdvar(0:0,:,:)
yvimfdavg(i,:,:) = yvimfdavg_
yvimfdvar(i,:,:) = yvimfdvar_
end do
;---Calculate significance
;--iuq_ivq
print("SIGNIF IUQ_IVQ")
iuqcs = signif(xiuqcsavg,xiuqcsvar,xncs,yiuqavg,yiuqvar,yn)
ivqcs = signif(xivqcsavg,xivqcsvar,xncs,yivqavg,yivqvar,yn)
iuqcens = signif(xiuqcensavg,xiuqcensvar,xncens,yiuqavg,yiuqvar,yn)
ivqcens = signif(xivqcensavg,xivqcensvar,xncens,yivqavg,yivqvar,yn)
;--{del}.[iuq, ivq]
print("SIGNIF VIMFD")
vimfdcs = signif(xvimfdcsavg,xvimfdcsvar,xncs,yvimfdavg,yvimfdvar,yn)
vimfdcens = signif(xvimfdcensavg,xvimfdcensvar,xncens,yvimfdavg,yvimfdvar,yn)
;printVarSummary(iuqcs[0])
;printVarSummary(iuqcs[1])
;printVarSummary(iuqcs[2])
;printVarSummary(ivqcs[0])
;printVarSummary(ivqcs[1])
;printVarSummary(ivqcs[2])
;===========================================================================================;
; Write NetCDF
;===========================================================================================;
diro = "./"
filo = "moisture_transport.nc"
ptho = diro+filo
system("/bin/rm -f "+ptho)
ncdf = addfile(ptho,"c")
fAtt = True
fAtt@title = "moisture transport - CS/CENS"
fAtt@source = "ECMWF"
fAtt@Conventions = "None"
fAtt@creation_date = systemfunc("date")
fileattdef(ncdf,fAtt) ; copy file attributes
filedimdef(ncdf,"timelag",-1,True) ; make time an UNLIMITED dimension
ncdf->iuqcsmean = iuqcs[0]
ncdf->iuqcsdiff = iuqcs[1]
ncdf->iuqcspval = iuqcs[2]
ncdf->iuqcensmean = iuqcens[0]
ncdf->iuqcensdiff = iuqcens[1]
ncdf->iuqcenspval = iuqcens[2]
ncdf->ivqcsmean = ivqcs[0]
ncdf->ivqcsdiff = ivqcs[1]
ncdf->ivqcspval = ivqcs[2]
ncdf->ivqcensmean = ivqcens[0]
ncdf->ivqcensdiff = ivqcens[1]
ncdf->ivqcenspval = ivqcens[2]
ncdf->vimfdcsmean = vimfdcs[0]
ncdf->vimfdcsdiff = vimfdcs[1]
ncdf->vimfdcspval = vimfdcs[2]
ncdf->vimfdcensmean = vimfdcens[0]
ncdf->vimfdcensdiff = vimfdcens[1]
ncdf->vimfdcenspval = vimfdcens[2]
end
Script diatas menghasilkan output file berformat *.netcdf
yang nantinya divisualisasikan menggunakan GrADS untuk diinterpretasikan hasil dari uji signifikansinya. Supaya tidak terlalu panjang, kita akan lanjutkan proses visualisasi dan interpretasi di postingan berikut Visualisasi Uji Signifikansi Statistik Menggunakan GrADS.
Notes
Kata parameter digunakan untuk menyatakan properti sebenarnya dari suatu populasi, sedangkan statistik didasarkan pada properti suatu sampel yang diambil secara acak dari suatu populasi. ↩
Wilks, D., 2019, Frequentist Statistical Inference, in Statistical Methods in the Atmospheric Sciences, Elsevier Ltd, Amsterdam. ↩ ↩2
https://www.ncl.ucar.edu/Document/Functions/Built-in/ttest.shtml ↩
Comments powered by Disqus.