이상치 셀의 ID를 대화식으로 찾습니다.

10952 단어 Rbioinformatics
single-cell RNA-Seq로 차원 압축한 후, 이상치 세포가 있을 경우, 이들 세포의 ID를 취득하는 방법.

여기에서는, 100세포 중, 91~100번째의 세포가 이상치 세포라고 상정.
# PCAの結果だとする
# 91〜100番目に外れ値細胞が入っているけど、本番ではそれがわからないと仮定する
test.data <- data.frame(
                PC1 = c(rnorm(90), rnorm(10, 4)),
                PC2 = c(rnorm(90), rnorm(10, 4)),
                PC3 = c(rnorm(90), rnorm(10, 4))
                )
rownames(test.data) <- paste0("Cell", 1:100)
index.test.data <- c(rep(rgb(0,0,1,0.5), 90), rep(rgb(1,0,0,0.5), 10))
names(index.test.data) <- c(rep("Normal", 90), rep("Outlier", 10))

pairs(test.data, col=index.test.data, pch=16)



R의 표준 함수(plot, pairs 등)에서는 점과 라벨을 동시에 보기 쉽게 보여주는 것이 번거로울 것 같다.
그래서 몇 가지 확장 패키지를 시도했습니다.

방법 1 : rgl 패키지


library("rgl")
plot3d(test.data, col=index.test.data)
text3d(test.data, text=rownames(test.data))



이 방법이라면, 미리 세포의 ID를 데이터 점 위에 겹쳐 놓는다.

간단하지만 데이터 점이 많을수록 ID가 길어질수록 보기 어려워진다는 약점도 있다.

방법 2 : plotly 패키지


library("plotly")
plot_ly(test.data, x = PC1, y = PC2, z = PC3,
    type = "scatter3d", mode = "markers",
    text = rownames(test.data),
    group = names(index.test.data)
    )



plotly는 한 번 plotly 서버에서 계정 작성, API 키 취득 등의 절차를 거치고, 서버 측에서 그리기 때문에, 사용하기 어려웠지만, 최근 로컬에서도 실행할 수 있게 된 것 같고, 최근 몹시 사용하기 쉽다.
그림과 같이 커서를 맞추면 그 데이터 점의 세포 ID나 좌표, 그 외 메타 정보가 나온다.

또, 2차원의 산포도라면, 커서로 선택한 에리어만 줌 하는 것도 할 수 있다(3차원에서는 할 수 없다?).
plot_ly(test.data[,1:2], x = PC1, y = PC2,
    type = "scatter", mode = "markers",
    text = rownames(test.data),
    group = names(index.test.data)
    )




방법 3 : pairsD3 패키지


library("pairsD3")
pairsD3(test.data, group=names(index.test.data))

# Shinyでサーバーが立ち上がるが、止め方がわからない => Rを一回閉じることになる?
# shinypairs(test.data, group=names(index.test.data))



이 방법은, pairs 함수를 그대로 인터랙티브하게 한 느낌으로, 사용하기 쉽다.
shinypairs 함수로 Shiny 서버를 시작하면, 선택한 데이터의 리스트를 취득할 수 있어 편리하고, 그 자리에서 파라미터를 조작하는 것도 가능하게 되지만, 이 함수는 한 번 기동하면 멈출 수 없는 것 같다.

좋은 웹페이지 즐겨찾기