仅根据相关总数估算袋子中水果的质量?

机器算法验证 回归 估计
2022-03-21 07:37:15

我大学的一位讲师提出了这样的问题(因为课程已经结束而我不在,所以不用于家庭作业)。我不知道如何处理它。

问题涉及 2 个袋子,每个袋子都装有各种不同种类的水果:

第一个袋子包含以下随机选择的水果:

+-------------+--------+----------+
| 直径厘米 | 质量 g | 烂?|
+-------------+--------+----------+
| 17.28 | 139.08 | 0 |
| 6.57 | 91.48 | 1 |
| 7.12 | 74.23 | 1 |
| 16.52 | 129.8 | 0 |
| 14.58 | 169.22 | 0 |
| 6.99 | 123.43 | 0 |
| 6.63 | 104.93 | 1 |
| 6.75 | 103.27 | 1 |
| 15.38 | 169.01 | 1 |
| 7.45 | 83.29 | 1 |
| 13.06 | 157.57 | 0 |
| 6.61 | 117.72 | 0 |
| 7.19 | 128.63 | 0 |
+-------------+--------+----------+

第二个袋子包含 6 个随机选择的水果,这些水果来自与第一个袋子相同的商店。它们的直径总和为 64.2 厘米,其中 4 个已腐烂。

估计第二个袋子的质量。

我可以看到似乎有两种不同的水果,它们的直径和质量呈正态分布,但我不知道如何进行。

3个回答

让我们从绘制数据开始,看看它。这是一个非常有限的数据量,所以这将是一些临时的,有很多假设。

rotten <- c(0,1,1,0,0,0,1,1,1,1,0,0,0)
rotten <- as.factor(rotten)
mass <- c(139.08, 
        91.48,
        74.23,
        129.8,
        169.22,
        123.43,
        104.93,
        103.27,
        169.01,
        83.29,
        157.57,
        117.72,
        128.63)
diam <- c(17.28,
        6.57,
        7.12,
        16.52,
        14.58,
        6.99,
        6.63,
        6.75,
        15.38,
        7.45,
        13.06,
        6.61,
        7.19)

plot(mass,diam,col=rotten,lwd=2)
title("Fruits")

所以这是数据,红点代表腐烂的水果:

绘制的水果

你假设似乎有两种水果是正确的。我所做的假设如下:

  • 直径将水果分成两组
  • 直径大于 10 的水果属于一组,其他水果属于较小的一组。
  • 大果群里只有一颗烂果。假设如果一个水果在大组中,那么腐烂不会影响重量。这是必不可少的,因为我们在该组中只有一个数据点。
  • 如果水果是小水果,那么腐烂会影响质量。
  • 让我们假设变量直径和质量是正态分布的。

因为给定直径之和为 64.2 厘米,那么很有可能两个果实大,四个果实小。现在有3箱重量。有 2、3 或 4 个小果实腐烂(假设大果实腐烂不会影响质量)。所以现在你可以通过计算这些值来限制你的质量。

我们可以凭经验估计小果实腐烂的概率。我们使用概率来加权我们对质量的估计,具体取决于腐烂水果的数量:

samps <- 100000
stored_vals <- matrix(0,samps,2)
for(i in 1:samps){
  numF <- 0 # Number of small rotten
  numR <- 0 # Total number of rotten
  # Pick 4 small fruits
  for(j in 1:4){
    if(runif(1) < (5/8)){ # Empirical proportion of small rotten
      numF <- numF + 1
      numR <- numR + 1
    } 
  }
  # Pick 2 large fruits
  for(j in 1:2){
    if(runif(1) < 1/5){# Empirical proportion of large rotten
      numR <- numR + 1
    }
  }
  stored_vals[i,] <- c(numF,numR)
}

# Pick out samples that had 4 rotten
fourRotten <- stored_vals[stored_vals[,2] == 4,1]
hist(fourRotten)

table(fourRotten)

# Proportions 
props <- table(fourRotten)/length(fourRotten)

massBig <- mean(mass[diam>10])
massSmRot <- mean(mass[diam<10 & rotten == 1])
massSmOk <- mean(mass[diam<10 & rotten == 0])

weights <- 2*massBig + c(2*massSmOk+2*massSmRot,1*massSmOk+3*massSmRot,4*massSmRot)

Est_Mass <- sum(props*weights) 

给我们一个691.5183g的最终估计我认为你必须做出我所做的大部分假设才能得出结论,但我认为有可能以更聪明的方式做到这一点。此外,我根据经验进行抽样以获得腐烂小水果数量的概率,这只是懒惰,可以“分析”完成。

我会提出以下方法:

  1. 生成所有满足 4 rotten 条件的 6 元组。他们是(64)(72).
  2. 从生成的元组中仅选择满足直径条件的元组。
  3. 计算所选元组的平均权重(通常的算术平均值)。

所有这一切都可以通过一个简单的脚本来管理。

多种方法包括,从简单到复杂,

  1. 6(平均质量)
  2. 6(平均体积)(平均密度)
  3. 4(平均腐烂质量)+ 2(平均非腐烂质量)
  4. 4((平均腐烂体积) + 2(平均非腐烂体积))(平均密度)
  5. 4(平均腐烂体积)(平均腐烂密度)+ 2(平均非腐烂体积)(平均非腐烂密度)

. . .

组合方法

这些方法是按照计算简单的顺序排列的,而不是按照任何方法更好或根本没有好处的顺序排列的。选择使用哪种方法取决于已知或假设的人口特征。例如,如果商店人口中的水果质量呈正态分布,并且与直径和腐烂状态无关,则可以使用第一种最简单的方法,而没有使用更复杂方法的任何优点(甚至是多个变量的抽样误差的缺点) . 如果不是独立的同分布随机变量,那么根据关于总体的已知或假设信息进行更复杂的选择可能会更好。