1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
13 #include <reffact.hxx>
14 #include <TableFillingAndNavigationTools.hxx>
15 #include <TTestDialog.hxx>
16 #include <scresid.hxx>
17 #include <strings.hrc>
19 ScTTestDialog::ScTTestDialog(
20 SfxBindings
* pSfxBindings
, SfxChildWindow
* pChildWindow
,
21 weld::Window
* pParent
, ScViewData
& rViewData
) :
22 ScStatisticsTwoVariableDialog(
23 pSfxBindings
, pChildWindow
, pParent
, rViewData
,
24 u
"modules/scalc/ui/ttestdialog.ui"_ustr
, u
"TTestDialog"_ustr
)
26 m_xDialog
->set_title(ScResId(STR_TTEST
));
29 ScTTestDialog::~ScTTestDialog()
32 void ScTTestDialog::Close()
34 DoClose( ScTTestDialogWrapper::GetChildWindowId() );
37 TranslateId
ScTTestDialog::GetUndoNameId()
39 return STR_TTEST_UNDO_NAME
;
42 ScRange
ScTTestDialog::ApplyOutput(ScDocShell
* pDocShell
)
44 AddressWalkerWriter
aOutput(mOutputAddress
, pDocShell
, mDocument
,
45 formula::FormulaGrammar::mergeToGrammar( formula::FormulaGrammar::GRAM_ENGLISH
, mAddressDetails
.eConv
));
46 FormulaTemplate
aTemplate(&mDocument
);
48 std::unique_ptr
<DataRangeIterator
> pVariable1Iterator
;
49 if (mGroupedBy
== BY_COLUMN
)
50 pVariable1Iterator
.reset(new DataRangeByColumnIterator(mVariable1Range
));
52 pVariable1Iterator
.reset(new DataRangeByRowIterator(mVariable1Range
));
54 std::unique_ptr
<DataRangeIterator
> pVariable2Iterator
;
55 if (mGroupedBy
== BY_COLUMN
)
56 pVariable2Iterator
.reset(new DataRangeByColumnIterator(mVariable2Range
));
58 pVariable2Iterator
.reset(new DataRangeByRowIterator(mVariable2Range
));
60 aTemplate
.autoReplaceRange(u
"%VARIABLE1_RANGE%"_ustr
, pVariable1Iterator
->get());
61 aTemplate
.autoReplaceRange(u
"%VARIABLE2_RANGE%"_ustr
, pVariable2Iterator
->get());
63 aOutput
.writeBoldString(ScResId(STR_TTEST_UNDO_NAME
));
67 aOutput
.writeString(ScResId(STR_LABEL_ALPHA
));
69 aOutput
.writeValue(0.05);
70 aTemplate
.autoReplaceAddress(u
"%ALPHA%"_ustr
, aOutput
.current());
73 // Hypothesized mean difference
74 aOutput
.writeString(ScResId(STR_HYPOTHESIZED_MEAN_DIFFERENCE_LABEL
));
76 aOutput
.writeValue(0);
77 aTemplate
.autoReplaceAddress(u
"%HYPOTHESIZED_MEAN_DIFFERENCE%"_ustr
, aOutput
.current());
81 aOutput
.writeBoldString(ScResId(STR_VARIABLE_1_LABEL
));
83 aOutput
.writeBoldString(ScResId(STR_VARIABLE_2_LABEL
));
86 aOutput
.writeString(ScResId(STRID_CALC_MEAN
));
88 aTemplate
.setTemplate("=AVERAGE(%VARIABLE1_RANGE%)");
89 aOutput
.writeFormula(aTemplate
.getTemplate());
91 aTemplate
.setTemplate("=AVERAGE(%VARIABLE2_RANGE%)");
92 aOutput
.writeFormula(aTemplate
.getTemplate());
95 aOutput
.writeString(ScResId(STRID_CALC_VARIANCE
));
97 aTemplate
.setTemplate("=VAR(%VARIABLE1_RANGE%)");
98 aOutput
.writeFormula(aTemplate
.getTemplate());
100 aTemplate
.setTemplate("=VAR(%VARIABLE2_RANGE%)");
101 aOutput
.writeFormula(aTemplate
.getTemplate());
105 aOutput
.writeString(ScResId(STR_OBSERVATIONS_LABEL
));
106 aOutput
.nextColumn();
107 aTemplate
.setTemplate("=COUNT(%VARIABLE1_RANGE%)");
108 aOutput
.writeFormula(aTemplate
.getTemplate());
109 aOutput
.nextColumn();
110 aTemplate
.setTemplate("=COUNT(%VARIABLE2_RANGE%)");
111 aOutput
.writeFormula(aTemplate
.getTemplate());
114 // Pearson Correlation
115 aOutput
.writeString(ScResId(STR_TTEST_PEARSON_CORRELATION
));
116 aOutput
.nextColumn();
117 aTemplate
.setTemplate("=CORREL(%VARIABLE1_RANGE%;%VARIABLE2_RANGE%)");
118 aOutput
.writeFormula(aTemplate
.getTemplate());
121 // Observed mean difference
122 aOutput
.writeString(ScResId(STR_OBSERVED_MEAN_DIFFERENCE_LABEL
));
123 aOutput
.nextColumn();
124 aTemplate
.setTemplate("=AVERAGE(IF(ISODD(IF(ISNUMBER(%VARIABLE1_RANGE%); 1; 0) * IF(ISNUMBER(%VARIABLE2_RANGE%); 1; 0)); %VARIABLE1_RANGE% - %VARIABLE2_RANGE%; \"NA\"))");
125 aOutput
.writeMatrixFormula(aTemplate
.getTemplate());
126 aTemplate
.autoReplaceAddress(u
"%OBSERVED_MEAN_DIFFERENCE%"_ustr
, aOutput
.current());
129 // Variance of the Differences
130 aOutput
.writeString(ScResId(STR_TTEST_VARIANCE_OF_THE_DIFFERENCES
));
131 aOutput
.nextColumn();
132 aTemplate
.setTemplate("=VAR(IF(ISODD(IF(ISNUMBER(%VARIABLE1_RANGE%); 1; 0) * IF(ISNUMBER(%VARIABLE2_RANGE%); 1; 0)); %VARIABLE1_RANGE% - %VARIABLE2_RANGE%; \"NA\"))");
133 aOutput
.writeMatrixFormula(aTemplate
.getTemplate());
134 aTemplate
.autoReplaceAddress(u
"%VARIANCE_OF_DIFFERENCES%"_ustr
, aOutput
.current());
138 aOutput
.writeString(ScResId(STR_ANOVA_LABEL_DF
));
139 aOutput
.nextColumn();
140 aTemplate
.setTemplate("=SUM(IF(ISNUMBER(%VARIABLE1_RANGE%); 1; 0) * IF(ISNUMBER(%VARIABLE2_RANGE%); 1; 0)) - 1");
141 aOutput
.writeMatrixFormula(aTemplate
.getTemplate());
142 aTemplate
.autoReplaceAddress(u
"%DEGREE_OF_FREEDOM%"_ustr
, aOutput
.current());
146 aOutput
.writeString(ScResId(STR_TTEST_T_STAT
));
147 aOutput
.nextColumn();
148 aTemplate
.setTemplate("=(%OBSERVED_MEAN_DIFFERENCE% - %HYPOTHESIZED_MEAN_DIFFERENCE%) / (%VARIANCE_OF_DIFFERENCES% / ( %DEGREE_OF_FREEDOM% + 1)) ^ 0.5");
149 aOutput
.writeFormula(aTemplate
.getTemplate());
150 aTemplate
.autoReplaceAddress(u
"%T_STAT%"_ustr
, aOutput
.current());
154 aOutput
.writeString(ScResId(STR_TTEST_P_ONE_TAIL
));
155 aOutput
.nextColumn();
156 aTemplate
.setTemplate("=TDIST(ABS(%T_STAT%); %DEGREE_OF_FREEDOM%; 1)");
157 aOutput
.writeFormula(aTemplate
.getTemplate());
160 // T critical one-tail
161 aOutput
.writeString(ScResId(STR_TTEST_T_CRITICAL_ONE_TAIL
));
162 aOutput
.nextColumn();
163 aTemplate
.setTemplate("=TINV(2*%ALPHA%; %DEGREE_OF_FREEDOM%)");
164 aOutput
.writeFormula(aTemplate
.getTemplate());
168 aOutput
.writeString(ScResId(STR_TTEST_P_TWO_TAIL
));
169 aOutput
.nextColumn();
170 aTemplate
.setTemplate("=TDIST(ABS(%T_STAT%); %DEGREE_OF_FREEDOM%; 2)");
171 aOutput
.writeFormula(aTemplate
.getTemplate());
174 // T critical two-tail
175 aOutput
.writeString(ScResId(STR_TTEST_T_CRITICAL_TWO_TAIL
));
176 aOutput
.nextColumn();
177 aTemplate
.setTemplate("=TINV(%ALPHA%; %DEGREE_OF_FREEDOM%)");
178 aOutput
.writeFormula(aTemplate
.getTemplate());
180 return ScRange(aOutput
.mMinimumAddress
, aOutput
.mMaximumAddress
);
183 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */