PROYECTO 4 — “Mini fMRI” + conectividad cerebral
🎯 Objetivo
Simular y analizar datos tipo fMRI para:
- medir conectividad cerebral
- detectar patrones
- comparar estados
👉 exactamente lo que se hace en investigación
🧠 IDEA CENTRAL
7
En neurociencia real:
- tienes señales en el tiempo (por región)
- analizas correlaciones
- obtienes redes funcionales
⚙️ PARTE 1 — GENERAR “DATOS fMRI” SIMULADOS
💻 PASO 1 — Setup
import numpy as np
import matplotlib.pyplot as plt
🧠 PASO 2 — Red base (estructura cerebral)
N = 10 # regiones cerebrales
T = 300 # tiempo
# conectividad estructural
W = np.random.randn(N, N)
W = W / np.max(np.abs(W))
🔁 PASO 3 — Generar actividad (tipo cerebro)
g = 0.9 # estado crítico
def step(x):
noise = 0.05 * np.random.randn(N)
return np.tanh(g * np.dot(W, x)) + noise
x = np.random.randn(N)
data = []
for t in range(T):
x = step(x)
data.append(x.copy())
data = np.array(data)
📊 PASO 4 — Visualizar señales
plt.figure(figsize=(10,5))
for i in range(5):
plt.plot(data[:, i])
plt.title("Señales tipo fMRI")
plt.show()
🧠 PARTE 2 — CONECTIVIDAD FUNCIONAL
👉 aquí empieza lo importante
💻 PASO 5 — Correlación entre regiones
corr = np.corrcoef(data.T)
plt.imshow(corr)
plt.colorbar()
plt.title("Conectividad funcional")
plt.show()
🧠 Interpretación
- valores altos → regiones sincronizadas
- valores bajos → independientes
👉 esto es base de:
- conectividad funcional
🔬 PARTE 3 — DETECTAR REDES (muy importante)
💻 PASO 6 — Umbral simple
threshold = 0.5
network = (corr > threshold).astype(int)
plt.imshow(network)
plt.title("Red cerebral (umbral)")
plt.show()
🧠 Qué estás haciendo
👉 construir un “mini conectoma”
⚡ PARTE 4 — CAMBIAR ESTADOS CEREBRALES
💻 PASO 7 — Comparar condiciones
def simulate(g):
x = np.random.randn(N)
data = []
for t in range(T):
noise = 0.05*np.random.randn(N)
x = np.tanh(g*np.dot(W,x)) + noise
data.append(x.copy())
return np.array(data)
data_low = simulate(0.5)
data_crit = simulate(0.9)
data_high = simulate(1.2)
📊 PASO 8 — Comparar conectividad
corr_low = np.corrcoef(data_low.T)
corr_crit = np.corrcoef(data_crit.T)
corr_high = np.corrcoef(data_high.T)
plt.figure(figsize=(12,4))
plt.subplot(1,3,1)
plt.imshow(corr_low)
plt.title("Bajo")
plt.subplot(1,3,2)
plt.imshow(corr_crit)
plt.title("Crítico")
plt.subplot(1,3,3)
plt.imshow(corr_high)
plt.title("Caótico")
plt.show()
🧠 RESULTADO CLAVE
👉 Verás que:
- estado crítico → patrones ricos
- estado bajo → pobre
- estado caótico → ruido
👉 esto coincide con resultados reales
🔬 PARTE 5 — INTERPRETACIÓN (nivel investigación)
Esto conecta directamente con:
- actividad en reposo
- redes cerebrales
- enfermedades (rigidez vs caos)
Relaciona con:
- red por defecto
🚀 EXTENSIONES (muy importantes)
🔹 1. Simular enfermedad
W[0,:] = 0 # desconectar región
🔹 2. Estimulación cerebral
x[0] += 2
🔹 3. Modularidad (más realista)
- crear grupos de regiones
🧭 QUÉ HAS LOGRADO
Ya estás haciendo lo esencial de:
👉 neuroimagen moderna
👉 modelos cerebrales
👉 trabajo tipo Gustavo Deco
🧠 IDEA FINAL
Has pasado de:
- neurona → red → dinámica → datos
👉 este es exactamente el pipeline real en neurociencia computacional
No hay comentarios:
Publicar un comentario