使用 R 中的累积分布函数开发新的输出

Develop new output using cumulative distribution function in R

上下文:每个部分都是引擎中的一个部分,每个部分需要 'repaired/fixed/adjusted/etc' 之前所花费的总时间是我基本上想要生成的。将变量视为三个不同的引擎。推荐 'time thresholds' 指示每个部分应该发生什么(类似于换油类比以及它们如何确定何时带入下一个 - x 英里数等)。我需要使用实际数据(服务小时数)为每个引擎的每个部件创建新的阈值范围(小于 x 小时,大于 x 小时)。

输出示例(组成阈值): 第 1 部分 -- x <10,000 小时,x = 10 - 16,000 小时,且 x > 16,000 小时

我是这个概念的新手,但这就是问题所在,数据如下:

我尝试了一些初步分析来测量每个变量的数据分布(请注意,数据以小时为单位)。每一行都是一个零件,时间显示该零件在需要进入商店之前的性能。与 'recommended time to get your oil change' 类似,我需要使用实际零件性能数据来得出新的阈值范围(以小时为单位)。

## Random Matrix - Three Variables - 50 rows ##
trial <- matrix(sample(70000, replace = TRUE), ncol=4, nrow = 100)
colnames(trial) <- c('Part_Num', 'A (hours)', 'B (hours)', 'C (hours)')
trial <- as.data.frame(trial)
trial$Part_Num <- sample(c('A23ed', 'dfsa34','gsafa43', 'fsafa32', 'gasfa6'), 100, replace = TRUE) #sample random values

plot(ecdf(df[,"MFP"]))

如果对于每个变量(A、B 和 C),我的建议时间范围为 < 10k、10 - 14k 和 >14k 小时来对零件进行处理,我如何使用累积分布函数想出三个变量中每个部分的新范围?

这里有些东西可能会给你一些想法。

由于我们处理的是故障时间数据,因此在 survival analysis. The idea is to visualise the survival probability of every machine part in every engine as a function of time. A good starting point is to take a look at the corresponding Kaplan-Meier curves 的上下文中探索数据是有意义的。我们将使用 survivalsurvminer 库,它们提供了所有必要的分析和绘图方法。

我们首先将数据从宽变长,并确保数据的格式整齐且适合下游的生存分析。

数据整理

library(tidyverse)
df <- trial %>%
    gather(engine, time, -Part_Num) %>%
    mutate(engine = str_remove(engine, " \(hours\)")) %>%
    mutate(
        status = 1,
        time = as.numeric(time),
        Part_Num = as.factor(Part_Num),
        engine = as.factor(engine))

我们现在计算 Kaplan-Meier (KM) 估计值,并显示每个引擎的每个机器部件的相应 KM 生存曲线。

生存曲线

library(survival)
library(survminer)
fit <- survfit(Surv(time, status) ~ engine + Part_Num, data = df)

gg <- ggsurvplot(fit, data = df, risk.table = FALSE)
gg$plot +
    theme_minimal() +
    facet_grid(engine ~ Part_Num) +
    theme(axis.text.x = element_text(angle = 90))

最佳分割点

第一步,您应该查看每个引擎中每个机器部件的 mean/median 生存时间。 survfit 的输出对象将为您提供这些详细信息,以及 95%(默认情况下)的置信区间。

另一个有趣的可能性是在存在表征每个发动机中每个机器部件的连续变量的情况下确定最佳时间切点是使用 maximally selected ranked statistics (maxstat)survminer 方便地提供了这种方法。

为了我不做你的功课,你应该看看 ?survival::survfit?survminer::surv_cutpoint 以了解如何实施这些方法。它应该相当简单。