犯罪率和出生性别比没有关联
发布时间:
女权主义者总是喜欢鼓吹所谓的「性别比高了以后犯罪率也高」,先不谈她们整天炒作的「性别比失常」已经被 @味精2 等人反反复复的辟谣,单看这些数据本身,所谓的「犯罪率」和「出生性别比」两项指标几乎没有关联。原始数据和绘图代码可见:mxkfemkkk/Sex-ratio-and-crime-rate: mxkkkk的数据库
一、数据来源
女权主义者口嗨很容易,然而查询数据和处理数据有一定的难度,尤其是多国数据的分析。然而我还是在世界银行的网站上同时找到了谋杀犯罪率和出生性别比的数据。抽取国家和地区的数量N=60。
二、数据处理
我处理了两个核心变量,进行单变量线性回归分析,其中
- 自变量——出生性别比
- 因变量——犯罪率
同时我们使用Python脚本计算皮尔逊相关系数r以及决定系数R² 。
三、结果
以下是各个国家的出生性别比和谋杀犯罪率的数据

▲数据来源:世界银行
统计结果显示,两者之间的线性关系非常弱(r=0.262),只能解释谋杀犯罪率变化中 6.9% 的部分(R²=0.0069),剩下的 93.1% 的波动,无法用出生性别比来解释,只能用其他因素(如贫富差距、毒品、治安力度、战争、文化差异等)或纯粹的随机误差来解释。在实际意义中,可以忽略这种微弱的相关性,不能做出有意义的推断。
点击查看绘图使用的Python代码
# 注意你需要把原始数据放在py脚本的文件夹下
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import statsmodels.api as sm
plt.rcParams['font.sans-serif'] = ['Microsoft Yahei']
plt.rcParams['axes.unicode_minus'] = False
file_path = "国家性别比与谋杀犯罪率统计_updated.xlsx"
df = pd.read_excel(file_path, sheet_name="Sheet1")
x = df['出生性别比'].values
y = df['谋杀犯罪率'].values
mask = ~(np.isnan(x) | np.isnan(y))
x_clean = x[mask]
y_clean = y[mask]
X = sm.add_constant(x_clean)
model = sm.OLS(y_clean, X).fit()
x_plot = np.linspace(min(x_clean), max(x_clean), 100)
X_plot = sm.add_constant(x_plot)
predictions = model.get_prediction(X_plot)
pred_frame = predictions.summary_frame(alpha=0.05)
print(f"皮尔逊相关系数 r = {np.sqrt(model.rsquared):.3f}")
print(f"决定系数 R² = {model.rsquared:.3f}")
print(f"回归系数 (斜率): {model.params[1]:.4f}")
print(f"截距: {model.params[0]:.4f}")
plt.figure(figsize=(10, 6))
plt.scatter(x_clean, y_clean, alpha=0.7, s=30, label='原始数据')
plt.plot(x_plot, pred_frame['mean'], color='red', linewidth=2, label='线性拟合线')
plt.fill_between(x_plot,
pred_frame['mean_ci_lower'],
pred_frame['mean_ci_upper'],
color='red', alpha=0.15, label='95% 置信区间')
plt.xlim(1.01, 1.12)
plt.ylim(0, 29.8)
plt.xlabel('出生性别比 (男/女)', fontsize=12)
plt.ylabel('谋杀犯罪率 (每10万人)', fontsize=12)
plt.title('出生性别比 与 谋杀犯罪率的关系(数据来源:世界银行)', fontsize=14)
plt.text(0.02, 0.95,
f'R² = {model.rsquared:.3f}\nr = {np.sqrt(model.rsquared):.3f}',
transform=plt.gca().transAxes, va='top', fontsize=10, bbox=dict(boxstyle='round', facecolor='white', alpha=0.8))
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
</datails> ---  .jpg)