# C++和R穿刺针吸活检肿瘤算法模型模拟和进化动力学量化差异模型

{% embed url="https://viadean.notion.site/C-R-91247f23573a43fbae5bac7cc328e3cb" %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}

### 🎯要点

🎯模拟肿瘤细胞增生进化轨迹 | 🎯肿瘤生长的随机空间细胞自动机模型 | 🎯模拟穿刺活检的收集空间局部的肿瘤块，模拟针吸活检采集长而薄的组织样本 | 🎯构建不同参数模拟合成肿瘤测试集 | 🎯算法模型计算先验分布、计算概率分布的瓦瑟斯坦距离和欧氏距离 | 🎯细胞进化系统动力学量化分裂差异模型。

### 📜病理学用例

📜[Python和C++骨髓细胞进化解析数学模型](python-he-c++-gu-sui-xi-bao-jin-hua-jie-xi-shu-xue-mo-xing)

📜[Python成像质谱流式细胞术病理生理学](../jiao-rong-guan-tong-intersection/python-cheng-xiang-zhi-pu-liu-shi-xi-bao-shu-bing-li-sheng-li-xue)

📜[Python流感传播感染康复图模型计算和算法](python-liu-gan-chuan-bo-gan-ran-kang-fu-tu-mo-xing-ji-suan-he-suan-fa)

📜[Python脑溶质扩散生理几何模型计算](python-nao-rong-zhi-kuo-san-sheng-li-ji-he-mo-xing-ji-suan)

📜[Python流感常微分方程房室数学模型](python-liu-gan-chang-wei-fen-fang-cheng-fang-shi-shu-xue-mo-xing)

📜[Python药物副作用生物图分析算法和矩阵降维算法](python-yao-wu-fu-zuo-yong-sheng-wu-tu-fen-xi-suan-fa-he-ju-zhen-jiang-wei-suan-fa)

### 🍪语言内容分比

{% @mermaid/diagram content="pie title 语言分比
 "C++":90
 "R":90" %}

{% @mermaid/diagram content="pie title 内容分比
 "病理学":90
 "数学":30
 "生物学":50
 "算法模型":60
 "进化动力学":30
 "概率":30
 "统计推理":40
 "肿瘤增生":50
 "二维网格边界":20
 "细胞分裂":30" %}

### 🍇R瓦瑟斯坦距离

两个概率测度 $$\mu$$和$$\nu$$之间的 $$p^{\text {th }}$$ 瓦瑟斯坦距离，在有限 $$p^{\text {th }}$$矩下，可以定义为

$$
W_p(\mu, \nu)^p=\inf E \left[d(X, Y)^p\right]
$$

其中 $$d$$ 是一个度量，$$E [Z]$$ 表示随机变量 Z 的期望值，下确界取随机变量 X 和 Y 的所有联合分布，边际为分别为 $$\mu$$ 和 $$\nu$$。对于 $$p=1$$，表明，$$R$$ 上的两个累积分布函数 $$F_1$$ 和 $$F_2$$ 之间的一维（一维）瓦瑟斯坦-1 度量可以写为 L\_1距离：

$$
W_1\left(F_1, F_2\right)=\int_{ R }\left|F_1(x)-F_2(x)\right| d x
$$

因此，对于具有数值可处理的累积分布函数的分布，瓦瑟斯坦-1 度量可以用数值积分来近似。值得注意的是，该距离在单调变换（例如，在尺度变换下）下不是不变的。

接下来，我们展示分布 F($$\cdot ; \theta$$) 和嵌套兴趣分布 $$F\left(\cdot ; \theta_0\right)$$ 之间瓦瑟斯坦-1 度量的数值计算示例，对于 $$\theta_0$$ 的某个固定值。我们省略了位置和比例参数，但可以轻松调整 R 代码以包含这些参数。我们还展示了该函数的图：

$$
M(\theta)=W_1\left(F(\cdot ; \theta), F\left(\cdot ; \theta_0\right)\right)=\int_{ R }\left|F(x ; \theta)-F\left(x ; \theta_0\right)\right| d x
$$

可以解释为测量参数$$\theta$$效果的函数。

偏斜正态概率密度函数为：

$$
f(x ; \lambda)=2 \phi(x) \Phi(\lambda x)
$$

其中 $$\phi$$ 和$$\Phi$$ 分别是标准正态概率密度函数和累积分布函数，$$\lambda \in R$$。在这里，我们计算 f($$x ; \lambda$$) 和 $$\phi(x)$$ 之间的瓦瑟斯坦-1 度量。

```
 library(sn)
 library(knitr)
 MW1 <- Vectorize(function(par){
   tempf <- Vectorize(function(x)  abs(psn(x, alpha=par)  - pnorm(x)) )
   val <- integrate(tempf,-Inf,Inf)$value
   return(val)
 })
 ​
 lambda <- -5:5
 W1 <- MW1(lambda)
 print(kable(cbind(lambda,W1),digits=4))
```

```
 ## 
 ## 
 ##  lambda       W1
 ## -------  -------
 ##      -5   0.7824
 ##      -4   0.7741
 ##      -3   0.7569
 ##      -2   0.7136
 ##      -1   0.5642
 ##       0   0.0000
 ##       1   0.5642
 ##       2   0.7136
 ##       3   0.7569
 ##       4   0.7741
 ##       5   0.7824
```

结果绘图

```r
 curve(MW1,-10,10, xlab = ~lambda, ylab="M", cex.axis=1.5, cex.lab=1.5, lwd=2, n = 250)
```

两部分正态概率密度函数定义为：

$$
f(x ; \gamma)=\phi\left(\frac{x}{1+\gamma}\right) I(x<0)+\phi\left(\frac{x}{1-\gamma}\right) I(x \geq 0)
$$

其中 $$\phi$$ 是标准正态概率密度函数，$$\gamma \in(-1,1)$$。在这里，我们计算 f($$x ; \gamma$$) 和$$\phi(x)$$之间的瓦瑟斯坦-1度量。

```r
 library(twopiece)
 library(knitr)
 ​
 MW1 <- Vectorize(function(par){
   tempf <- Vectorize(function(x)  abs(ptp3(x, 0, 1, par, FUN = pnorm, param = "eps")  - pnorm(x)) )
   val <- integrate(tempf,-Inf,Inf)$value
   return(val)
 })
 ​
 gamma <- seq(-0.9,0.9,by=0.1)
 W1 <- MW1(gamma)
 print(kable(cbind(gamma,W1),digits=4))
```

```
 ## 
 ## 
 ##  gamma       W1
 ## ------  -------
 ##   -0.9   1.4362
 ##   -0.8   1.2766
 ##   -0.7   1.1170
 ##   -0.6   0.9575
 ##   -0.5   0.7979
 ##   -0.4   0.6383
 ##   -0.3   0.4787
 ##   -0.2   0.3192
 ##   -0.1   0.1596
 ##    0.0   0.0000
 ##    0.1   0.1596
 ##    0.2   0.3192
 ##    0.3   0.4787
 ##    0.4   0.6383
 ##    0.5   0.7979
 ##    0.6   0.9575
 ##    0.7   1.1170
 ##    0.8   1.2766
 ##    0.9   1.4362
```

结果绘图

```r
 curve(MW1,-0.99,0.99, xlab = ~gamma, ylab="M", cex.axis=1.5, cex.lab=1.5, lwd=2, n = 250)
```

指数威布尔分布是一种三参数分布。它包含一个尺度参数、一个形状参数和一个幂（形状）参数$$\alpha$$。 指数威布尔分布包含作为特殊情况 ($$\alpha=1$$) 的威布尔分布。 指数威布尔分布已用于对生存时间进行建模，因为它的风险函数可以捕获基本形状：常数、递增、递减、浴盆和单峰。

如果我们有兴趣比较两条生存曲线 $$S_1$$ 和 $$S_2$$，一种可能的方法是计算生存曲线之间的面积，即它们之间的 $$L_1$$ 距离。此外，由于 $$S_i(\cdot)=1-F_i(\cdot), i=1,2$$，因此

$$
\int_{ R _{+}}\left|S_1(x)-S_2(x)\right| d x=\int_{ R _{+}}\left|F_1(x)-F_2(x)\right| d x=W_1\left(F_1, F_2\right)
$$

在这里，我们将测量在尺度和形状参数为 1 的情况下功率参数 $$\alpha$$ 的影响，与具有单位尺度和形状参数的威布尔分布相比。

```r
 library(knitr)
 ​
 pexpweibull<- function(t,lambda,kappa,alpha,log.p=FALSE){
   log.cdf <- alpha*pweibull(t,scale=lambda,shape=kappa,log.p=TRUE)
   ifelse(log.p, return(log.cdf), return(exp(log.cdf)))
 } 
 ​
 MW1 <- Vectorize(function(par){
   tempf <- Vectorize(function(x)  abs(pexpweibull(x, 1, 1, par)  - pweibull(x,1,1)) )
   val <- integrate(tempf,0,Inf)$value
   return(val)
 })
 ​
 alpha <- seq( 0.1,5,by=0.1)
 W1 <- MW1(alpha)
 print(kable(cbind(alpha,W1),digits=4))
```

```
 ## 
 ## 
 ##  alpha       W1
 ## ------  -------
 ##    0.1   0.8465
 ##    0.2   0.7118
 ##    0.3   0.5920
 ##    0.4   0.4842
 ##    0.5   0.3863
 ##    0.6   0.2967
 ##    0.7   0.2142
 ##    0.8   0.1378
 ##    0.9   0.0666
 ##    1.0   0.0000
 ##    1.1   0.0626
 ##    1.2   0.1215
 ##    1.3   0.1773
 ##    1.4   0.2301
 ##    1.5   0.2804
 ##    1.6   0.3283
 ##    1.7   0.3740
 ##    1.8   0.4178
 ##    1.9   0.4597
 ##    2.0   0.5000
 ##    2.1   0.5387
 ##    2.2   0.5761
 ##    2.3   0.6120
 ##    2.4   0.6468
 ##    2.5   0.6804
 ##    2.6   0.7129
 ##    2.7   0.7444
 ##    2.8   0.7749
 ##    2.9   0.8045
 ##    3.0   0.8333
 ##    3.1   0.8613
 ##    3.2   0.8886
 ##    3.3   0.9151
 ##    3.4   0.9409
 ##    3.5   0.9661
 ##    3.6   0.9907
 ##    3.7   1.0146
 ##    3.8   1.0381
 ##    3.9   1.0610
 ##    4.0   1.0833
 ##    4.1   1.1052
 ##    4.2   1.1266
 ##    4.3   1.1476
 ##    4.4   1.1682
 ##    4.5   1.1883
 ##    4.6   1.2080
 ##    4.7   1.2274
 ##    4.8   1.2464
 ##    4.9   1.2650
 ##    5.0   1.2833
```

结果绘图

```r
 curve(MW1,0.001,5, xlab = ~alpha, ylab="M", cex.axis=1.5, cex.lab=1.5, lwd=2, n = 1000)
```
