From eebdad79c2ba2d522932409f2709d072c2726e46 Mon Sep 17 00:00:00 2001 From: dimpz4295 Date: Sun, 5 Jul 2026 12:39:47 -0400 Subject: [PATCH 1/3] Update 5 files for CAMIS Analysis --- Comp/r-sas_ttest_1Sample.qmd | 27 +++--- Comp/r-sas_ttest_2Sample.qmd | 159 +++++++++++++++++++++++++++++------ Comp/r-sas_ttest_Paired.qmd | 31 ++++--- R/ttest_2Sample.qmd | 31 +++++-- SAS/ttest_2Sample.qmd | 39 +++++++-- 5 files changed, 220 insertions(+), 67 deletions(-) diff --git a/Comp/r-sas_ttest_1Sample.qmd b/Comp/r-sas_ttest_1Sample.qmd index caad67cd2..58986bb99 100644 --- a/Comp/r-sas_ttest_1Sample.qmd +++ b/Comp/r-sas_ttest_1Sample.qmd @@ -46,7 +46,7 @@ library(procs) # proc_ttest() ## Data -### Lognormal One Sample t-test +### Normal One Sample t-test and Lognormal One Sample t-test Sample Data We use a simulated sample data containing one numeric variable, `score`. The same data are used for the R and SAS examples. @@ -104,11 +104,14 @@ The following table shows the types of One Sample t-test analysis, the capabilit Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST`: -| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | -|--------------------|-----------|--------------|------------|-------|-------| -| Degrees of Freedom | 29 | 29 | 29 | Yes | | -| t value | 2.364306 | 2.364306 | 2.364306 | Yes | | -| p value | 0.0249741 | 0.0249741 | 0.0249741 | Yes | | +| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | +|--------------------|----------|--------------|------------|-------|-------| +| Degrees of Freedom | 43 | 43 | 43 | Yes | | +| t value | 2.8727 | 2.8727 | 2.87 | Yes | | +| p value | 0.006297 | 0.006297 | 0.0063 | Yes | | +| Mean | 34.8636 | 34.8636 | 34.8636 | Yes | | +| Lower 95% CL Mean | 31.44930 | 31.44930 | 31.44930 | Yes | | +| Upper 95% CL Mean | 38.27797 | 38.27797 | 38.2780 | Yes | | ### Lognormal Data {#lognormal} @@ -118,12 +121,12 @@ Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS | Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | |------------|------------|------------|------------|------------|------------| -| Degrees of Freedom | 29 | 29 | 29 | Yes | Calculated on log-transformed data | -| t value | 1.351675 | 1.351675 | 1.351675 | Yes | Calculated on log-transformed data | -| p value | 0.1869289 | 0.1869289 | 0.1869289 | Yes | Calculated on log-transformed data | -| Geometric Mean | 32.91447 | 32.91447 | 32.91447 | Yes | Back-transformed mean | -| Lower 95% CL Mean | 28.60623 | 28.60622 | 28.60623 | Yes | Back-transformed lower confidence limit | -| Upper 95% CL Mean | 37.87155 | 37.87155 | 37.87155 | Yes | Back-transformed upper confidence limit | +| Degrees of Freedom | 43 | 43 | 43 | Yes | Calculated on log-transformed data | +| t value | 1.6373 | 1.6373 | 1.64 | Yes | Calculated on log-transformed data | +| p value | 0.1089 | 0.1089 | 0.1089 | Yes | Calculated on log-transformed data | +| Geometric Mean | 32.84336 | 32.84336 | 32.8434 | Yes | Back-transformed mean | +| Lower 95% CL Mean | 29.3770 | 29.3770 | 29.3770 | Yes | Back-transformed lower confidence limit | +| Upper 95% CL Mean | 36.7187 | 36.7187 | 36.7187 | Yes | Back-transformed upper confidence limit | # Summary and Recommendation diff --git a/Comp/r-sas_ttest_2Sample.qmd b/Comp/r-sas_ttest_2Sample.qmd index f64d2c364..12ac3777f 100644 --- a/Comp/r-sas_ttest_2Sample.qmd +++ b/Comp/r-sas_ttest_2Sample.qmd @@ -1,5 +1,5 @@ --- -title: "R vs SAS Two Sample T-Test" +title: "R vs SAS Two-Sample T-Test" --- ```{r} @@ -8,14 +8,106 @@ title: "R vs SAS Two Sample T-Test" knitr::opts_chunk$set(echo = TRUE) ``` +# Summary + +## Goal + +The goal of this comparison is to evaluate whether two-sample t-tests produce equivalent results in R and SAS for both normal and lognormal data. For normal data, results from `stats::t.test()`, `procs::proc_ttest()`, and SAS `PROC TTEST` are compared directly. For lognormal data, results from a log-transformation / back-transformation approach in R are compared with SAS `PROC TTEST` using the `DIST=LOGNORMAL` option. + +## Scope + +::::::: columns +:::: {.column width="45%"} +::: {.callout-note appearance="minimal" collapse="false"} +## Methodologies + +Two-sample t-test + +Lognormal two-sample t-test +::: +:::: + +:::: {.column width="55%"} +::: {.callout-note appearance="minimal" collapse="false"} +## Technical implementations + +SAS: `PROC TTEST` with and without the `DIST=LOGNORMAL` option + +R: `stats::t.test()` and log-transformation / back-transformation approach for lognormal data +::: +:::: +::::::: + +# Prerequisites + +## R packages + +```{r} +#| output: false +#| message: false +library(tibble) # for example data +library(stats) # t.test() +library(procs) # proc_ttest() +``` + +## Data + +### Normal two-sample t-test and Lognormal two-sample t-test Sample Data + +We use a simulated two-sample dataset containing weight gain measurements for two treatment groups. The same data are used in the R and SAS examples to compare the log-transformation / back-transformation approach in R with SAS `PROC TTEST` using the `DIST=LOGNORMAL` option. + +R: + +```{r} +d1 <- tibble::tribble( + ~trt_grp, ~WtGain, + "placebo", 94, "placebo", 12, "placebo", 26, "placebo", 89, + "placebo", 88, "placebo", 96, "placebo", 85, "placebo", 130, + "placebo", 75, "placebo", 54, "placebo", 112, "placebo", 69, + "placebo", 104, "placebo", 95, "placebo", 53, "placebo", 21, + "treatment", 45, "treatment", 62, "treatment", 96, "treatment", 128, + "treatment", 120, "treatment", 99, "treatment", 28, "treatment", 50, + "treatment", 109, "treatment", 115, "treatment", 39, "treatment", 96, + "treatment", 87, "treatment", 100, "treatment", 76, "treatment", 80 +) +``` + +SAS: + +``` sas +data d1; + length trt_grp $ 9; + input trt_grp $ WtGain @@; + datalines; +placebo 94 placebo 12 placebo 26 placebo 89 +placebo 88 placebo 96 placebo 85 placebo 130 +placebo 75 placebo 54 placebo 112 placebo 69 +placebo 104 placebo 95 placebo 53 placebo 21 +treatment 45 treatment 62 treatment 96 treatment 128 +treatment 120 treatment 99 treatment 28 treatment 50 +treatment 109 treatment 115 treatment 39 treatment 96 +treatment 87 treatment 100 treatment 76 treatment 80 +; + +run; +``` + +```{r} +#| label: setup +#| include: false +knitr::opts_chunk$set(echo = TRUE) +library(procs) +``` + # Two Sample t-test Comparison The following table shows the types of Two Sample t-test analysis, the capabilities of each language, and whether or not the results from each language match. -| Analysis | Supported in R | Supported in SAS | Results Match | Notes | +| Analysis | Supported in R | Supported in SAS | Results Match | Notes | |---------------|---------------|---------------|---------------|---------------| -| Two sample Student's t-test | [Yes](../R/ttest_2Sample.html#baseS) | [Yes](../SAS/ttest_2Sample.html#sas) | [Yes](#student) | In Base R, use `t.test()` function with `paired = FALSE` and `var.equal = TRUE`| -| Two sample Welch's t-test | [Yes](../R/ttest_2Sample.html#baseW) | [Yes](../SAS/ttest_2Sample.html#sas) | [Yes](#welch) | In Base R, use `t.test()` function with `paired = FALSE` and `var.equal = FALSE` | +| Two sample Student's t-test | [Yes](../R/ttest_2Sample.html#baseS) | [Yes](../SAS/ttest_2Sample.html#sas) | [Yes](#student) | In Base R, use `t.test()` function with `paired = FALSE` and `var.equal = TRUE` | +| Two sample Welch's t-test | [Yes](../R/ttest_2Sample.html#baseW) | [Yes](../SAS/ttest_2Sample_W.html#sas) | [Yes](#welch) | In Base R, use `t.test()` function with `paired = FALSE` and `var.equal = FALSE` | +| Two sample Lognormal t-test | [Yes](../R/ttest_2Sample.html#baseWlog) | [Yes](../SAS/ttest_2Sample_lognormal.html#sas) | [Yes](#lognormal) | | ## Comparison Results @@ -23,43 +115,54 @@ The following table shows the types of Two Sample t-test analysis, the capabilit Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST`: -| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | -|--------------------|-----------|--------------|------------|-------|-------| -| Degrees of Freedom | 30 | 30 | 30 | Yes | | -| t value | -0.6969002 | -0.6969002 | -0.6969002 | Yes | | -| p value | 0.4912306 | 0.4912306 | 0.4912306 | Yes | | - +| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | +|------------|------------|------------|------------|------------|------------| +| Degrees of Freedom | 30 | 30 | 30 | Yes | | +| t value | -0.6969 | -0.70 | -0.70 | Yes | | +| p value | 0.4912 | 0.4912 | 0.4912 | Yes | | +| Mean Difference | -7.9375 | -7.9375 | -7.9375 | Yes | | +| Lower 95% CL Mean Difference | -31.1984 | -31.1984 | -31.1984 | Yes | | +| Upper 95% CL Mean Difference | 15.3234 | 15.3234 | 15.3234 | Yes | | ### Welch's T-Test {#welch} In the Welch T-test the variance and effective degrees of freedom are calculated using Satterthwaite method. -Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST`for two example: +Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST` for this example. -Example with fairly equal variances: -| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | -|--------------------|-----------|--------------|------------|-------|-------| -| Degrees of Freedom | 29.69359 | 29.69359 | 29.69359 | Yes | | -| t value | -0.6969002 | -0.6969002 | -0.6969002 | Yes | | -| p value | 0.4912856 | 0.4912856 | 0.4912856 | Yes | | +Example with unequal variances: +| Statistic | t.test() | proc_ttest() | PROC TTEST() | Match | Notes | +|------------|------------|------------|------------|------------|------------| +| Degrees of Freedom | 29.694 | 29.694 | 29.694 | Yes | | +| t value | -0.6969 | -0.70 | -0.70 | Yes | | +| p value | 0.4913 | 0.4913 | 0.4913 | Yes | | +| Mean Difference | -7.9375 | -7.9375 | -7.9375 | Yes | | +| Lower 95% CL Mean Difference | -31.2085 | -31.2085 | -31.2085 | Yes | | +| Upper 95% CL Mean Difference | 15.3335 | 15.3335 | 15.3335 | Yes | | -Example with unequal variances: -| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | -|--------------------|-----------|--------------|------------|-------|-------| -| Degrees of Freedom | 18.137 | 18.137 | 18.137 | Yes | | -| t value | -1.54 | -1.54 | -1.54 | Yes | | -| p value | 0.1413 | 0.1413 | 0.1413 | Yes | | +### Lognormal Data {#lognormal} + +For lognormal data for two independent groups, a two-sample t-test can be performed in R by applying a natural log transformation to the measurements in each group and conducting the analysis on the log-transformed values. The resulting mean difference and confidence limits can then be exponentiated to obtain a geometric mean ratio and corresponding confidence limits. The table below compares results from `stats::t.test()`, `procs::proc_ttest()`, and SAS `PROC TTEST` with the `DIST=LOGNORMAL` option. + +Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST`: +| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | +|------------|------------|------------|------------|------------|------------| +| Degrees of Freedom | 30 | 30 | 30 | Yes | | +| t value | -0.8763 | -0.88 | -0.88 | Yes | | +| p value | 0.3878 | 0.3878 | 0.3878 | Yes | | +| Geometric Mean Ratio | 0.8381 | 0.8381 | 0.8381 | Yes | Back-transformed mean difference | +| Lower 95% CL Mean Ratio | 0.5553 | 0.5553 | 0.5553 | Yes | Back-transformed lower confidence limit | +| Upper 95% CL Mean Ratio | 1.265 | 1.2649 | 1.2649 | Yes | Back-transformed upper confidence limit | # Summary and Recommendation -For the Student's T-Test, the R two sample `t.test()` and **procs** `proc_ttest()` capabilities are comparable to SAS. -Comparison between SAS and R show identical results for the datasets tried. +For the Student's T-Test, the R two-sample `t.test()` and **procs** `proc_ttest()` capabilities are comparable to SAS. Comparison between SAS and R show identical results for the datasets tried. The **procs** package `proc_ttest()` function is very similar to SAS in the syntax and output produced. The `proc_ttest()` also supports by groups, where `t.test()` does not. -Likewise, for the Welch's T-Test, the R two sample `t.test()` and **procs** `proc_ttest()` capabilities are comparable to SAS. -Comparison between SAS and R show identical results for the datasets tried. +Likewise, for the Welch's T-Test, the R two-sample `t.test()` and **procs** `proc_ttest()` capabilities are comparable to SAS. Comparison between SAS and R show identical results for the datasets tried. +For the lognormal version of the two-sample t-test, equivalent results can be obtained in R by applying a natural log transformation to the measurements in each group, performing the two-sample t-test on the transformed data, and exponentiating the resulting estimates and confidence limits. Comparison with SAS `PROC TTEST` using the `DIST=LOGNORMAL` option showed that the results matched after back-transformation. Therefore, a separate package is not required for this analysis. # References @@ -67,4 +170,4 @@ R `t.test()` documentation: -SAS `PROC TTEST` Two Sample analysis documentation: +SAS `PROC TTEST` Two-Sample analysis documentation: diff --git a/Comp/r-sas_ttest_Paired.qmd b/Comp/r-sas_ttest_Paired.qmd index 9934277c0..4cd8ce9eb 100644 --- a/Comp/r-sas_ttest_Paired.qmd +++ b/Comp/r-sas_ttest_Paired.qmd @@ -46,7 +46,7 @@ library(procs) # proc_ttest() ## Data -### Lognormal One Sample t-test +### Normal Paired t-test and Lognormal Paired t-test Sample Data We use a simulated paired dataset containing systolic blood pressure measurements before and after treatment. The same data are used in the R and SAS examples to compare the log-transformation / back-transformation approach in R with SAS `PROC TTEST` using the `DIST=LOGNORMAL` option. @@ -97,9 +97,9 @@ library(procs) The following table shows the types of Paired t-test analysis, the capabilities of each language, and whether or not the results from each language match. | Analysis | Supported in R | Supported in SAS | Results Match | Notes | -|----|----|----|----|----| +|---------------|---------------|---------------|---------------|---------------| | Paired t-test, normal data | [Yes](../R/ttest_Paired.html#normal) | [Yes](../SAS/ttest_Paired.html#normal) | [Yes](#normal) | In Base R, use `paired = TRUE` on `t.test()` function | -| Paired t-test, lognormal data | [Yes](../R/ttest_Paired.html#lognormal) | [Yes](../SAS/ttest_Paired.html#lognormal) | [NA](#lognormal) | Apply a natural log transformation to both paired measurements, perform the paired t-test on the log-transformed data, and exponentiate the mean difference and the confidence limits. | +| Paired t-test, lognormal data | [Yes](../R/ttest_Paired.html#lognormal) | [Yes](../SAS/ttest_Paired.html#lognormal) | [Yes](#lognormal) | Apply a natural log transformation to both paired measurements, perform the paired t-test on the log-transformed data, and exponentiate the mean difference and the confidence limits. | ## Comparison Results @@ -107,11 +107,14 @@ The following table shows the types of Paired t-test analysis, the capabilities Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST`: -| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | -|--------------------|-----------|--------------|------------|-------|-------| -| Degrees of Freedom | 11 | 11 | 11 | Yes | | -| t value | -1.089648 | -1.089648 | -1.089648 | Yes | | -| p value | 0.2992 | 0.2992 | 0.2992 | Yes | | +| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | +|-----------------|-----------|-----------|-----------|-----------|-----------| +| Degrees of Freedom | 11 | 11 | 11 | Yes | | +| t value | -1.089648 | -1.089648 | -1.09 | Yes | | +| p value | 0.2992 | 0.2992 | 0.2992 | Yes | | +| Mean Difference | -1.8333 | -1.8333 | -1.8333 | Yes | | +| Lower 95% CL Mean Difference | -5.5365 | -5.5365 | -5.5365 | Yes | | +| Upper 95% CL Mean Difference | 1.8698 | 1.8698 | 1.8698 | Yes | | ### Lognormal Data {#lognormal} @@ -120,13 +123,13 @@ For lognormal paired data, a paired t-test can be performed in R by applying a n Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS `PROC TTEST`: | Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | -|----|----|----|----|----|----| +|------------|------------|------------|------------|------------|------------| | Degrees of Freedom | 11 | 11 | 11 | Yes | | -| t value | 1.094185 | 1.094185 | 1.094185 | Yes | | -| p value | 0.2972 | 0.2992 | 0.2972 | Yes | | -| Geometric Mean Ratio | 1.0146204 | 1.0146204 | 1.0146204 | Yes | Back-transformed mean difference | -| Lower 95% CL Mean Ratio | 0.98542 | 0.98542 | 0.98542 | Yes | Back-transformed lower confidence limit | -| Upper 95% CL Mean Ratio | 1.04468 | 1.04468 | 1.04468 | Yes | Back-transformed upper confidence limit | +| t value | -1.094185 | -1.094185 | -1.09 | Yes | | +| p value | 0.2973 | 0.2973 | 0.2973 | Yes | | +| Geometric Mean Ratio | 0.9856 | 0.9856 | 0.9856 | Yes | Back-transformed mean difference | +| Lower 95% CL Mean Ratio | 0.9572 | 0.9572 | 0.9572 | Yes | Back-transformed lower confidence limit | +| Upper 95% CL Mean Ratio | 1.0148 | 1.0148 | 1.0148 | Yes | Back-transformed upper confidence limit | # Summary and Recommendation diff --git a/R/ttest_2Sample.qmd b/R/ttest_2Sample.qmd index 9e0882caf..267382242 100644 --- a/R/ttest_2Sample.qmd +++ b/R/ttest_2Sample.qmd @@ -77,7 +77,6 @@ stats::t.test(d1p$WtGain, d1t$WtGain, var.equal = FALSE, paired = FALSE) ``` - ## Procs Package ### Student's T-Test and Welch's T-Test {#procs} @@ -105,7 +104,6 @@ Viewer Output: knitr::include_graphics("../images/ttest/twosample_rtest1.png") ``` - ## Example with unequal variances ```{r} @@ -140,8 +138,6 @@ Viewer Output: knitr::include_graphics("../images/ttest/twosample_rtest2.png") ``` - - ::: {.callout-note collapse="true" title="Session Info"} ```{r} #| echo: false @@ -154,4 +150,29 @@ si <- sessioninfo::session_info(c( )) si ``` -::: \ No newline at end of file +::: + +## Lognormal Data {#lognormal} + +The Base R `t.test()` function does not have an option for lognormal data. Likewise, the **procs** `proc_ttest()` function also does not have an option for lognormal data. + +Although Base R `t.test()` does not include a lognormal option, lognormal data can be analyzed by applying a natural log transformation to the data, performing a two-sample t-test on the log-transformed data, and exponentiating the group means and confidence limits. The back-transformed difference is interpreted as a ratio of geometric means. The standard deviation is not back-transformed. + +The following example applies a natural log transformation, performs the two-sample t-test on the log-transformed data, and exponentiates the mean and confidence limits. + +```{r} +# Apply natural log transformation to outcome variable +d1$log_WtGain <- log(d1$WtGain) + +# Perform two-sample t-test on log-transformed data +tt <- t.test(log_WtGain ~ trt_grp, data = d1) + +# Back-transform log means using exponential function +gm <- tapply(d1$WtGain, d1$trt_grp, function(x) exp(mean(log(x)))) + +# Back-transform confidence interval limits +ci <- exp(tt$conf.int) + +# Extract p-value from t-test result +p_value <- tt$p.value +``` diff --git a/SAS/ttest_2Sample.qmd b/SAS/ttest_2Sample.qmd index aed78b195..b0db1bda0 100644 --- a/SAS/ttest_2Sample.qmd +++ b/SAS/ttest_2Sample.qmd @@ -13,7 +13,7 @@ knitr::opts_chunk$set(echo = TRUE) The following data was used in this example. -```sas +``` sas data d1; length trt_grp $ 9; input trt_grp $ WtGain @@; @@ -34,12 +34,11 @@ run; The null hypothesis of the Independent Samples t-test is, the means for the two populations are equal. -In SAS the following code was used to test the mean comparison (mean of Weight Gain) of two independent treatment groups (Treatment and Placebo). -Both the Student's t-test and Welch's t-test (the Satterthwaite approximation is used to calculate the effective degrees of freedom and variance) in the same call. +In SAS the following code was used to test the mean comparison (mean of Weight Gain) of two independent treatment groups (Treatment and Placebo). Both the Student's t-test and Welch's t-test (the Satterthwaite approximation is used to calculate the effective degrees of freedom and variance) in the same call. For this example, we're testing the significant difference in mean of Weight gain (*WtGain*) between treatment and placebo (*trt_grp*) using PROC TTEST procedure in SAS. -```sas +``` sas proc ttest data=d1; class trt_grp; var WtGain; @@ -67,7 +66,7 @@ Note: Before entering straight into the t-test we need to check whether the assu 1. Normality: You can check for data to be normally distributed by plotting a histogram of the data by treatment. Alternatively, you can use the Shapiro-Wilk test or the Kolmogorov-Smirnov test. If the test is \<0.05 and your sample is quite small then this suggests you should not use the t-test. However, if your sample in each treatment group is large (say \>30 in each group), then you do not need to rely so heavily on the assumption that the data have an underlying normal distribution in order to apply the two-sample t-test. This is where plotting the data using histograms can help to support investigation into the normality assumption. We have checked the normality of the observations using the code below. Here for both the treatment groups we have P value greater than 0.05 (Shapiro-Wilk test is used), therefore the normality assumption is there for our data. -```sas +``` sas proc univariate data=d1 normal; qqplot WtGain; by trt_grp; @@ -113,12 +112,11 @@ Output: knitr::include_graphics("../images/ttest/variance_sas.png") ``` - ## Example with unequal variances For this example, it is important to use the Welch's t-test (the Satterthwaite approximation is used to calculate the effective degrees of freedom and variance) results. -```sas +``` sas data d2; length trt_grp $ 9; input trt_grp $ WtGain @@; @@ -141,7 +139,7 @@ run; Output: -```default +``` default Figure 1: Test results for independent t-test using PROC TTEST in SAS ``` @@ -152,3 +150,28 @@ Output: knitr::include_graphics("../images/ttest/test2.png") ``` +## Lognormal Data {#lognormal} + +The SAS two-sample t-test also supports lognormal analysis for a two-sample t-test. + +### Code + +Using the same d1 dataset as above, we will set the "DIST" option to "lognormal" and specify a CLASS variable to perform this analysis: + +``` sas +proc ttest data=d1 dist=lognormal; + class trt_grp; + var wtgain; +run; +``` + +Output: + +```{r} +#| echo: false +#| fig-align: center +#| out-width: 60% +knitr::include_graphics("../images/ttest/twosample_test2.png") +``` + +As can be seen in the figure above, the lognormal variation of the two-sample t-test provides results for geometric mean by group, geometric mean ratio, coefficient of variation, and 95% confidence limits for the ratio and coefficient of variation. From 8e9e57f730eab7697e3995157b77474e4b4c3c78 Mon Sep 17 00:00:00 2001 From: dimpz4295 Date: Sun, 5 Jul 2026 13:48:45 -0400 Subject: [PATCH 2/3] Added SAS two-sample t-test output image --- images/ttest/twosample_test2.png | Bin 0 -> 31575 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/ttest/twosample_test2.png diff --git a/images/ttest/twosample_test2.png b/images/ttest/twosample_test2.png new file mode 100644 index 0000000000000000000000000000000000000000..7dec4dc29b580bba266369debb94f25af17406a3 GIT binary patch literal 31575 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 literal 0 HcmV?d00001 From d7431c0f5c9baf0358bd395af44e7cc495a80280 Mon Sep 17 00:00:00 2001 From: dimpz4295 Date: Sun, 5 Jul 2026 15:40:31 -0400 Subject: [PATCH 3/3] Fixed Setup Chunk --- Comp/r-sas_ttest_2Sample.qmd | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/Comp/r-sas_ttest_2Sample.qmd b/Comp/r-sas_ttest_2Sample.qmd index 12ac3777f..8a6fa7dbb 100644 --- a/Comp/r-sas_ttest_2Sample.qmd +++ b/Comp/r-sas_ttest_2Sample.qmd @@ -2,8 +2,7 @@ title: "R vs SAS Two-Sample T-Test" --- -```{r} -#| label: setup +```{r setup} #| include: false knitr::opts_chunk$set(echo = TRUE) ``` @@ -42,7 +41,7 @@ R: `stats::t.test()` and log-transformation / back-transformation approach for l ## R packages -```{r} +```{r load-packages} #| output: false #| message: false library(tibble) # for example data @@ -92,13 +91,6 @@ treatment 87 treatment 100 treatment 76 treatment 80 run; ``` -```{r} -#| label: setup -#| include: false -knitr::opts_chunk$set(echo = TRUE) -library(procs) -``` - # Two Sample t-test Comparison The following table shows the types of Two Sample t-test analysis, the capabilities of each language, and whether or not the results from each language match. @@ -132,14 +124,14 @@ Here is a table of comparison values between `t.test()`, `proc_ttest()`, and SAS Example with unequal variances: -| Statistic | t.test() | proc_ttest() | PROC TTEST() | Match | Notes | +| Statistic | t.test() | proc_ttest() | PROC TTEST | Match | Notes | |------------|------------|------------|------------|------------|------------| -| Degrees of Freedom | 29.694 | 29.694 | 29.694 | Yes | | -| t value | -0.6969 | -0.70 | -0.70 | Yes | | -| p value | 0.4913 | 0.4913 | 0.4913 | Yes | | -| Mean Difference | -7.9375 | -7.9375 | -7.9375 | Yes | | -| Lower 95% CL Mean Difference | -31.2085 | -31.2085 | -31.2085 | Yes | | -| Upper 95% CL Mean Difference | 15.3335 | 15.3335 | 15.3335 | Yes | | +| Degrees of Freedom | 29.694 | 29.694 | 29.694 | Yes | | +| t value | -0.6969 | -0.70 | -0.70 | Yes | | +| p value | 0.4913 | 0.4913 | 0.4913 | Yes | | +| Mean Difference | -7.9375 | -7.9375 | -7.9375 | Yes | | +| Lower 95% CL Mean Difference | -31.2085 | -31.2085 | -31.2085 | Yes | | +| Upper 95% CL Mean Difference | 15.3335 | 15.3335 | 15.3335 | Yes | | ### Lognormal Data {#lognormal}