# Merged adata with different dimension but getting stuck at PCA

**URL:** <https://discourse.scverse.org/t/merged-adata-with-different-dimension-but-getting-stuck-at-pca/693>\
**Category:** scanpy\
**Created:** [August 22, 2022, 3:32am UTC](https://discourse.scverse.org/t/merged-adata-with-different-dimension-but-getting-stuck-at-pca/693 "2022-08-22T03:32:29Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![cookiemonster](https://avatars.discourse-cdn.com/v4/letter/c/a4c791/32.png) [@cookiemonster](https://discourse.scverse.org/u/cookiemonster)\
**Post date:** [August 22, 2022, 3:32am UTC](https://discourse.scverse.org/t/merged-adata-with-different-dimension-but-getting-stuck-at-pca/693/1 "2022-08-22T03:32:29Z")

</div>

I have 4 files which are slightly different in dimensions, the var is the same the obs is different. When I tried to run PCA it keeps showing error message “ValueError: Input contains NaN, infinity or a value too large for dtype(‘float32’).”

This is what I wrote to fun scanpy pearson residual:

import numpy as np  
import pandas as pd  
import scanpy as sc  
import matplotlib.pyplot as plt  
import anndata as ad

sc.settings.verbosity =3 # verbosity: erros (0), warnings (1), infor (2), hints(3)  
sc.logging.print\_header()  
sc.settings. set\_figure\_params(dpi=80, facecolor=‘white’)

adata\_pbmc\_normal\_L001 = sc.read\_10x\_mtx(‘~/pbmc\_normal\_L001/outs/filtered\_feature\_bc\_matrix/’)  
adata\_pbmc\_normal\_L002 = sc.read\_10x\_mtx(‘~/pbmc\_normal\_L002/outs/filtered\_feature\_bc\_matrix/’)  
adata\_pbmc\_normal\_L003 = sc.read\_10x\_mtx(‘~/pbmc\_normal\_L003/outs/filtered\_feature\_bc\_matrix/’)  
adata\_pbmc\_normal\_L004 = sc.read\_10x\_mtx(‘~/pbmc\_normal\_L004/outs/filtered\_feature\_bc\_matrix/’)

adata\_pbmc\_normal\_L001.uns[“name”] =“pbmc\_L001”  
adata\_pbmc\_normal\_L002.uns[“name”] =“pbmc\_L002”  
adata\_pbmc\_normal\_L003.uns[“name”] =“pbmc\_L003”  
adata\_pbmc\_normal\_L004.uns[“name”] =“pbmc\_L004”

adata1 = adata\_pbmc\_normal\_L001.copy()  
adata2 = adata\_pbmc\_normal\_L002.copy()  
adata3 = adata\_pbmc\_normal\_L003.copy()  
adata4 = adata\_pbmc\_normal\_L004.copy()

adata = ad.concat([adata1, adata2, adata3, adata4], join=“outer”, fill\_value=np.nan)

#Remove Empty Cells  
adata.var\_names\_make\_unique()  
sc.pp.filter\_genes(adata, min\_cells=1)  
print()

Remove Doublets

sc.external.pp.scrublet(adata)

# marker genes from table in pbmc3k tutorial

markers = [  
“IL7R”,  
“LYZ”,  
“CD14”,  
“MS4A1”,  
“CD8A”,  
“GNLY”,  
“NKG7”,  
“FCGR3A”,  
“MS4A7”,  
“CST3”,  
“PPBP”,  
]

adata.var[“mt”] = adata.var\_names.str.startswith(“MT-”)  
sc.pp.calculate\_qc\_metrics(  
adata, qc\_vars=[“mt”], percent\_top=None, log1p=False, inplace=True  
)

sc.pl.violin(  
adata,  
[“n\_genes\_by\_counts”, “total\_counts”, “pct\_counts\_mt”],  
jitter=0.4,  
multi\_panel=True,  
)

Pearson Residuals for Highly Variable Gene

sc.experimental.pp.highly\_variable\_genes(  
adata, flavor=“pearson\_residuals”, n\_top\_genes=2000  
)

fig, axes = plt.subplots(1, 2, figsize=(12, 6))  
for ax, adata in zip(axes, adata):

```
hvgs = adata.var["highly_variable"]

ax.scatter(
    adata.var["mean_counts"], adata.var["residual_variances"], s=3, edgecolor="none"
)

ax.scatter(
    adata.var["mean_counts"][hvgs],
    adata.var["residual_variances"][hvgs],
    c="tab:red",
    label="selected genes",
    s=3,
    edgecolor="none",
)

ax.scatter(
    adata.var["mean_counts"][np.isin(adata.var_names, markers)],
    adata.var["residual_variances"][np.isin(adata.var_names, markers)],
    c="k",
    label="known marker genes",
    s=10,
    edgecolor="none",
)

ax.set_xscale("log")
ax.set_xlabel("mean expression")
ax.set_yscale("log")
ax.set_ylabel("residual variance")
ax.set_title("No Filter PBMC: ")

ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)
ax.yaxis.set_ticks_position("left")
ax.xaxis.set_ticks_position("bottom")

```

plt.legend()

Apply gene selection

pbmc\_normal = adata[:, adata.var[“highly\_variable”]]

pbmc\_normal

Preparations

#keep raw and depth-normalized counts for later  
adata.layers[“raw”] = adata.X.copy()  
adata.layers[“sqrt\_norm”] = np.sqrt(  
sc.pp.normalize\_total(adata, inplace=False)[“X”]  
)

sc.experimental.pp.normalize\_pearson\_residuals(adata)

sc.pp.pca(adata, n\_comps=50)  
n\_cells = len(adata)  
sc.tl.tsne(adata, use\_rep=“X\_pca”)

sc.pp.neighbors(adata, n\_neighbors=10, n\_pcs=50)  
sc.tl.leiden(adata)

sc.pl.tsne(adata, color=[“leiden”], cmap=“tab20”)  
sc.pl.tsne(adata, color=markers, layer=“sqrt\_norm”)
