确定 R 中每个分量的样本方差百分比

问题描述

我将 PCA 应用于我的生物医学数据(31 个基因~行和 1904 个患者~列),并选择了 9 个组件。结果,我有两个子矩阵,其中一个是 9 x 1904 矩阵(我称之为矩阵 A)。

矩阵 A 表示它的行是 9 个分量,它的列是 1904 个病人,它的条目是连续值。现在我想找出这 9 个组件中的哪个组件仅拥有 1904 名患者中的一个患者,与其他患者相比,该患者的方差占 > 10%(可能将该患者视为该组件中的异常值)。最后,我计划删除这些已识别的组件。

例如,我计算每个组件内患者的方差。然后我意识到组件 3 拥有 1904 名患者中的一个患者,与其他患者相比,该患者的方差大于 10% => 我认为该组件包含一个异常值。我从组件中删除了组件 3

我一直坚持在 R 中做这件事。任何想法都值得赞赏!提前致谢。

更新:以下是我的尝试:

虚拟数据 df 表示 10 个患者~行和 3 个组件~列

df=structure(c(-0.17134779227884,-0.0962044733094678,0.0683562125182872,-0.243465849606547,0.333327443120999,-0.124616446710062,0.213423949350221,-0.086118378436248,0.209279578622201,0.425834454279314,0.16728832317405,0.952243725136014,-0.101114176191555,0.187773366984759,0.207570066964501,-0.117920965767025,0.939250613987857,-0.00465861655152568,-0.288348010784738,0.0469224124443503,-0.165934907003698,-0.18339647933408,-0.098550778268536,-0.094031840482207,0.0759839405752319,-0.141524045263773,-0.0665849661695848,-0.442355221875939,-0.156962689636778,-0.142727471861712),.Dim = c(10L,3L),.Dimnames = list(c("MB-0362","MB-0346","MB-0386","MB-0574","MB-0503","MB-0641","MB-0201","MB-0218","MB-0316","MB-0189"),c("comp 1","comp 2","comp 3"
)))

我尝试计算每个患者的方差对三个分量中的每一个的贡献

df1 = as.data.frame(df)
df1$Patients = rownames(df) 
df1 = as.data.frame(df1) %>%
  pivot_longer(-Patients,names_to = "Component",values_to = "Weight") %>%
  group_by(Component) %>%
  mutate(var = var(Weight))

现在我必须计算每个患者对每个组件的方差百分比。我被这个问题困住了:(

解决方法

哇,也许我自己解决了我的问题。以下是我的解决方案

df1 = as.data.frame(df)
df1$Patients = rownames(df) 
df1 = as.data.frame(df1) %>%
  pivot_longer(-Patients,names_to = "Component",values_to = "Weight") %>%
  group_by(Component) %>%
  mutate(var = var(Weight)) %>%
  group_by(Patients) %>%
  mutate(percent = var/sum(var) * 100)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...