library(Seurat)
library(Seurat)
# ここでanaconda rstudioでvelocytoデータを読み込む
library(velocyto.R)
library(Seurat)
library(Seurat)
library(library(shiny)
ui <- fluidPage(
)
server <- function(input, output, session) {
}
shinyApp(ui, server))
library(Seurat)
library(Seurat)
library(shiny)
install.packages("shiny")
library(shiny)
library(shiny)
library(Seurat)
?VlnPlot
?RunPCA
library(r-shiny)
library(shiny)
library(shiny)
install.packages("shiny", type="binary")
library(remotes)
remotes::install_github('immunogenomics/presto')
remotes::install_github('immunogenomics/presto')
lirary(remote_sha())
lobrary(remotes)
lirbary(remotes)
library(remotes)
remotes::install_github('immunogenomics/presto')
`pkgbuild::check_build_tools(debug= TRUE)
pkgbuild::check_build_tools(debug= TRUE)
pkgbuild::check_build_tools(debug= F)
wilcoxauc.Seurat(X
library(remotes)
install_github('immunogenomics/presto')
install.packages("githubinstall")
library(githubinstall)
githubinstall("immunogenomics/presto")
library(presto)
library("presto")
githubinstall('immunogenomics/presto')
githubinstall('immunogenomics/presto', force = T)
library(presto)
githubinstall('presto')
install.@a
install.packages("presto")
installed.packages("presto")
installed.packages("tidyverse)
installed.packages("tidyverse")
remotes::install_github('immunogenomics/presto')
pkgbuild::check_build_tools(debug = TRUE)
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(c("Gviz", "GenomicRanges", "rtracklayer"))
library(Gviz)
library(GenomicRanges)
library(rtracklayer)
devtools::install_github("cole-trapnell-lab/cicero-release", ref = "monocle3")
library(cicero)
BiocManager::install(c('BiocGenerics', 'DelayedArray', 'DelayedMatrixStats',
'limma', 'S4Vectors', 'SingleCellExperiment',
'SummarizedExperiment', 'batchelor', 'Matrix.utils'))
install.packages("devtools")
install.packages("devtools")
devtools::install_github('cole-trapnell-lab/leidenbase')
devtools::install_github('cole-trapnell-lab/monocle3')
library(Seurat)
library(Signac)
library(EnsDb.Mmusculus.v79)
library(GenomeInfoDb)
library(tidyverse)
library(GenomicRanges)
library(future)
library(JASPAR2020)
library(TFBSTools)
library(BSgenome.Mmusculus.UCSC.mm10)
library(patchwork)
library(tictoc) # 処理時間計測
library(motifmatchr)
# library(gtools) # 順列計算
set.seed(1234)
setwd("~/Downloads/GEX-ATAC-data/analysis/EYFP_merge/v4")
EYFP_merge <- readRDS("EYFP_merge_subcluster.motif.chromvar_cicero.rds")
DefaultAssay(EYFP_merge)
macs2 <- readRDS("peaks.rds")
# mm10 genomeにデータフレームとして任意のローカスにアクセスできる
# annotations <- GetGRangesFromEnsDb(ensdb = EnsDb.Mmusculus.v79)
# seqlevelsStyle(annotations) <- 'UCSC'
# genome(annotations) <- "mm10"
# これは実施済みで、そのデータはEYFP_merge[["ATAC"]]@annotationにある
df.genome <- data.frame(EYFP_merge[["ATAC"]]@annotation)
genome <- BSgenome.Mmusculus.UCSC.mm10
# targetは指定するものの、TFは746種全てを対象とするように自動化プログラムを作る
opts <- list()
# opts[["species"]] <- 9606
# opts[["type"]] <- "SELEX"
opts[["tax_group"]] <-  "vertebrates"
opts[["all_versions"]] <- FALSE
PFMatrixList <- getMatrixSet(JASPAR2020, opts)
PFMatrixList
tfs <- c()
for(i in 1:length(PFMatrixList@listData)){
tmp <- PFMatrixList@listData[[i]]@name %>% as.data.frame()
tmp2 <- PFMatrixList@listData[[i]]@ID %>% as.data.frame()
tmp3 <- cbind(tmp, tmp2)
tfs <- rbind(tfs, tmp3)
}
colnames(tfs) <- c("name", "ID")
tfs %>% head
# tfsが遺伝子名が大文字,小文字、()などばらばらなので調整する
# すべて大文字にしてしまう
tfs$name <- tfs$name %>% str_to_upper()
# TF名に::や(var.2)などがいるので綺麗にする
# まずnormal
normal <-  tfs$name %>% str_detect(pattern = c("VAR."), negate = T) # 否定
normaltfs <- tfs[normal,]
normal <- normaltfs$name %>% str_detect(pattern = c("::"), negate = T) # 否定
normaltfs <- normaltfs[normal,]
normaltfs
# irregularその2
irregular <-  tfs$name %>% str_detect(pattern = "VAR.")
irregular2 <- tfs[irregular,]
# ::がつくものはirregular1で検出されるので、irregular2では除く
irregular3 <- irregular2$name %>% str_detect(pattern = "::", negate = T)
irregular2 <- irregular2[irregular3,]
irregular2$name <- irregular2$name %>% str_replace(pattern =　"VAR.2", replacement = "")
irregular2$name <- irregular2$name %>% str_replace(pattern =　"VAR.3", replacement = "")
irregular2$name　<- irregular2$name %>% str_remove(pattern = "\\(\\)") # \\で特殊文字を表現する
irregular2
# irregularその1
irregular <-  tfs$name %>% str_detect(pattern = "::")
irregular1 <- tfs[irregular,]
tmp <- irregular1$name %>% str_split(pattern ="::", simplify = T) %>% as.data.frame()
irregular1_1 <- cbind(tmp$V1, irregular1$ID)
irregular1_2 <- cbind(tmp$V2, irregular1$ID)
irregular1 <- rbind(irregular1_1, irregular1_2) %>% as.data.frame()
# irregular1のなかでもvarがつくものがあるので修正
irregular1$V1 <- irregular1$V1 %>%  str_replace(pattern =　"VAR.2", replacement = "")
irregular1$V1 <- irregular1$V1 %>%  str_replace(pattern =　"VAR.3", replacement = "")
irregular1$V1　<- irregular1$V1 %>% str_remove(pattern = "\\(\\)") # \\で特殊文字を表現する
colnames(irregular1) <- c("name", "ID")
tfs2 <- rbind(normaltfs, irregular2, irregular1)
# コミュニティのうち、TFがtfs2の中にあるものしかモチーフマッチングできないので、予めコミュニティをトリミングしておく
using.tfs <- paste(tfs2$name %>% str_sub(start = 1, end = 1), tfs2$name %>% str_sub(start = 2) %>% str_to_lower(), sep = "")
setwd("~/Downloads/GEX-ATAC-data/analysis/EYFP_merge/v4/peaks/motifs_mapping/v7/")
##############
# 転写因子のゲノム結合領域を指定する
# v7
##############
# 10Xのrangesに対して746転写因子で検索
search.peaks <- EYFP_merge[["ATAC"]]@ranges
# motif_pos <- matchMotifs(PFMatrixList, search.peaks, genome = genome,  out = c("positions"))
# 保存
# saveRDS(motif_pos, "motif_pos.rds")
motif_pos <- readRDS("motif_pos.rds")
##############
# コミュニティデータをの取得からカウント値の算出まで
data_atac.final <- EYFP_merge@meta.data %>% select(sub.cluster)
meta.final <- matrix(ncol = 2) %>% as.data.frame() # メタデータ
colnames(meta.final) <- c("OC", "matching")
tic()
for(r in 1:109){
setwd("~/Downloads/scRNA-seq/20200403_Seuratv3_based2/SiGN-BN/200514_test/4thv2/modularity_overlapward2/Community/all_v3.2_OC")
community <- read.table(paste("OC_", r, ".txt", sep = ""),  header = T)
# community <- read.table("community_86.txt", header = T)
community <- community %>% filter(Parent %in% using.tfs)
# このusing.tfsのフィルタリングでコミュニティが消える可能性がある。その場合の条件分岐を書く
if(nrow(community) > 0){
##############
# targetはコミュニティ内の変数ごとに計算される
setwd("~/Downloads/GEX-ATAC-data/analysis/EYFP_merge/v4/peaks/motifs_mapping/v7/overallcommunity/")
dir.create(paste("OC_", r, sep = ""))
setwd((paste("OC_", r, sep = "")))
for(p in 1:nrow(community)){
TF <- community$Parent[p] %>% str_to_upper()
target <- community$Child[p]
TF
target
####
# targetを対象として、TSSとlinksでつながる領域を特定し、rangesとmacs2の解析すべき対象と決める
###
# gene_nameで任意の遺伝子にアクセス
# annotations[annotations$gene_name == "Col2a1"]
if(df.genome %>% dplyr::filter(gene_name == target) %>% nrow() > 0) { # EnsDb.Mmusculus.v79ではCebpdはアノテーションに入っていない。その条件分岐
chr.min <- df.genome %>% dplyr::filter(gene_name == target) %>% select(start, end) %>% min()
chr.max <- df.genome %>% dplyr::filter(gene_name == target) %>% select(start, end) %>% max()
chr.tmp <- df.genome %>% dplyr::filter(gene_name == target) %>% select(seqnames)
chr.tmp <- paste(as.character(chr.tmp[1,1]), "-", chr.min, "-", chr.max, sep = "")
chr.tmp
# chr.tmpはtargetの遺伝子座
strand <-  df.genome %>% dplyr::filter(gene_name == target)
strand <-as.character(strand$strand)[1]
strand
# strandの向き
target.chr <- df.genome %>% dplyr::filter(gene_name == target) %>% select(seqnames)
target.chr <- target.chr$seqnames[1] %>% as.character()
target.chr
# target.chrがtargetの染色体
# TSS付近はchr.minに相当するので、chr.minとLinksでつながる領域をモチーフの検索対象とする
links.df <- data.frame(EYFP_merge[["ATAC"]]@links)
links.df <- links.df %>% dplyr::filter(seqnames == target.chr)
# chr.minが遺伝子領域を超えて5'側にまたがったピークになることがあるので、chr.minが含まれるピークを抽出。strandの向きでTSSの定義が変わるので
# if文で処理する
if(strand == "+"){
# + strandの場合
ranges.df <- data.frame(EYFP_merge[["ATAC"]]@ranges)
ranges.df$number <- 1:nrow(ranges.df) # あとでgranges objectから抽出するときに使う
ranges.tmp <- ranges.df %>% dplyr::filter(seqnames == target.chr) %>% dplyr::filter(start < chr.min) %>% arrange(-start)
ranges.TSS <- ranges.tmp[1,]
# ranges.tmpがATAC上のTSSに相当する
# links.df3はTSSの3'とリンクする領域
links.df3 <- links.df %>% dplyr::filter(start > ranges.TSS$start,  start < ranges.TSS$end) # links.dfのstartがTSS内部にある
# links.df5はTSSの5'とリンクする領域
links.df5 <- links.df %>% dplyr::filter(end > ranges.TSS$start,  end < ranges.TSS$end) # links.dfのendがTSS内部にある
links.df <- rbind(links.df3, links.df5)
}else{
# - strandの場合
ranges.df <- data.frame(EYFP_merge[["ATAC"]]@ranges)
ranges.df$number <- 1:nrow(ranges.df) # あとでgranges objectから抽出するときに使う
ranges.tmp <- ranges.df %>% dplyr::filter(seqnames == target.chr) %>% dplyr::filter(end > chr.max) %>% arrange(start)
ranges.TSS <- ranges.tmp[1,]
# ranges.tmpがATAC上のTSSに相当する
# links.df3はTSSの3'とリンクする領域
links.df3 <- links.df %>% dplyr::filter(start > ranges.TSS$start,  start < ranges.TSS$end) # links.dfのstartがTSS内部にある
# links.df5はTSSの5'とリンクする領域
links.df5 <- links.df %>% dplyr::filter(end > ranges.TSS$start,  end < ranges.TSS$end) # links.dfのendがTSS内部にある
links.df <- rbind(links.df3, links.df5)
}
# write.table(links.df,
#             paste("links.df_", target, ".txt", sep = ""), quote = F, sep = "\t", row.names = F)
# # ranges.tmpに挟まれたlinkと相関するリンクが目的のTSSと相関するゲノム領域がlinks.dfである
ranges.TSS　# TSSのピーク
ranges.TSS$index <- "TSS"
# links.dfのピーク内にmotif_posで指定された部分があるかどうか調べる
# links.dfはリンク情報なので遠い関係を示しているので、links.dfの属する箇所をgrangesで特定する。
# その範囲内にmotif_posがあるものを抽出する。それをranges.showにして可視化する（motif.posだけだと10bpほどなので可視化しても見えない）
# つまり、ATACのピークでTSSとlinksでつながるもののうち、motif.posもある領域を特定する
############
# ここで重複があるかもしれないので内在的にfor文を書く
# しかもcommunityはマウス用遺伝子表記なので、予めTFを大文字に変換してある
for(q in 1:(tfs2 %>% dplyr::filter(name == TF) %>% nrow())){
TFname.df <- tfs2 %>% dplyr::filter(name == TF) # 遺伝子nameが重複している場合のためにqを変数としてforをする
id <- TFname.df$ID[q]
motif.tmp <- motif_pos[[id]] %>% as.data.frame() %>% dplyr::filter(seqnames == target.chr)
# links.df$end、つまりTSSのリンク先がranges.dfのどの領域内にあるかを抽出するために
# links.df$end[l]より小さいstartのうち、startが最大のものが１番links.df$end[l]に近いゲノム領域
# これをrangesで実施する
ranges.links <- c()
# 実は、ここもTSSの5'か3'かで場合分けが必要
if(nrow(links.df3) > 0){
for(l in 1:nrow(links.df3)){
# TSSより3'のデータに対して
ranges.tmp <- ranges.df %>% dplyr::filter(seqnames == target.chr) %>% dplyr::filter(start < links.df3$end[l]) %>% arrange(-start)
ranges.tmp <- ranges.tmp[1,]
ranges.links <- rbind(ranges.links, ranges.tmp)
} #ここでlが終わる
}
if(nrow(links.df5) > 0){
for(l in 1:nrow(links.df5)){
# TSSより5'のデータに対して
ranges.tmp <- ranges.df %>% dplyr::filter(seqnames == target.chr) %>% dplyr::filter(start < links.df5$start[l]) %>% arrange(-start)
ranges.tmp <- ranges.tmp[1,]
ranges.links <- rbind(ranges.links, ranges.tmp)
} #ここでlが終わる
}
if(is.null(ranges.links) == F){ # ranges.linksがNULLのときの条件分岐
# TSSを追加
ranges.links$index <- "Peaks"
ranges.links <- rbind(ranges.TSS, ranges.links)
# motif.tmpがある領域を取得する
motif.tmp.filtered <- c()　# 毎度空にする
ranges.links.min <- ranges.links %>% select(start, end) %>% min
ranges.links.max <- ranges.links %>% select(start, end) %>% max
motif.tmp.filtered <- motif.tmp %>% dplyr::filter(start > ranges.links.min) %>% dplyr::filter(end < ranges.links.max) #フィルタリング
# motif.tmp.filteredが存在するかどうかの条件分岐
if(nrow(motif.tmp.filtered) > 0){
# motif.tmp.dplyr::filteredの10 bpほどの配列データを残しておく（v7デフォルトではそうだが、コミュニティ用では計算コスト縮小のため省略する）
# using.ranges <- c() # 毎度空にする
# using.ranges <- motif.tmp.filtered %>% select(seqnames, start, end) %>% apply(1, paste, collapse = "-")
# using.ranges <- StringToGRanges(using.ranges)
# range.seqs <- getSeq(genome, using.ranges) %>% data.frame()
# colnames(range.seqs) <- "sequence"
# motif.tmp.filtered <- cbind(motif.tmp.dplyr::filtered, range.seqs)
# # 保存
# write.table(motif.tmp.dplyr::filtered, paste(TF, "_", target, "_links_motif.ranges.txt", sep = ""),  quote = F, sep = "\t", col.names =NA)
ranges.links.final <- c()
for(m in 1:nrow(ranges.links)){
for(n in 1:nrow(motif.tmp.filtered)){
if((ranges.links$start[m] < motif.tmp.filtered$start[n]) & (ranges.links$end[m] > motif.tmp.filtered$end[n])){
ranges.links.final <- rbind(ranges.links.final, ranges.links[m,])
}
}#ここでnが終わる
} #ここでmが終わる
# TSSもモチーフの検索対象に加えているのでOK
if(is.null(ranges.links.final) == F){ # ranges.links.finalがどれかにマッチしたときだけ保存する
ranges.links.final <- ranges.links.final %>% distinct(start, end, .keep_all = T)
write.table(ranges.links.final, paste(TF, "_", target, "_", "ranges.search.txt", sep = ""), quote = F, sep = "\t", row.names = F)
# これがtargetとlinkのあるピークでTFのモチーフがヒットした配列
# このranges.links.finalのカウント数をクラスタごとに算出する
# ranges.links.final <- ranges.links.final %>% select(seqnames, start, end) %>% apply(1,paste, collapse = "-")
ranges.links.final <- cbind( ranges.links.final$seqnames %>% as.character(),
ranges.links.final$start, ranges.links.final$end)
ranges.links.final <- ranges.links.final %>%  apply(1,paste, collapse = "-")
data_atac <- c()
data_atac <- EYFP_merge[["ATAC"]]@data[ranges.links.final,] %>% as.data.frame() %>% t() %>% as.data.frame()
matching.mean <- data_atac %>% apply(1, mean) %>% as.data.frame()
colnames(matching.mean) <- paste(community$Parent[p], community$Child[p], id ,sep = "_")
data_atac.final <- cbind(data_atac.final, matching.mean)
# 後で下処理しやすいようにメタデータも同時に作成する
meta <- matrix(ncol = 2) %>% as.data.frame() # メタデータ
colnames(meta) <- c("OC", "matching")
meta$OC <- paste("OC", r ,sep = "")
meta$matching <- colnames(matching.mean)
meta.final <- rbind(meta.final, meta)
gc(); gc()
} # ranges.links.finalがどれかにマッチしたときだけ保存する
} # # motif.tmp.filteredが存在するかどうかの条件分岐
} # ranges.linksがNULLのときの条件分岐
} # ここでqが終わる
} # EnsDb.Mmusculus.v79ではCebpdはアノテーションに入っていない。その条件分岐
} # ここでpが終わる
}
} # rがここで終わる
toc()
gc()
memory.limit()
library(Seurat)
library(Seurat)
library(shiny)
install.packages("shiny")
library(shiny)
library(Seurat)
packageVersion("Seurat")
q()
200/330.31
2/330.31*0.6
2/330.31
2/330.31/0.6
50/6
1/330.31
1/330.31/0.03
1.69*98
500/2.5
1.69/98
1.69*165.62/98
1.69*98
1.69*165.62
279.98
279/98
98/1.69
1.69*5.798
1.69*5.798/0.2
1.69*5.798/0.02
1.69*5.798
1.69*5.798/98
0.09/0.02
1.69*5.798/98/0.02
library(Gviz)
genome <- "mm10"
chr <- "chr14"
genome <- "mm10"
chr <- "chr11"
from <- 112779417
to <- 112791875
knownGenes <- UcscTrack(genome=genome, chromosome=chr, track="knownGene", from=from, to=to,
trackType="GeneRegionTrack", rstarts="exonStarts", rends="exonEnds",
gene="name", symbol="name", transcript="name", strand="strand",
fill="#8282d2", name="UCSC Genes")
˜?UcscTrack
?UcscTrack
library(rtracklayer)
data(targets)
targets
View(targets)
###################################################
### chunk number 2: rtl-miRNA-track
###################################################
targetTrack <- makeGRangesFromDataFrame(targets,
keep.extra.columns=TRUE)
View(targetTrack)
View(targetTrack)
###################################################
### chunk number 4: rtl-ucsc-start
###################################################
session <- browserSession()
genome(session) <- "hg18"
View(session)
###################################################
### chunk number 5: rtl-ucsc-lay
###################################################
session$targets <- targetTrack
View(session)
###################################################
### chunk number 6: rtl-ucsc-view eval=FALSE
###################################################
top <- targetTrack$target == targets$target[1]
top
range <- targetTrack[top,] * -10
view <- browserView(session, range,
hide = c("refGene", "mgcFullMrna", "intronEst"),
dense = "knownGene", squish = "cons44way")
library(Seurat)
library(tidyverse)
df <- read.table("expMat.txt", header = T)
setwd("/Volumes/Neon-HD/5.open_seq_data/Yoshimoto_etal_2022/analysis")
df <- read.table("expMat.txt", header = T)
View(df)
df <- df[-c(1)]
meta <- colnames(df)
meta <- colnames(df) %>% str_sub(start = 1, end3)
meta <- colnames(df) %>% str_sub(start = 1, end = 3)
meta <- colnames(df) %>% str_sub(start = 1, end = 2)
meta <- colnames(df) %>% str_sub(start = 1, end = 2) %>% as.data.frame()
View(meta)
View(meta)
rownames(meta) <- colnames(df)
colnames(meta) <- "timepoint"
ips<- CreateSeuratObject(counts = df, project = "ips", min.cells = 3, min.features = 200, meta.data = meta)
ips
rownames(ips) %>% as.data.frame() %>% VIew
rownames(ips) %>% as.data.frame() %>% View
# QC
ips[["percent.mt"]] <- PercentageFeatureSet(ips, pattern = "^mt-")
VlnPlot(ips, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
ggsave("0_QC_violin_ips.pdf", height = 4, width = 8)
plot1 <- FeatureScatter(ips, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(ips, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot1 + plot2
ggsave("0_QC_scatter_ips.pdf", height = 4, width = 12)
# filtering
ips <- subset(ips, subset = nFeature_RNA > 1500 & nFeature_RNA < 6000 & percent.mt < 20)
dim(ips)
ips <- SCTransform(ips, vars.to.regress = "percent.mt", verbose = FALSE)
ips <- RunPCA(ips, verbose = FALSE)
ips <- RunUMAP(ips, dims = 1:30, verbose = FALSE)
ips <- FindNeighbors(ips, dims = 1:30, verbose = FALSE)
ips <- FindClusters(ips, verbose = FALSE)
DimPlot(ips, label = TRUE) + NoLegend()
ggsave("1_umap_cluster_ips.pdf", width = 4, height = 4)
# markers
markers <- FindAllMarkers(ips, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
DimPlot(ips, label = TRUE)
ggsave("1_umap_cluster_ips.pdf", width = 4, height = 4)
write.table(markers, "markers_ips.txt", quote = F, sep = "\t", row.names = F)
top <- markers %>%
group_by(cluster) %>%
slice_max(n = 10, order_by = avg_log2FC)
DoHeatmap(ips, features = top$gene)
ggsave("1_heatmap_top10_log2FC_ips.png", height = 15, width = 6)
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1"
), pt.size = 0.1)
ggsave("1_Featureplot1_ips.pdf", height = 8, width = 6)
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1",
"Tbx20","Foxp2", "Acta2", "Myh11", "Osr1","Foxc1", "Foxc2",
"Cdh5"), pt.size = 0.1)
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1",
"Tbx20","Foxp2", "Acta2", "Myh11", "Osr1","Foxc1", "Foxc2",
"Pou5f1", "Sox2"), pt.size = 0.1)
ips<- CreateSeuratObject(counts = df, project = "ips", min.cells = 3, min.features = 200, meta.data = meta)
ips
# QC
ips[["percent.mt"]] <- PercentageFeatureSet(ips, pattern = "^mt-")
VlnPlot(ips, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
ggsave("0_QC_violin_ips.pdf", height = 4, width = 8)
plot1 <- FeatureScatter(ips, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(ips, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot1 + plot2
ips <- SCTransform(ips,  verbose = FALSE)
ips <- RunPCA(ips, verbose = FALSE)
ips <- RunUMAP(ips, dims = 1:30, verbose = FALSE)
ips <- FindNeighbors(ips, dims = 1:30, verbose = FALSE)
ips <- FindClusters(ips, verbose = FALSE)
DimPlot(ips, label = TRUE)
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1","Po5f1","Sox2"))
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1","Pou5f1","Sox2"))
ips<- CreateSeuratObject(counts = df, project = "ips", min.cells = 3, min.features = 200, meta.data = meta)
ips
# QC
ips[["percent.mt"]] <- PercentageFeatureSet(ips, pattern = "^mt-")
VlnPlot(ips, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
# filtering
ips <- subset(ips, subset = nFeature_RNA > 1500 & nFeature_RNA < 6000 & percent.mt < 20)
dim(ips)
ips <- SCTransform(ips, vars.to.regress = "percent.mt", verbose = FALSE)
ips <- RunPCA(ips, verbose = FALSE)
ips <- RunUMAP(ips, dims = 1:30, verbose = FALSE)
ips <- FindNeighbors(ips, dims = 1:30, verbose = FALSE)
ips <- FindClusters(ips, verbose = FALSE)
DimPlot(ips, label = TRUE)
# 保存
saveRDS(ips, "ips.rds")
setwd("~/Documents/Iwase_etal_2020/投稿用/SupplementaryData")
xl <- read_excel("SupplementaryData5.xlsx", sheet = 4)
goi <- xl %>% filter(OC == "58") %>% select(Parent) %>% unique()
library(readxl)
setwd("~/Documents/Iwase_etal_2020/投稿用/SupplementaryData")
xl <- read_excel("SupplementaryData5.xlsx", sheet = 4)
goi <- xl %>% filter(OC == "58") %>% select(Parent) %>% unique()
FeaturePlot(ips, features = goi$Parent)
goi <- xl %>% filter(OC == "86") %>% select(Parent) %>% unique()
FeaturePlot(ips, features = goi$Parent)
goi <- xl %>% filter(OC == "91") %>% select(Parent) %>% unique()
FeaturePlot(ips, features = goi$Parent)
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1", "Runx2"," Cd44","Cd90"
), pt.size = 0.1)
FeaturePlot(ips, features = c("Sox9", "Scx", "Runx2", "Sp7", "Meox1","Twist1", "Runx2"," Cd44","Thy1"
), pt.size = 0.1)
ggsave("1_Featureplot1_ips.pdf", height = 8, width = 8)
