# Hypothesis Tests for Means and Proportions

#### Leslie Hendrix

#### August, 2020

This tutorial uses the diamonds data from the previous pages. Run the following line of code if you haven’t already called it in.

`sparkly<-read.csv("https://mooredata.weebly.com/uploads/1/6/0/9/16090314/diamonds.csv",strings=T) #loads data directly from website `

# Test for Means

The t.test() function in R carries out a hypothesis test as well as a confidence interval for 1 mean or the difference in 2 means.

## Confidence Interval for One Mean

To get a confidence interval for mean price of diamonds:

`t.test(sparkly$price)`

```
##
## One Sample t-test
##
## data: sparkly$price
## t = 228.95, df = 53939, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 3899.132 3966.467
## sample estimates:
## mean of x
## 3932.8
```

Notice the default is a 95% interval. It’s easy to change the confidence level using the conf.level argument.

`t.test(sparkly$price,conf.level=0.99) #a 99% interval`

```
##
## One Sample t-test
##
## data: sparkly$price
## t = 228.95, df = 53939, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 99 percent confidence interval:
## 3888.552 3977.047
## sample estimates:
## mean of x
## 3932.8
```

## Hypothesis Test for One Mean

Notice the t.test() function also gave the results for a hypothesis test, with the default of a non-directional alternative hypothesis.

Take a quick look at the arguments of the function:

t.test(x, y = NULL, alternative = c(“two.sided”, “less”, “greater”), mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95, …)

- The mu= statement indicates the value for your null hypothesis. The default value is 0.

- The default alternative hypothesis is alternative=“two.sided”. To get a directional alternative, use alternative=“greater” or alternative=“less”.

If we wanted to test for evidence that mean diamond price for all diamonds is less than $4,000.00 use the following:

`t.test(sparkly$price,alternative="less",mu=4000) `

```
##
## One Sample t-test
##
## data: sparkly$price
## t = -3.9121, df = 53939, p-value = 4.58e-05
## alternative hypothesis: true mean is less than 4000
## 95 percent confidence interval:
## -Inf 3961.054
## sample estimates:
## mean of x
## 3932.8
```

Notice that the output confirms we tested the alternative that mean price is less than $4,000.00.

## Difference in Means: Independent Samples

The t.test() function can take 2 samples rather than 1. If we want to test whether the mean price for premium diamonds - mean price for Very Good diamonds is less than $1,000.00, that is the alternative mu_p - mu_vg < 1000, simply insert the 2 datasets as the first 2 entries of the t.test() function and change the alternative and null hypothesized value arguments to match our hytpohesis.

```
premPrice<-sparkly$price[sparkly$cut=="Premium"]
veryGoodPrice<-sparkly$price[sparkly$cut=="Very Good"]
t.test(premPrice,veryGoodPrice,alternative="less",mu=1000)
```

```
##
## Welch Two Sample t-test
##
## data: premPrice and veryGoodPrice
## t = -7.7163, df = 25844, p-value = 6.203e-15
## alternative hypothesis: true difference in means is less than 1000
## 95 percent confidence interval:
## -Inf 687.2347
## sample estimates:
## mean of x mean of y
## 4584.258 3981.760
```

The p-value returned is very tiny, so there is overwhelming evidence (P < 0.001) to conclude the alternative. When assuming the populations variances are equal, use the var.equal=TRUE argument.

## Mean Difference: Paired t-test

If your data is paired, use the t.test() function with paired=TRUE argument, or subtract the 2 datasets and do a one sample t-test on the differences.

## Normal QQplots

```
qqnorm(sparkly$price)
qqline(sparkly$price) #adds a line if you want it
```

Wow, that QQplot is not linear. The S-shape shows the right skew in the price distribution. Thank goodness for the CLT!

To demonstrate the CLT, we can pretend our price column (which is highly right-skewed) is the population, take a bunch of samples and graph the resulting sample means. The CLT says that as long as our sample size is big enough, the distribution of sample means should be a normal distribution.

```
n<-100
reps<-1000
sampMat<-matrix(rep(0,n*reps),ncol=reps)
for(i in 1:reps){
sampMat[,i]<-sample(sparkly$price,n)
}
par(mfrow=c(1,2)) #setting grpahics window to have 1 row and 2 columns to hold 2 plots
hist(sparkly$price,main="Price Distribution")
hist(apply(sampMat,2,mean),main="Distribution of Sample Means")
```

`par(mfrow=c(1,1)) #resetting the graphics window to have 1 row and 1 column`

# Confidence Interval and Test for p (population proportion)

## Confidence Interval and Hypothesis Test for One Proportion

The confidence interval and hypothesis test you have probably learned in a previous textbook is based on the Wald method and probably returned a *Z* test statistic. That method likely used the sample proportion in the standard error calculation. The prop.test() function in R uses the null hypothesized value of p, which is 0.5 by default. To change this, use the p= argument. Also, it returns a Chi-square test statistic, which is just the square of the *Z* statistic you will get if you hand calculate (p_hat - p_not)/SQRT(p_not*(1-p_not)/n).

We’ll use prop.test(Y,n,correct=FALSE) with correct=FALSE so that the algorithm won’t use continuity correction.

```
numPrem <- length(sparkly$cut[sparkly$cut=="Premium"]) #number of premium diamonds
n <- length(sparkly$cut) #total number of diamonds
prop.test(numPrem, n, correct=FALSE) #tests alternative the true proportion is different from 0.5
```

```
##
## 1-sample proportions test without continuity correction
##
## data: numPrem out of n, null probability 0.5
## X-squared = 12880, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.2520090 0.2593717
## sample estimates:
## p
## 0.255673
```

`prop.test(numPrem, n, correct=FALSE, p=0.25, alternative="greater") #tests true proportion is greater than 0.25`

```
##
## 1-sample proportions test without continuity correction
##
## data: numPrem out of n, null probability 0.25
## X-squared = 9.2583, df = 1, p-value = 0.001172
## alternative hypothesis: true p is greater than 0.25
## 95 percent confidence interval:
## 0.2525957 1.0000000
## sample estimates:
## p
## 0.255673
```

## Confidence Interval and hypothesis test for the difference in 2 population proportions

We’ll use prop.test() again. Suppose we have 2 different offers of a discount. 75 customers had offer 1 and 44 took it, while 80 customers had offer 2 and 50 took it.

`prop.test(c(44,50),c(75,80),correct=FALSE) #test whether p1 is different from p2`

```
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(44, 50) out of c(75, 80)
## X-squared = 0.23833, df = 1, p-value = 0.6254
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1921983 0.1155316
## sample estimates:
## prop 1 prop 2
## 0.5866667 0.6250000
```

## Chi-square Test

```
mat<-matrix(c(44,31,50,30),nrow=2) #creating a matrix with 1st column offer 1 (take/don't take) and 2nd column offer 2
prop.test(c(44,50),c(75,80),correct=FALSE) #previous example
```

```
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(44, 50) out of c(75, 80)
## X-squared = 0.23833, df = 1, p-value = 0.6254
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1921983 0.1155316
## sample estimates:
## prop 1 prop 2
## 0.5866667 0.6250000
```

`chisq.test(mat,correct=FALSE) #does the same test, but does not return a confidence interval`

```
##
## Pearson's Chi-squared test
##
## data: mat
## X-squared = 0.23833, df = 1, p-value = 0.6254
```

# Tips

- Be careful: When using t.test() for a one sided test (alternative hypothesis is “greater” or “less”), the function returns a different type of confidence interval than what we learned.
- If you need a confidence interval, do the test again with the default two sided alternative hypothesis.

- The Chi-square test generalizes to more than 2 groups. As a consequence:
- The chisq.test() function does not allow for directional alternatives.
- The chisq.test() function will not return a confidence itnerval.