Explorar o código

性能验证模块 开发 (二期) / 添加正确度-参考物质 结论模板内容

liyuan hai 1 ano
pai
achega
376e9a3e48

+ 59 - 2
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessBiasAssessment.java

@@ -15,10 +15,15 @@ public class TruenessBiasAssessment extends PVModel {
     private final double[] means;
     private final double[] bias;
 
+    private String teaFormat;
+
     public TruenessBiasAssessment(double[][] data, InspectionConfigVO configVO) {
         super(data, configVO);
         this.means = new double[specimensNum];
         this.bias = new double[specimensNum];
+        this.tea = configVO.getTea();
+        this.targetValues = configVO.getTargetValue();
+        this.teaFormat = getTEaFormat(configVO.getBatchCVS());
     }
 
     @Override
@@ -29,6 +34,7 @@ public class TruenessBiasAssessment extends PVModel {
             realMatrix.copySubMatrix(0, data.length - 1,
                     i * repeatNum, (i + 1) * repeatNum - 1, sub);
             means[i] = StatUtils.mean(array2DTo1D(sub));
+            //偏差%=(|结果均值-参考值|/参考值)×100%
             bias[i] = 100 * Math.abs(means[i] - targetValues[i]) / targetValues[i];
         }
     }
@@ -56,18 +62,69 @@ public class TruenessBiasAssessment extends PVModel {
 
     @Override
     public String generateResult() {
-        return renderReportTemplate(this, null);
+        return renderReportTemplate(this, "/report/truenessBiasAssessment.ftl");
     }
 
 
     @Override
     public String[] tableNames() {
-        return new String[0];
+        return new String[]{"表1:实验结果"};
     }
 
     @Override
     public String[] chartNames() {
         return new String[0];
     }
+    @Override
+    TableDTO buildTable1DTO(int sheetIndex) {
+        TableDTO table = new TableDTO();
+        String[] header = {"样本名", "均值(mean)", "参考值", "偏差%", teaFormat};
+        table.buildHeader(header);
+
+
+        String[][] r = new String[specimensNum][5];
+
+        for (int i = 0; i < r.length; i++) {
+            r[i][0] = specimensName[i];
+            r[i][1] = format(means[i]);
+            r[i][2] = format(targetValues[i]);
+            r[i][3] = format(bias[i]);
+            r[i][4] = format(tea);
+
+        }
+        table.buildData(r);
+        return table;
+    }
+
+    public double[] getTargetValues() {
+        return targetValues;
+    }
 
+    public void setTargetValues(double[] targetValues) {
+        this.targetValues = targetValues;
+    }
+
+    public double getTea() {
+        return tea;
+    }
+
+    public void setTea(double tea) {
+        this.tea = tea;
+    }
+
+    public double[] getMeans() {
+        return means;
+    }
+
+    public double[] getBias() {
+        return bias;
+    }
+
+    public String getTeaFormat() {
+        return teaFormat;
+    }
+
+    public void setTeaFormat(String teaFormat) {
+        this.teaFormat = teaFormat;
+    }
 }

+ 16 - 10
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessRefernece.java

@@ -62,17 +62,23 @@ public class TruenessRefernece extends PVModel {
 
     @Override
     TableDTO buildTable1DTO(int index) {
-        final TruenessReferneceItem item = items.get(index);
         TableDTO table = new TableDTO();
-        String[][] data = new String[6][2];
-
-        data[0] = new String[]{"均值", format(item.getMean())};
-        data[1] = new String[]{"标准差", format(item.getSd())};
-        data[2] = new String[]{"置信区间上限", format(item.getUcl())};
-        data[3] = new String[]{"置信区间下限", format(item.getLcl())};
-        data[4] = new String[]{"验证区间上限", format(item.getUvl())};
-        data[5] = new String[]{"验证区间下限", format(item.getLvl())};
-        table.buildData(data);
+        String[] header = {"样本名", "均值(mean)","靶值(TV)", "标准差", "验证区间", "偏差%"};
+        table.buildHeader(header);
+
+        String[][] r = new String[specimensNum][6];
+
+        for (int i = 0; i < r.length; i++) {
+            TruenessReferneceItem item = items.get(i);
+            r[i][0] = specimensName[i];
+            r[i][1] = format(item.getMean());
+            r[i][2] = format(item.getTarget());
+            r[i][3] = format(item.getSd());
+            r[i][4] = String.format("%s %s ~ %s %s",format(item.getLvl()),getUnits(),format(item.getUvl()),getUnits());
+            r[i][5] = format( (double)100* (item.getMean() - item.getTarget())/item.getTarget());
+
+        }
+        table.buildData(r);
         return table;
     }
 

+ 3 - 1
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/verification/model2/TruenessReferneceItem.java

@@ -4,6 +4,7 @@ import com.lc.ibps.components.verification.model.InspectionConfigVO;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 
 public class TruenessReferneceItem {
+    private double rejectionRate;
     protected String name;
     protected double[][] data;
     private final double[] calcData;
@@ -33,8 +34,9 @@ public class TruenessReferneceItem {
         }
         this.target = target;
         this.sdClaim = configVO.getClaimValue();
+        rejectionRate = (double)configVO.getRejectionRate()/100;
         if (t == 0) {
-            this.t = PVModel.getTValue(calcData.length - 1, 0.01);
+            this.t = PVModel.getTValue(calcData.length - 1, rejectionRate);
         } else {
             this.t = t;
         }

+ 11 - 0
ibps-provider-root/modules/provider-business/src/main/resources/pv/report/truenessBiasAssessment.ftl

@@ -0,0 +1,11 @@
+<#list specimensName! as name>
+    <#assign x = name?index>
+    <h3>${name} 结论判断:</h3>
+    <p>
+        <#if (bias[x] > tea)>
+            计算得出的偏差% ${bias[x]} > ${teaFormat}(${tea}), 验证不合格。
+        <#else>
+            计算得出的偏差% ${bias[x]} ≤ ${teaFormat}(${tea}), 验证合格。
+        </#if>
+    </p>
+</#list>

+ 3 - 8
ibps-provider-root/modules/provider-business/src/main/resources/pv/report/truesnessUsingRefernece.ftl

@@ -1,17 +1,12 @@
 <#list items! as item>
     <h3>${item.name} 结论判断:</h3>
     <p>
-        自由度为N-1及p=0.010的临界值为${item.t},计算的99%置信区间为 ${item.lcl} ${units}~${item.ucl} ${units},
-        <#if (item.target > item.ucl) || (item.target < item.lcl)>
+        T值为${item.t},实验合成不确定度为 ${item.cse} ${units},计算的验证区间为 ${item.lvl} ${units}~${item.uvl} ${units},
+        <#if (item.target > item.uvl) || (item.target < item.lvl)>
 其并没有包括指定值 ${item.target} ${units},因此这些实验数据不能证实正确度。
         <#else>
 其中包括指定值 ${item.target} ${units},因此这些实验数据能证实正确度。
         </#if>
-当前指定值的不确定度规定s为 ${item.sdClaim} ${units}。当与实验不确定度合成时,标准差为 ${item.cse} ${units},
-         <#if (item.cse > item.se)>
-扩展的标准不确定度从 ${item.se} ${units}~${item.cse} ${units}。因此验证限稍微宽于置信限,即 ${item.lvl} ${units}~${item.uvl} ${units},比${item.lcl} ${units}~${item.ucl} ${units}范围宽,证明通过这些实验数据没能证实正确度。
-         <#else>
-扩展的标准不确定度从 ${item.se} ${units}~${item.cse} ${units}。因此验证限窄于置信限,即 ${item.lvl} ${units}~${item.uvl} ${units},比${item.lcl} ${units}~${item.ucl} ${units}范围窄,证明通过这些实验数据能证实正确度。
-         </#if>
+
     </p>
 </#list>

+ 3 - 3
ibps-provider-root/modules/provider-business/src/test/java/com/lc/ibps/components/verification/model2/TruenessBiasAssessmentTest.java

@@ -27,9 +27,9 @@ public class TruenessBiasAssessmentTest {
     public void calculate() {
         InspectionConfigVO config = new InspectionConfigVO("偏倚评估", 5, 2,
                 null, 2, LocalDate.now(), true);
-        config.setRejectionRate(1);
-        config.setBatchCVSValue(3.2);
-        config.setDailyCVSValue(3.1);
+        config.setTea(1);
+        config.setBatchCVS(0.5);
+        config.setTargetValue(new double[]{3.2,3.3});
         config.setDecimal(3);
         config.setUnits("mmg/L");
         config.setKey(ModelEnum.TruenessBiasAssessment.getKey());

+ 21 - 12
ibps-provider-root/modules/provider-business/src/test/java/com/lc/ibps/components/verification/model2/TruenessReferneceTest.java

@@ -1,8 +1,13 @@
 package com.lc.ibps.components.verification.model2;
 
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.lc.ibps.components.verification.model.InspectionConfigVO;
+import com.lc.ibps.components.verification.report.ReportDataDTO;
+import com.lc.ibps.components.verification.report.ReportFactory;
 import com.lc.ibps.components.verification.report.SheetDTO;
 import com.lc.ibps.components.verification.report.TableDTO;
+import org.apache.commons.lang3.RandomUtils;
 import org.apache.commons.math3.linear.MatrixUtils;
 import org.apache.commons.math3.linear.RealMatrix;
 import org.apache.commons.math3.linear.RealMatrixFormat;
@@ -25,23 +30,27 @@ public class TruenessReferneceTest {
         InspectionConfigVO config = new InspectionConfigVO("EP15-A2定值参考物质验证", 5, 2,
                 null, 2, LocalDate.now(), true);
         config.setUnits("mmol/L");
-        config.setTargetValue(new double[]{2.1, 2.2});
+        config.setTargetValue(new double[]{3.1, 3.2});
+        config.setClaimValue(0.02);
+        config.setRejectionRate(5);
+        config.setDecimal(3);
         config.setKey(ModelEnum.TruenessRefernece.getKey());
-        double[][] data = {
-                {2.04, 2.09, 2.04, 2.09},
-                {2.15, 2.04, 2.04, 2.09},
-                {2.09, 1.98, 2.04, 2.09},
-                {2.15, 2.09, 2.04, 2.09},
-                {2.09, 2.04, 2.04, 2.09}};
+        double[][] data = new double[config.getDays()][config.getRepeatNum() * config.getSpecimensNum()];
+        for (int i = 0; i < config.getDays(); i++) {
+            for (int j = 0; j < config.getRepeatNum() * config.getSpecimensNum(); j++) {
+                data[i][j] = RandomUtils.nextDouble(3.12, 3.45);
+            }
+        }
         RealMatrix matrix = MatrixUtils.createRealMatrix(data);
         RealMatrixFormat matrixFormat = new RealMatrixFormat("", "", "", "\n",
                 "", ",", new DecimalFormat("0.00"));
         System.out.println(matrixFormat.format(matrix));
-        TruenessRefernece tr = new TruenessRefernece(data, config);
-        TableDTO tableDTO = tr.buildDataTableDTO();
-        SheetDTO[] sheetDTOS = tr.buildSheetDTO();
-        String s = tr.generateResult();
-
+        PVItemBuilder pvItemBuilder = PVItemBuilder.getInstance(config);
+        pvItemBuilder.buildPVModel(data);
+        ReportDataDTO dataDTO = ReportFactory.build(pvItemBuilder);
+        String s = JSONObject.toJSONString(dataDTO, SerializerFeature.DisableCircularReferenceDetect);
+        String s1 = pvItemBuilder.getPvModel().generateResult();
         System.out.println(s);
+        System.out.println(s1);
     }
 }