一系列数据,其中有几个异常数据干扰,影响平均数大小,怎么剔除该数据?
下列数据中需要 剔除 3.42 3.82  4.6 
1.4
3.42
1.46
1.46
1.48
1.45
1.45
3.82
1.48
1.46
4.6
1.45
1.49
1.49
1.5

解决方案 »

  1.   

    逐个比较,如果xx>1 and xx<2就保留
      

  2.   

    要根据你的业务规则选地一个过滤规则,比如:
    A)假定数据有效范围 [0.0, 3.0],直接排除 >3.0 的数。
    B)假定异常数据不会连续出现,如果 A(i) > A(i-1)*2 则排除 n(i)。
    C)将数组排序,取中间一个数 M=A(n\2),排除 > M*2 的数。
      

  3.   

    总要限定一些规则的,比如你 5楼的数据,采用 C 方案,M=3.06,
    > M*2 无法排除,
    > M+0.5 可以排除,这个就是你必须预先确立的规则。
      

  4.   


    Option Explicit
    Dim dblP(0 To 14) As Double
    Dim dblA As Double  '偏差判断值
    Private Sub Command1_Click()
        Dim intP As Integer
        Dim dblSum As Double
        For intP = 0 To 14
            dblSum = dblSum + dblP(intP)
        Next intP
        dblSum = dblSum / 15
        
        For intP = 0 To 14
            If Abs(dblP(intP) - dblSum) > dblA Then
                Print "dblP(" & CStr(intP) & ")=" & dblP(intP) & "  是异常数据!"
            End If
        Next intP
    End SubPrivate Sub Form_Load()
        dblP(0) = 1.4
        dblP(1) = 3.42
        dblP(2) = 1.46
        dblP(3) = 1.46
        dblP(4) = 1.48
        dblP(5) = 1.45
        dblP(6) = 1.45
        dblP(7) = 3.82
        dblP(8) = 1.48
        dblP(9) = 1.46
        dblP(10) = 4.6
        dblP(11) = 1.45
        dblP(12) = 1.49
        dblP(13) = 1.49
        dblP(14) = 1.5
        
        dblA = 1#
    End Sub
      

  5.   

    两种思路,两种办法:Option Explicit
    Dim dblP(0 To 14) As Double
    Dim dblA As Double  '偏差判断值
    '平均值法
    Private Sub Command1_Click()
        Dim intP As Integer
        Dim dblSum As Double
        
        dblA = 1#
        
        For intP = 0 To 14
            dblSum = dblSum + dblP(intP)
        Next intP
        dblSum = dblSum / 15
        
        For intP = 0 To 14
            If Abs(dblP(intP) - dblSum) > dblA Then
                Print "dblP(" & CStr(intP) & ")=" & dblP(intP) & "  是异常数据!"
            End If
        Next intP
    End Sub
    '排序法
    Private Sub Command2_Click()
        Dim intP As Integer
        Dim intT As Integer
        Dim dblT As Double
        
        dblA = 2#
        
        '执行排序
        For intP = 0 To 13
            For intT = intP + 1 To 14
                If dblP(intP) < dblP(intT) Then
                    dblT = dblP(intT)
                    dblP(intT) = dblP(intP)
                    dblP(intP) = dblT
                End If
            Next intT
        Next intP
        
        For intP = 0 To 14
            If dblP(intP) > dblA Then
                Print "dblP(" & CStr(intP) & ")=" & dblP(intP) & "  是异常数据!"
            End If
        Next intP
    End SubPrivate Sub Form_Load()
        dblP(0) = 1.4
        dblP(1) = 3.42
        dblP(2) = 1.46
        dblP(3) = 1.46
        dblP(4) = 1.48
        dblP(5) = 1.45
        dblP(6) = 1.45
        dblP(7) = 3.82
        dblP(8) = 1.48
        dblP(9) = 1.46
        dblP(10) = 4.6
        dblP(11) = 1.45
        dblP(12) = 1.49
        dblP(13) = 1.49
        dblP(14) = 1.5
        
        
    End Sub
      

  6.   

    18楼正解。可使用中误差理论,见http://wenku.baidu.com/view/3663fa43a8956bec0975e399.html。先剔除真误差是2倍以上中误差的数值(粗差),再计算剩下的数值,再剔除之
    数值 平均值 真误差 真误差的平方 中误差 ABS(真误差/中误差)
    3.04 3.2591 -0.2191 0.04800481 0.47776 0.458598459
    2.98 -0.2791 0.07789681 0.47776 0.584184528
    3.07 -0.1891 0.03575881 0.47776 0.395805425
    3.22 -0.0391 0.00152881 0.47776 0.081840255
    3.44 0.1809 0.03272481 0.47776 0.378641996
    3.14 -0.1191 0.01418481 0.47776 0.249288346
    3.06 -0.1991 0.03964081 0.47776 0.416736437
    4.03 0.7709 0.59428681 0.47776 1.613571668
    3.06 -0.1991 0.03964081 0.47776 0.416736437
    3.14 -0.1191 0.01418481 0.47776 0.249288346
    2.96 -0.2991 0.08946081 0.47776 0.626046551
    4.03 0.7709 0.59428681 0.47776 1.613571668
    3.09 -0.1691 0.02859481 0.47776 0.353943403
    3.06 -0.1991 0.03964081 0.47776 0.416736437
    2.98 -0.2791 0.07789681 0.47776 0.584184528
    3.05 -0.2091 0.04372281 0.47776 0.437667448
    3.04 -0.2191 0.04800481 0.47776 0.458598459
    3.03 -0.2291 0.05248681 0.47776 0.479529471
    4.94 1.6809 2.82542481 0.47776 3.518293704
    3.04 -0.2191 0.04800481 0.47776 0.458598459
    3.04 -0.2191 0.04800481 0.47776 0.458598459
      

  7.   

    数值 平均值 真误差 真误差的平方 中误差 ABS(真误差/中误差)
    3.04 3.2591 -0.2191 0.04800481 0.47776 0.458598459
    2.98 -0.2791 0.07789681 0.47776 0.584184528
    3.07 -0.1891 0.03575881 0.47776 0.395805425
    3.22 -0.0391 0.00152881 0.47776 0.081840255
    3.44 0.1809 0.03272481 0.47776 0.378641996
    3.14 -0.1191 0.01418481 0.47776 0.249288346
    3.06 -0.1991 0.03964081 0.47776 0.416736437
    4.03 0.7709 0.59428681 0.47776 1.613571668
    3.06 -0.1991 0.03964081 0.47776 0.416736437
    3.14 -0.1191 0.01418481 0.47776 0.249288346
    2.96 -0.2991 0.08946081 0.47776 0.626046551
    4.03 0.7709 0.59428681 0.47776 1.613571668
    3.09 -0.1691 0.02859481 0.47776 0.353943403
    3.06 -0.1991 0.03964081 0.47776 0.416736437
    2.98 -0.2791 0.07789681 0.47776 0.584184528
    3.05 -0.2091 0.04372281 0.47776 0.437667448
    3.04 -0.2191 0.04800481 0.47776 0.458598459
    3.03 -0.2291 0.05248681 0.47776 0.479529471
    4.94 1.6809 2.82542481 0.47776 3.518293704
    3.04 -0.2191 0.04800481 0.47776 0.458598459
    3.04 -0.2191 0.04800481 0.47776 0.458598459