You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于lm()回归输出,用igraph()构建线性回归结果网络可视化图

Build a Directed Network Graph for Significant Linear Regression Predictors

Got it, let’s walk through a complete, customizable Python solution to create exactly the network you’re describing—focused only on significant predictors (p<0.05), with colored edges for positive/negative associations and edge thickness tied to coefficient strength. We’ll use networkx for graph structure and matplotlib for rendering.

Step 1: Prepare Your Regression Results

First, let’s assume you’ve already run your linear regression (e.g., with statsmodels). We need three key pieces of info for each predictor:

  • Variable name
  • Coefficient value (to set edge color and thickness)
  • p-value (to filter for significance)

If you’re using statsmodels, here’s how to extract this data cleanly:

import pandas as pd
import statsmodels.api as sm

# Replace with your actual data
X = sm.add_constant(your_feature_dataset)
y = your_target_variable
model = sm.OLS(y, X).fit()

# Pull results into a DataFrame for easy filtering
reg_results = pd.DataFrame({
    'variable': model.params.index,
    'coefficient': model.params.values,
    'p_value': model.pvalues.values
})

# Keep only significant predictors (exclude the intercept if you don't want it)
significant_vars = reg_results[(reg_results['p_value'] < 0.05) & (reg_results['variable'] != 'const')]

Step 2: Build the Directed Graph

We’ll create a directed graph where:

  • Your target variable is the central node
  • Each significant predictor points to the target (since they’re predicting it)
import networkx as nx

# Initialize directed graph
G = nx.DiGraph()

# Add target node (make it larger for visibility)
target_node = "Your_Target_Variable"
G.add_node(target_node, size=1200)

# Add predictor nodes and edges with custom attributes
for _, row in significant_vars.iterrows():
    pred_node = row['variable']
    coeff = row['coefficient']
    
    G.add_node(pred_node)
    # Edge attributes: color based on sign, weight based on coefficient magnitude
    G.add_edge(pred_node, target_node,
               weight=abs(coeff),
               color='green' if coeff > 0 else 'red')

Step 3: Customize and Render the Visualization

Now we’ll polish the layout, edge styling, and labels to match your desired output:

import matplotlib.pyplot as plt
from matplotlib.patches import Patch

# Set up plot dimensions
plt.figure(figsize=(10, 7))

# Use a spring layout to center the target node (seed for consistent positioning)
pos = nx.spring_layout(G, seed=42)

# Draw nodes: target node is larger, all nodes have a border
nx.draw_networkx_nodes(G, pos,
                       node_size=[G.nodes[node].get('size', 600) for node in G.nodes],
                       node_color='lightblue',
                       edgecolors='black')

# Draw edges: color matches association direction, thickness ties to coefficient strength
edges = G.edges(data=True)
nx.draw_networkx_edges(G, pos,
                       edgelist=edges,
                       edge_color=[edge[2]['color'] for edge in edges],
                       width=[edge[2]['weight'] * 4 for edge in edges],  # Scale thickness for visibility
                       arrowstyle='->', arrowsize=18)

# Add bold, readable node labels
nx.draw_networkx_labels(G, pos, font_size=11, font_weight='bold')

# Add a legend for edge colors
legend_elements = [Patch(facecolor='green', label='Positive Association'),
                   Patch(facecolor='red', label='Negative Association')]
plt.legend(handles=legend_elements, loc='upper right', fontsize=10)

# Clean up the plot (remove axes, add title)
plt.axis('off')
plt.title(f'Significant Predictors of {target_node} (p<0.05)', fontsize=12, pad=20)
plt.show()

Quick Customization Tips

  • Adjust edge thickness: Tweak the *4 multiplier in the width parameter to make edges thicker/thinner
  • Node styling: Change node_color or add coefficient values as node labels with nx.draw_networkx_labels()
  • Layout options: Try nx.circular_layout() or nx.kamada_kawai_layout() if you prefer a different arrangement
  • Edge labels: Add exact coefficient values to edges using nx.draw_networkx_edge_labels()

This will give you a clear, intuitive network where you can instantly spot which predictors matter most, their direction of influence, and how strong their relationship to the target variable is.

内容的提问来源于stack exchange,提问作者LLL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:00:39