{"id":3470,"date":"2026-03-01T20:31:50","date_gmt":"2026-03-01T19:31:50","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=3470"},"modified":"2026-07-12T20:16:08","modified_gmt":"2026-07-12T19:16:08","slug":"hypothesis-testing-a-step-by-step-guide","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/en\/hypothesis-testing-a-step-by-step-guide\/","title":{"rendered":"Hypothesis testing: how to tell if a result is due to chance"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">We are running an A\/B test on two title tags for a product page. Variant A gets 127 clicks out of 4,000 impressions (CTR 3.17%), variant B gets 152 clicks out of 4,000 impressions (CTR 3.80%). A difference of 25 clicks. Is this a real lift, or just random noise?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questions like this \u2014 <em>is this difference due to chance?<\/em> \u2014 arise constantly in any data-driven activity. <strong>Hypothesis testing<\/strong> is the statistical procedure that allows us to answer with a methodical approach, distinguishing results that reflect a real phenomenon from those that are merely sampling noise.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What we&#8217;ll cover<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#what-is-a-hypothesis-test\">What is a hypothesis test<\/a><\/li><li><a href=\"#null-and-alternative-hypotheses\">Null and alternative hypotheses<\/a><\/li><li><a href=\"#type-i-and-type-ii-errors\">Type I and Type II errors<\/a><\/li><li><a href=\"#one-tailed-vs-two-tailed-tests\">One-tailed vs two-tailed tests<\/a><\/li><li><a href=\"#the-five-step-procedure\">The five-step procedure<\/a><\/li><li><a href=\"#an-seo-example-ab-test-on-ctr\">An SEO example: A\/B test on CTR<\/a><\/li><li><a href=\"#the-p-value\">The p-value<\/a><\/li><li><a href=\"#statistical-power\">Statistical power<\/a><\/li><li><a href=\"#sample-size\">Sample size<\/a><\/li><li><a href=\"#try-it-yourself\">Try it yourself<\/a><\/li><li><a href=\"#further-reading\">Further reading<\/a><\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-a-hypothesis-test\">What is a hypothesis test<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In everyday life we often have to make decisions based on incomplete information. A new title tag generates a few more clicks: is the title actually better, or was it simply a lucky week?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hypothesis testing<\/strong> is a statistical procedure that allows us to pose a question based on sample information, to reach a data-driven decision.<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>In clearer and more direct terms: is my experimental finding due to chance? <strong>Hypothesis testing is a statistical procedure for verifying whether chance is a plausible explanation of an experimental result.<\/strong><\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The difference between <strong>probability<\/strong> and <strong>inference<\/strong> is the starting point:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>If we <strong>know the population parameters<\/strong> and want to know the probability of obtaining a particular result, we are in the realm of <em>probability<\/em>.<\/li><li>If from a <strong>sample<\/strong> we try to infer the population values, we are in the territory of <em>inference<\/em>. Hypothesis testing is the main tool of statistical inference.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"null-and-alternative-hypotheses\">Null and alternative hypotheses<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In hypothesis testing we always weigh two hypotheses. The <em>status quo<\/em> is called the <strong>null hypothesis<\/strong>, denoted H\u2080. It is the hypothesis that there is no effect, no difference \u2014 that everything is due to chance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What we do is test the null hypothesis against an <strong>alternative hypothesis<\/strong>, denoted H\u2090 \u2014 which is, in general, the hypothesis we believe in or want to prove.<\/p>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><em>N.B. In many experimental contexts the alternative hypothesis represents the effect we are trying to verify.<\/em><\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We then choose a <strong>significance level<\/strong> or <strong>alpha level<\/strong>, denoted \u03b1. The common standard is \u03b1 = 0.05, which corresponds to a <strong>95% confidence level<\/strong>. Based on the alpha level we determine one or more <strong>critical regions<\/strong>: the areas of the sampling distribution where, if our test statistic falls, we reject the null hypothesis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If the value we obtain falls in a critical region, we have sufficient statistical evidence to reject H\u2080 in favour of H\u2081.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"type-i-and-type-ii-errors\">Type I and Type II errors<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The test result, of course, does not constitute a certainty. Two types of error are possible:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Type I error<\/strong>: rejecting the null hypothesis when it is actually true. The probability of this error is exactly \u03b1, the significance level we set.<\/li><li><strong>Type II error<\/strong>: failing to reject the null hypothesis when it is actually false. The probability of this error is denoted \u03b2, and it depends on several factors (sample size, true effect size, \u03b1 level).<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The clearest way to visualise the two types of error is this table:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" class=\"wp-image-3142\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/03\/typeItypeIIerrors-1024x412.png\" alt=\"Type I and Type II errors\" srcset=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/03\/typeItypeIIerrors-1024x412.png 1024w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/03\/typeItypeIIerrors-300x121.png 300w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/03\/typeItypeIIerrors-1536x618.png 1536w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/03\/typeItypeIIerrors-1200x483.png 1200w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2024\/03\/typeItypeIIerrors.png 1549w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Type I and Type II errors<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Calculating the probability of a Type II error is not as straightforward as for a Type I error. We will tackle it shortly, when we discuss statistical power.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"one-tailed-vs-two-tailed-tests\">One-tailed vs two-tailed tests<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The test can be <strong>one-tailed<\/strong>, when the alternative hypothesis is directional (e.g. &#8220;the mean is greater than&#8221; or &#8220;the mean is less than&#8221;), or <strong>two-tailed<\/strong>, when the alternative hypothesis is simply &#8220;different from&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/test-regioni-critiche-en-1.png\" alt=\"Critical regions: one-tailed and two-tailed\"\/><figcaption class=\"wp-element-caption\">Critical regions: one-tailed and two-tailed<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In a one-tailed test, the entire critical region is concentrated on one side of the distribution. In a two-tailed test, the critical region is split into two symmetric tails, each with area \u03b1\/2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The choice between one-tailed and two-tailed must be made <strong>before<\/strong> collecting data, based on the research question. If we only want to know whether B is <em>different<\/em> from A, we use two tails. If we want to know whether B is <em>better<\/em> than A, we use a one-tailed (right) test.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-five-step-procedure\">The five-step procedure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The operational sequence of hypothesis testing can be summarised in five steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>State the null hypothesis H\u2080 and the alternative hypothesis H\u2090.<\/strong><\/li><li><strong>Set the significance level \u03b1<\/strong> (usually 0.05).<\/li><li><strong>Choose the appropriate distribution<\/strong>: normal (z) or Student&#8217;s t.<\/li><li><strong>Collect the data and compute the test statistic.<\/strong><\/li><li><strong>Draw conclusions<\/strong>: reject or fail to reject H\u2080.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The choice between normal and t distribution depends on:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Do we know the population standard deviation \u03c3? If yes, use the normal.<\/li><li>Is the sample large enough (n &gt; 30)? If yes, we can use the normal even without \u03c3 (thanks to the <a href=\"https:\/\/www.gironi.it\/blog\/en\/central-limit-theorem\/\">central limit theorem<\/a>).<\/li><li>If the answer to both is no, use the <strong>Student&#8217;s t distribution<\/strong>, which we discuss in the <a href=\"https:\/\/www.gironi.it\/blog\/en\/t-distribution-and-hypothesis-testing\/\">dedicated article<\/a>.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>n.b. as the sample grows, the t distribution approaches the normal. For n &gt; 30 the difference is negligible.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"an-seo-example-ab-test-on-ctr\">An SEO example: A\/B test on CTR<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s return to the opening example. We ran an A\/B test on two title tags:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Variant A<\/strong>: 127 clicks out of 4,000 impressions \u2192 CTR 3.17%<\/li><li><strong>Variant B<\/strong>: 152 clicks out of 4,000 impressions \u2192 CTR 3.80%<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The difference is 25 clicks, or 0.63 percentage points. Is this a real effect or noise?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s follow the five steps.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Hypotheses<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>H\u2080: the CTR of B equals the CTR of A (difference = 0)<\/li><li>H\u2090: the CTR of B is greater than the CTR of A (difference &gt; 0, one-tailed test)<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Significance level<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We set \u03b1 = 0.05 (the standard level).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Distribution<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For proportions, the sampling distribution of the difference under H\u2080 is approximately normal (the CLT guarantees this with n = 4,000). We use the <strong>z-test for two proportions<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Computation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Data\nn &lt;- 4000\nclicks_A &lt;- 127; clicks_B &lt;- 152\n\n# Pooled proportion under H0\np0 &lt;- (clicks_A + clicks_B) \/ (2 * n)       # 0.034875\n\n# Standard error of the difference\nse &lt;- sqrt(p0 * (1 - p0) * (1\/n + 1\/n))     # ~0.00410\n\n# Observed z-score\nz_obs &lt;- (clicks_B\/n - clicks_A\/n) \/ se     # ~2.22\nz_obs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[1] 2.224<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The observed z value is 2.22 \u2014 the difference between the two CTRs lies more than two standard deviations away from the value expected under H\u2080 (zero). The figure shows the position of the observed value relative to the sampling distribution:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/test-pvalue-en-1.png\" alt=\"Z-test for CTR difference\"\/><figcaption class=\"wp-element-caption\">Z-test for CTR difference<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The red area to the right of the dashed blue line is the <strong>p-value<\/strong>: the probability of observing a difference equal to or greater than the one obtained, assuming H\u2080 is true.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Conclusion<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The p-value is approximately 0.013, below the \u03b1 = 0.05 threshold. <strong>We reject the null hypothesis<\/strong>: the difference is statistically significant. Variant B produces a higher CTR than variant A, and chance is not a plausible explanation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Compute the p-value (one-tailed right test)\np_val &lt;- 1 - pnorm(z_obs)\np_val<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[1] 0.0131<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We can also verify the result with R&#8217;s built-in function:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prop.test(c(127, 152), c(4000, 4000), alternative = \"greater\", correct = FALSE)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-p-value\">The p-value<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>p-value<\/strong> is the probability of obtaining a result equal to or more extreme than the one observed, assuming the null hypothesis is true. A small p-value indicates that the observed result is unlikely under H\u2080, leading us to reject it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Critical z-values for common significance levels:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Level \u03b1<\/th><th>One-tailed<\/th><th>Two-tailed<\/th><\/tr><\/thead><tbody><tr><td>0.05<\/td><td>\u00b11.645<\/td><td>\u00b11.960<\/td><\/tr><tr><td>0.01<\/td><td>\u00b12.326<\/td><td>\u00b12.576<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>A word of caution: the p-value is not the probability that H\u2080 is true. It is the probability of the data <em>given<\/em> H\u2080, not the probability of H\u2080 <em>given<\/em> the data. The difference is subtle but fundamental \u2014 and it is the same distinction that separates frequentist inference from Bayesian inference.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group has-background\" style=\"background-color:#f5f7f9;margin-top:2.5rem;margin-bottom:2.5rem;padding-top:1.5rem;padding-right:1.5rem;padding-bottom:1.5rem;padding-left:1.5rem\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>Hypothesis testing does not prove H\u2080 true or false.<\/strong> It only measures how compatible the observed data are with H\u2080. A small p-value tells us the data are unlikely under H\u2080 \u2014 not that H\u2080 itself is unlikely. This epistemological distinction may sound like a statistician&#8217;s quibble, but it is precisely where scientific inference separates from taking wishes for reality.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"statistical-power\">Statistical power<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In hypothesis testing, <strong>power<\/strong> is the probability of correctly rejecting the null hypothesis when it is false. In formula: power = 1 \u2212 \u03b2, where \u03b2 is the probability of a Type II error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Power depends on four factors:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Effect size<\/strong>: the larger the real effect, the easier to detect<\/li><li><strong>Sample size<\/strong>: more data means higher power<\/li><li><strong>Significance level \u03b1<\/strong>: lowering \u03b1 reduces power<\/li><li><strong>Data variability<\/strong>: less variability means higher power<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s return to our CTR example. Our test with n = 4,000 per variant detected a difference of about 0.63 percentage points. But what if the real effect were smaller \u2014 say, 0.3 percentage points? How much power would we have?<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/test-potenza-en-1.png\" alt=\"Power curve\"\/><figcaption class=\"wp-element-caption\">Power curve<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The curve shows power as the alternative proportion (\u03bc\u2090) varies. With n = 4,000 and \u03b1 = 0.05, to detect a difference corresponding to \u03bc\u2090 = 4.5% (a 1.5 percentage point lift), power is about 76%. For our observed effect (3.80%, about 0.8 points above 3%), power is around 50% \u2014 roughly a coin flip.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To increase power, we need a larger sample:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Power analysis for different sample sizes\nlibrary(pwr)\npwr.2p.test(h = ES.h(0.038, 0.0317),   # effect size for proportions\n            n = 4000, sig.level = 0.05, alternative = \"greater\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>     Difference of proportion power calculation\n\n              h = 0.0497\n              n = 4000\n      sig.level = 0.05\n          power = 0.5346\n    alternative = greater<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Our test&#8217;s power is about 53%. If the real effect is this size, we have nearly a 1-in-2 chance of missing it. To reach 80% power (the commonly accepted standard), we would need to almost triple the sample.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See the full article on <a href=\"https:\/\/www.gironi.it\/blog\/en\/effect-size-and-power-analysis\/\">effect size and power analysis<\/a> for a comprehensive treatment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sample-size\">Sample size<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before launching a test, we can determine the required sample size by specifying:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>The expected value under H\u2080<\/li><li>The alternative value we consider important<\/li><li>The significance level \u03b1<\/li><li>The desired power (usually 80%)<\/li><li>Data variability<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">In R, using <code>pwr<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># How many impressions to detect a lift from 3.2% to 3.8% at 80% power?\npwr.2p.test(h = ES.h(0.038, 0.032),\n            power = 0.80, sig.level = 0.05,\n            alternative = \"greater\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>     Difference of proportion power calculation\n\n              h = 0.0336\n              n = 13749.56\n      sig.level = 0.05\n          power = 0.80\n    alternative = greater<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We need about <strong>13,750 impressions per variant<\/strong> to have 80% power to detect a 0.6 percentage point CTR difference. This is exactly the kind of analysis that should be done <strong>before<\/strong> launching a test, not after seeing the results. You can also use our interactive <a href=\"https:\/\/www.gironi.it\/blog\/en\/ab-test-sample-size-calculator\/\">sample size calculator<\/a> for these evaluations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"try-it-yourself\">Try it yourself<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An A\/B test on a landing page collected the following data:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Version A<\/strong>: 84 conversions out of 3,200 sessions (rate 2.62%)<\/li><li><strong>Version B<\/strong>: 106 conversions out of 3,200 sessions (rate 3.31%)<\/li><\/ul>\n\n\n\n<ol class=\"wp-block-list\"><li>Formulate the null and alternative hypotheses for a one-tailed (right) test.<\/li><li>Compute the z-score and p-value in R (hint: <code>prop.test<\/code>).<\/li><li>Is the difference statistically significant at \u03b1 = 0.05?<\/li><li>With 3,200 sessions per variant, what power does the test have to detect a 0.7 percentage point effect? (hint: <code>pwr.2p.test<\/code>)<\/li><li>How many sessions would be needed for 80% power?<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"further-reading\">Further reading<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For a rigorous and comprehensive treatment of hypothesis testing, with exercises and all formal steps, the standard reference is <a href=\"https:\/\/www.amazon.it\/dp\/129241339X?tag=consulenzeinf-21&amp;ascsubtag=hypothesis-testing\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Statistics for Business and Economics<\/em><\/a> by Newbold, Carlson and Thorne. For a hands-on, application-focused approach directly relevant to online experiments, see <a href=\"https:\/\/www.amazon.it\/dp\/1108724264?tag=consulenzeinf-21&amp;ascsubtag=hypothesis-testing\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Trustworthy Online Controlled Experiments<\/em><\/a> by Kohavi, Tang and Xu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article is part of the <a href=\"https:\/\/www.gironi.it\/blog\/en\/statistical-inference\/\">\u00abStatistical Inference\u00bb<\/a> path, the curated guide to articles on tests, confidence intervals, and data-driven decision making.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are running an A\/B test on two title tags for a product page. Variant A gets 127 clicks out of 4,000 impressions (CTR 3.17%), variant B gets 152 clicks out of 4,000 impressions (CTR 3.80%). A difference of 25 clicks. Is this a real lift, or just random noise? Questions like this \u2014 is &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/en\/hypothesis-testing-a-step-by-step-guide\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Hypothesis testing: how to tell if a result is due to chance&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[161],"tags":[],"class_list":["post-3470","post","type-post","status-publish","format-standard","hentry","category-statistics"],"lang":"en","translations":{"en":3470,"it":1190},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"Paolo Gironi","author_link":"https:\/\/www.gironi.it\/blog\/author\/autore-articoli\/"},"uagb_comment_info":2,"uagb_excerpt":"We are running an A\/B test on two title tags for a product page. Variant A gets 127 clicks out of 4,000 impressions (CTR 3.17%), variant B gets 152 clicks out of 4,000 impressions (CTR 3.80%). A difference of 25 clicks. Is this a real lift, or just random noise? Questions like this \u2014 is&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=3470"}],"version-history":[{"count":5,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3470\/revisions"}],"predecessor-version":[{"id":4176,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3470\/revisions\/4176"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=3470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=3470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=3470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}