Accessors, and setters
- the cellIntensity() function accesses cell Intensity
- getCoordinates() accesses spatial data.
- getNeighborhood() access the histoCAT neighborhood features
- getDistance() accesses distance matrix input.
- getMorphology() accesses morphology features.
- the metadata() function can store extras .
#get cellintensities
cellIntensity(x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 1 1 1 1 1 1 1 1 1
## [2,] 1 1 1 1 1 1 1 1 1 1
## [3,] 1 1 1 1 1 1 1 1 1 1
## [4,] 1 1 1 1 1 1 1 1 1 1
## [5,] 1 1 1 1 1 1 1 1 1 1
## [6,] 1 1 1 1 1 1 1 1 1 1
## [7,] 1 1 1 1 1 1 1 1 1 1
## [8,] 1 1 1 1 1 1 1 1 1 1
## [9,] 1 1 1 1 1 1 1 1 1 1
## [10,] 1 1 1 1 1 1 1 1 1 1
#set intensities
newIn<-matrix(rnorm(100,2,5),nrow=10,ncol=10)
rownames(newIn)<-rownames(x)
colnames(newIn)<-colnames(x)
cellIntensity(x)<-newIn
cellIntensity(x)==newIn
## A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
## a TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## b TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## c TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## d TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## e TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## f TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## g TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## h TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## i TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## j TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
# if we want to store both the raw and normalized values in assays we can.
assays(x,withDimnames = FALSE)$raw<-matrix(1,nrow=10,ncol=10)
#store the normalized values.
cellIntensity(x)<-asinh(counts(x)/0.5)
all(cellIntensity(x)==asinh(assays(x)$counts/0.5))
## [1] TRUE
## class: imcExperiment
## dim: 10 10
## metadata(0):
## assays(2): counts raw
## rownames(10): a b ... i j
## rowData names(0):
## colnames(10): A1 A2 ... A9 A10
## colData names(1): ROIID
## reducedDimNames(0):
## mainExpName: NULL
## altExpNames(0):
## access the coordinates
getCoordinates(x)
## [,1] [,2]
## [1,] 1 1
## [2,] 1 1
## [3,] 1 1
## [4,] 1 1
## [5,] 1 1
## [6,] 1 1
## [7,] 1 1
## [8,] 1 1
## [9,] 1 1
## [10,] 1 1
getCoordinates(x)<-matrix(rnorm(20,0,10),nrow=10,ncol=2)
head( getCoordinates(x))
## [,1] [,2]
## [1,] 3.034747 13.365824
## [2,] 9.539573 1.423551
## [3,] -2.979820 2.273039
## [4,] 16.536503 -14.772502
## [5,] -32.479697 -2.861809
## [6,] 12.148118 -13.097818
## access the neighborhood profile. Note each row must equal the number of cells, but the columns can be extended depending on the radius of interactions.
## access the coordinates
getNeighborhood(x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 1 1 1 1 1 1 1 1 1
## [2,] 1 1 1 1 1 1 1 1 1 1
## [3,] 1 1 1 1 1 1 1 1 1 1
## [4,] 1 1 1 1 1 1 1 1 1 1
## [5,] 1 1 1 1 1 1 1 1 1 1
## [6,] 1 1 1 1 1 1 1 1 1 1
## [7,] 1 1 1 1 1 1 1 1 1 1
## [8,] 1 1 1 1 1 1 1 1 1 1
## [9,] 1 1 1 1 1 1 1 1 1 1
## [10,] 1 1 1 1 1 1 1 1 1 1
getNeighborhood(x)<-matrix(rnorm(100,1,5),nrow=10,ncol=10)
head( getNeighborhood(x))
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1.4470953 0.9128426 3.768759 0.8406094 -6.114329 7.8022419
## [2,] -1.2536198 -3.5086605 -4.882563 4.2606125 -5.187257 5.9874954
## [3,] -0.7306890 3.9928835 5.626202 9.7837743 9.005965 8.9816927
## [4,] 5.7565770 6.2721845 6.443988 0.6390971 -5.802902 3.0645971
## [5,] 0.8503295 4.4339637 -2.423731 -0.8901062 -8.708438 -0.1458067
## [6,] 9.2245482 5.2018657 3.629917 -3.3067429 -2.863778 -11.8413331
## [,7] [,8] [,9] [,10]
## [1,] 1.8926566 -0.2676582 6.0792030 -7.7630457
## [2,] -0.8513291 1.6204647 3.4742704 -4.5843900
## [3,] -0.3867099 -5.6282341 -1.6696772 -0.1738082
## [4,] -1.9386367 -5.7983103 0.3258066 0.8801997
## [5,] 5.6461763 5.2321197 -9.3717111 4.4848104
## [6,] -2.6028521 2.7531295 5.9016797 6.4296470
## get the distance usually a square matrix, or can be just first nearest etc.
getDistance(x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 1 1 1 1 1 1 1 1 1
## [2,] 1 1 1 1 1 1 1 1 1 1
## [3,] 1 1 1 1 1 1 1 1 1 1
## [4,] 1 1 1 1 1 1 1 1 1 1
## [5,] 1 1 1 1 1 1 1 1 1 1
## [6,] 1 1 1 1 1 1 1 1 1 1
## [7,] 1 1 1 1 1 1 1 1 1 1
## [8,] 1 1 1 1 1 1 1 1 1 1
## [9,] 1 1 1 1 1 1 1 1 1 1
## [10,] 1 1 1 1 1 1 1 1 1 1
getDistance(x)<-matrix(rnorm(100,1,5),nrow=10,ncol=10)
head(getDistance(x))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] -3.9890620 10.910784 0.9762887 6.5638764 0.5387551 3.6708334 3.9811188
## [2,] -0.8565689 -4.484224 1.6642903 -0.7628686 5.8483790 1.8140574 6.2603387
## [3,] -2.0591464 -5.997579 6.5732988 0.9895116 -0.4276494 0.8251664 0.7168311
## [4,] 2.0734702 -5.415851 1.9413955 -3.3587597 6.2052571 6.3753766 -4.2116313
## [5,] -4.4705299 9.841306 1.7696953 -0.5861410 -1.8071315 7.1089537 -3.4334006
## [6,] -8.4494041 1.143903 1.9083118 10.4127679 3.7919394 11.0379079 2.0298145
## [,8] [,9] [,10]
## [1,] -6.080778 -4.476827 -3.824715
## [2,] 5.528822 4.213684 12.058231
## [3,] -3.036998 4.694983 3.742517
## [4,] -5.989757 5.248598 -5.998213
## [5,] 7.863350 1.963486 6.093700
## [6,] 3.919736 4.064631 -1.640773
# get morphological features
getMorphology(x)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 1 1 1 1 1 1 1 1 1
## [2,] 1 1 1 1 1 1 1 1 1 1
## [3,] 1 1 1 1 1 1 1 1 1 1
## [4,] 1 1 1 1 1 1 1 1 1 1
## [5,] 1 1 1 1 1 1 1 1 1 1
## [6,] 1 1 1 1 1 1 1 1 1 1
## [7,] 1 1 1 1 1 1 1 1 1 1
## [8,] 1 1 1 1 1 1 1 1 1 1
## [9,] 1 1 1 1 1 1 1 1 1 1
## [10,] 1 1 1 1 1 1 1 1 1 1
getMorphology(x)<-matrix(rnorm(100,1,5),nrow=10,ncol=60)
head(getMorphology(x))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 4.6569437 1.433714 -0.4252608 1.6470348 3.352775 -7.6646575 8.490474
## [2,] -2.0078822 2.631864 -6.5699433 -2.0304610 -9.288710 -2.7986700 -4.482370
## [3,] -0.9336585 4.561218 -4.4039283 4.3493663 -7.513842 2.6526410 8.318619
## [4,] -5.7994255 4.072470 4.5486594 0.2748884 5.979210 5.4626124 5.175429
## [5,] -1.5732826 1.815842 0.1832589 7.0979574 -7.611639 -0.7107370 -1.489214
## [6,] 0.1409771 -8.980565 -4.8858289 0.2783008 -2.325024 -0.9108667 -7.908210
## [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,] 1.391862 4.1202799 -3.537828 4.6569437 1.433714 -0.4252608 1.6470348
## [2,] -3.355957 -1.3155264 -3.619407 -2.0078822 2.631864 -6.5699433 -2.0304610
## [3,] 2.056513 -0.5586920 6.170617 -0.9336585 4.561218 -4.4039283 4.3493663
## [4,] 8.586122 -3.6149533 -7.138208 -5.7994255 4.072470 4.5486594 0.2748884
## [5,] -3.422489 -0.8057942 -1.823368 -1.5732826 1.815842 0.1832589 7.0979574
## [6,] 7.919847 -0.8591075 -11.050008 0.1409771 -8.980565 -4.8858289 0.2783008
## [,15] [,16] [,17] [,18] [,19] [,20] [,21]
## [1,] 3.352775 -7.6646575 8.490474 1.391862 4.1202799 -3.537828 4.6569437
## [2,] -9.288710 -2.7986700 -4.482370 -3.355957 -1.3155264 -3.619407 -2.0078822
## [3,] -7.513842 2.6526410 8.318619 2.056513 -0.5586920 6.170617 -0.9336585
## [4,] 5.979210 5.4626124 5.175429 8.586122 -3.6149533 -7.138208 -5.7994255
## [5,] -7.611639 -0.7107370 -1.489214 -3.422489 -0.8057942 -1.823368 -1.5732826
## [6,] -2.325024 -0.9108667 -7.908210 7.919847 -0.8591075 -11.050008 0.1409771
## [,22] [,23] [,24] [,25] [,26] [,27] [,28]
## [1,] 1.433714 -0.4252608 1.6470348 3.352775 -7.6646575 8.490474 1.391862
## [2,] 2.631864 -6.5699433 -2.0304610 -9.288710 -2.7986700 -4.482370 -3.355957
## [3,] 4.561218 -4.4039283 4.3493663 -7.513842 2.6526410 8.318619 2.056513
## [4,] 4.072470 4.5486594 0.2748884 5.979210 5.4626124 5.175429 8.586122
## [5,] 1.815842 0.1832589 7.0979574 -7.611639 -0.7107370 -1.489214 -3.422489
## [6,] -8.980565 -4.8858289 0.2783008 -2.325024 -0.9108667 -7.908210 7.919847
## [,29] [,30] [,31] [,32] [,33] [,34] [,35]
## [1,] 4.1202799 -3.537828 4.6569437 1.433714 -0.4252608 1.6470348 3.352775
## [2,] -1.3155264 -3.619407 -2.0078822 2.631864 -6.5699433 -2.0304610 -9.288710
## [3,] -0.5586920 6.170617 -0.9336585 4.561218 -4.4039283 4.3493663 -7.513842
## [4,] -3.6149533 -7.138208 -5.7994255 4.072470 4.5486594 0.2748884 5.979210
## [5,] -0.8057942 -1.823368 -1.5732826 1.815842 0.1832589 7.0979574 -7.611639
## [6,] -0.8591075 -11.050008 0.1409771 -8.980565 -4.8858289 0.2783008 -2.325024
## [,36] [,37] [,38] [,39] [,40] [,41] [,42]
## [1,] -7.6646575 8.490474 1.391862 4.1202799 -3.537828 4.6569437 1.433714
## [2,] -2.7986700 -4.482370 -3.355957 -1.3155264 -3.619407 -2.0078822 2.631864
## [3,] 2.6526410 8.318619 2.056513 -0.5586920 6.170617 -0.9336585 4.561218
## [4,] 5.4626124 5.175429 8.586122 -3.6149533 -7.138208 -5.7994255 4.072470
## [5,] -0.7107370 -1.489214 -3.422489 -0.8057942 -1.823368 -1.5732826 1.815842
## [6,] -0.9108667 -7.908210 7.919847 -0.8591075 -11.050008 0.1409771 -8.980565
## [,43] [,44] [,45] [,46] [,47] [,48] [,49]
## [1,] -0.4252608 1.6470348 3.352775 -7.6646575 8.490474 1.391862 4.1202799
## [2,] -6.5699433 -2.0304610 -9.288710 -2.7986700 -4.482370 -3.355957 -1.3155264
## [3,] -4.4039283 4.3493663 -7.513842 2.6526410 8.318619 2.056513 -0.5586920
## [4,] 4.5486594 0.2748884 5.979210 5.4626124 5.175429 8.586122 -3.6149533
## [5,] 0.1832589 7.0979574 -7.611639 -0.7107370 -1.489214 -3.422489 -0.8057942
## [6,] -4.8858289 0.2783008 -2.325024 -0.9108667 -7.908210 7.919847 -0.8591075
## [,50] [,51] [,52] [,53] [,54] [,55] [,56]
## [1,] -3.537828 4.6569437 1.433714 -0.4252608 1.6470348 3.352775 -7.6646575
## [2,] -3.619407 -2.0078822 2.631864 -6.5699433 -2.0304610 -9.288710 -2.7986700
## [3,] 6.170617 -0.9336585 4.561218 -4.4039283 4.3493663 -7.513842 2.6526410
## [4,] -7.138208 -5.7994255 4.072470 4.5486594 0.2748884 5.979210 5.4626124
## [5,] -1.823368 -1.5732826 1.815842 0.1832589 7.0979574 -7.611639 -0.7107370
## [6,] -11.050008 0.1409771 -8.980565 -4.8858289 0.2783008 -2.325024 -0.9108667
## [,57] [,58] [,59] [,60]
## [1,] 8.490474 1.391862 4.1202799 -3.537828
## [2,] -4.482370 -3.355957 -1.3155264 -3.619407
## [3,] 8.318619 2.056513 -0.5586920 6.170617
## [4,] 5.175429 8.586122 -3.6149533 -7.138208
## [5,] -1.489214 -3.422489 -0.8057942 -1.823368
## [6,] -7.908210 7.919847 -0.8591075 -11.050008
## for each cell we can obtain the ROI that it belongs to
rowData(x)
## DataFrame with 10 rows and 0 columns
## if we want to add patient features to each ROI we can
metas<-data.frame(ROIID=factor(rep("A",10)),treatment=factor(rep('none',10)))
colData(x)<-DataFrame(metas)
##other slots for covariates
metadata(x)$experiment<-'test'
metadata(x)
## $experiment
## [1] "test"
From histoCAT to R
- We use the raw histoCAT output and containerize the data.
### load the data from package.
library(imcExperiment)
##load the data 1000 cells from IMC experiment.
data(data)
dim(data)
## [1] 1000 62
##output from histoCAT to R
expr<-data[,3:36]
normExp<-percentilenormalize(data=expr,percentile=0.99)
normExp<-as.matrix(normExp)
##spatial component
spatial<-(data[,c("X_position","Y_position")])
spatial<-as.matrix(spatial)
##uniqueLabel
uniqueLabel<-paste0(data[,"ImageId"],"_",data[,"CellId"])
phenotypes<-data[,grepl("Phenograph",colnames(data))]
morph<-as.matrix(data[,c("Area","Eccentricity",
"Solidity",
"Extent",
"Perimeter")])
x<-imcExperiment(cellIntensity=t(normExp),
coordinates=spatial,
neighborHood=as.matrix(data[,grepl("neighbour_",colnames(data))]),
network=phenotypes,
distance=matrix(1,nrow=nrow(data),ncol=10),
morphology=morph,
panel=colnames(normExp),
uniqueLabel=paste0(data$ImageId,"_",data$CellId),
ROIID=data.frame(ROIID=data$ImageId))
## explore the container.
dim(assay(x))
## [1] 34 1000
colData(x)$treatment<-DataFrame(treatment=rep('none',1000))
head(colData(x))
## DataFrame with 6 rows and 2 columns
## ROIID treatment
## <integer> <DataFrame>
## 274864_1 274864 none
## 274864_2 274864 none
## 274864_3 274864 none
## 274864_4 274864 none
## 274864_5 274864 none
## 274864_6 274864 none
## [1] "274864_1" "274864_2" "274864_3" "274864_4" "274864_5" "274864_6"
## [1] "marker1" "marker2" "marker3" "marker4" "marker5" "marker6"
## [7] "marker7" "marker8" "marker9" "marker10" "marker11" "marker12"
## [13] "marker13" "marker14" "marker15" "marker16" "marker17" "marker18"
## [19] "marker19" "marker20" "marker21" "marker22" "marker23" "marker24"
## [25] "marker25" "marker26" "marker27" "marker28" "marker29" "marker30"
## [31] "marker31" "marker32" "marker33" "marker34"
## Intensity
all(t(cellIntensity(x))==normExp)
## [1] TRUE
head(t(cellIntensity(x)))
## marker1 marker2 marker3 marker4 marker5 marker6 marker7
## 1 0.4656571 0.2736824 0.7237669 0.5204605 0.6330375 0.45935533 0.2857143
## 2 0.3487101 0.2897530 0.3958101 0.3548617 0.5588399 0.11483883 0.5000000
## 3 0.8883986 0.7622286 0.8866145 0.4873408 0.2400462 0.18374213 0.0000000
## 4 0.3963552 0.1451175 0.2714126 1.0000000 0.2100260 0.19686657 0.0000000
## 5 0.5407341 0.2522549 0.4221974 0.1064634 0.8991254 0.07655922 0.3333333
## 6 1.0000000 0.7622286 0.0000000 0.7854187 0.2018387 0.82683960 0.8000000
## marker8 marker9 marker10 marker11 marker12 marker13 marker14
## 1 0.4237137 0.1981346 0.5895631 0.38423632 0.5596034 1.00000000 0.5421737
## 2 0.2118568 0.1812504 0.3699262 0.04531335 0.1284526 0.04016094 0.1667561
## 3 0.4237137 0.6934055 0.2150245 0.69305332 1.0000000 0.11646341 0.4103197
## 4 0.7263663 0.3632249 0.1866203 1.00000000 0.9999276 0.02467097 0.9450608
## 5 0.3530947 0.1155895 0.8496593 0.55169689 0.1819642 0.06291782 0.1453909
## 6 0.2542282 0.2731756 0.4462211 0.21726828 0.6036358 0.05220870 0.1539370
## marker15 marker16 marker17 marker18 marker19 marker20 marker21
## 1 0.46990599 0.0952381 0.4987356 0.5269829 0.04774145 0.5735263 0.7197223
## 2 0.15883470 0.1666667 0.4851215 0.4321421 0.34528973 0.3484509 0.4443348
## 3 0.45147213 0.2666667 0.6154904 0.6206074 0.30741995 0.5060037 0.8448015
## 4 0.07050581 0.5714286 0.4715074 0.4803021 0.04774145 0.4609886 0.1938211
## 5 0.60815990 0.3333333 0.3834694 0.3128651 0.12438267 0.2171569 0.4567717
## 6 0.58665373 0.4000000 1.0000000 1.0000000 0.08020126 0.6635565 0.4070243
## marker22 marker23 marker24 marker25 marker26 marker27 marker28
## 1 0.4735184 0.9999835 0.12229278 0.2651672 0.19823739 1.0000000 0.2379700
## 2 0.3429377 0.4963629 0.08592210 0.3093618 0.06938309 0.1036510 0.2082237
## 3 0.4343442 0.6072488 0.40161962 0.3093618 0.11101294 1.0000000 0.6663160
## 4 0.4735184 0.8192498 0.04747309 0.0000000 0.23788486 0.9639418 0.0000000
## 5 0.4191098 0.3712448 0.22898012 0.3609221 0.00000000 0.4915438 0.2776317
## 6 0.7085638 0.1612178 0.33178791 0.0000000 0.49955821 1.0000000 0.0000000
## marker29 marker30 marker31 marker32 marker33 marker34
## 1 0.5826594 0.4963881 0.4285714 0.57132469 0.32432082 0.7448313
## 2 0.1140364 0.3285300 0.1250000 0.53626613 0.44897580 0.2375474
## 3 0.9637037 0.6810320 0.5000000 0.37811307 0.02758118 0.5500343
## 4 1.0000000 0.8740688 0.8571429 0.13504038 0.07298397 0.9535425
## 5 0.4187694 0.6712403 0.3333333 0.07271405 0.44188161 0.2307836
## 6 0.3614079 0.9747837 0.3000000 1.00000000 0.54971323 0.5500343
##coordinate
all(getCoordinates(x)==spatial)
## [1] TRUE
## X_position Y_position
## 1 508.0000 3.000000
## 2 672.1667 3.000000
## 3 154.2000 4.200000
## 4 538.5714 4.857143
## 5 913.2778 3.444444
## 6 1200.0000 4.200000
#neighbor attraction data form histoCAT
all(getNeighborhood(x)==as.matrix(data[,grepl("neighbour_",colnames(data))]))
## [1] TRUE
head(getNeighborhood((x)))
## neighbour_4_CellId1 neighbour_4_CellId2 neighbour_4_CellId3
## 1 36 168 0
## 2 144 0 0
## 3 0 0 0
## 4 67 92 0
## 5 13 97 249
## 6 135 0 0
## neighbour_4_CellId4 neighbour_4_CellId5 neighbour_4_CellId6
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## neighbour_4_CellId7 neighbour_4_CellId8 neighbour_4_CellId9
## 1 0 0 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## neighbour_4_CellId10
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
##phenotype cluster ID
head(getNetwork(x))
## (network)
## 1 1
## 2 1
## 3 4
## 4 4
## 5 1
## 6 1
all(getNetwork(x)==phenotypes)
## [1] TRUE
###distance calculations
head(getDistance(x))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 1 1 1 1 1 1 1 1 1
## [2,] 1 1 1 1 1 1 1 1 1 1
## [3,] 1 1 1 1 1 1 1 1 1 1
## [4,] 1 1 1 1 1 1 1 1 1 1
## [5,] 1 1 1 1 1 1 1 1 1 1
## [6,] 1 1 1 1 1 1 1 1 1 1
##morphology
all(getMorphology(x)==morph)
## [1] TRUE
## Area Eccentricity Solidity Extent Perimeter
## 1 21 0.6956573 0.9545455 0.8400000 13.844
## 2 24 0.8034622 0.9230769 0.6666667 16.565
## 3 15 0.9014174 1.0000000 0.7142857 12.918
## 4 7 0.8717717 0.8750000 0.5833333 7.683
## 5 18 0.9593719 0.7500000 0.3214286 19.766
## 6 5 0.7437865 1.0000000 0.5555556 5.814
##uniqueLabel
head(getLabel(x))
## [1] "274864_1" "274864_2" "274864_3" "274864_4" "274864_5" "274864_6"
all(getLabel(x)==paste0(data$ImageId,"_",data$CellId) )
## [1] TRUE