自定义配置ppf函数的参数丰富可视化 - 使用R语言

R语言自定义配置ppf函数及可视化
100 篇文章 ¥59.90 ¥99.00
本文介绍如何在R语言中自定义配置正态分布的ppf函数参数,并利用ggplot2进行可视化展示。通过创建自定义函数、计算百分位点并绘制直方图,展示了ppf函数的灵活性和定制性。

自定义配置ppf函数的参数丰富可视化 - 使用R语言

在R语言中,概率分布函数(Probability Density Function,简称PDF)和累积分布函数(Cumulative Distribution Function,简称CDF)是常用的统计工具。CDF的逆函数被称为百分位点函数(Percent Point Function,简称PPF),它在统计分析和概率计算中有广泛的应用。本文将介绍如何使用R语言自定义配置ppf函数的参数,并通过丰富的可视化展示其应用。

首先,我们需要安装并加载一些必要的R包,包括ggplot2dplyr。这些包提供了用于数据处理和可视化的函数。

# 安装和加载必要的R包
install.packages("ggplot2")
install.packages("dplyr")

library(ggplot2)
library(dplyr)

接下来,我们将使用正态分布作为示例概率分布,并自定义配置其参数。我们将使用mean表示均值,sd表示标准差。

# 自定义配置正态分布的参数
mean <- 0
sd <- 1

现在,我们可以使用R的内置函数qnorm()来计算正态分布的百分位点,并将其包装在自定义的ppf()函数中。


                
<think>根据用户要求,我们将代码分为两个主要部分:可视化部分和检验部分。每个部分都包含多个函数,但各自独立。 注意:用户要求将可视化和检验代码分别放在一起,再分别给出不同方法代码。因此,我们将: 1. 先给出所有可视化相关的函数(放在一个代码块中) 2. 再给出所有检验指标计算相关的函数(放在一个代码块中) 3. 最后给出一个使用示例,展示如何调用这些函数 同时,每个函数都设计为独立可调用的,这样用户可以根据需要单独使用某个函数。</think>以下是将非线性回归拟合度检验的可视化和统计检验功能分别整合的完整代码实现: ### 一、可视化分析函数集(完整代码) ```python import numpy as np import matplotlib.pyplot as plt from scipy import stats def plot_fit_comparison(x, y_true, y_pred, model_name): """ 绘制原始数据与拟合曲线对比图 :param x: 自变量 :param y_true: 实际观测值 :param y_pred: 模型预测值 :param model_name: 模型名称 """ plt.figure(figsize=(10, 6)) plt.scatter(x, y_true, label='观测数据', alpha=0.6, color='blue') plt.plot(x, y_pred, 'r-', label='模型拟合', linewidth=2) plt.xlabel('自变量') plt.ylabel('因变量') plt.title(f'{model_name}模型拟合效果') plt.legend() plt.grid(True, linestyle='--', alpha=0.7) plt.show() def plot_residual_analysis(y_pred, residuals): """ 残差分析可视化(包含残差图和Q-Q图) :param y_pred: 模型预测值 :param residuals: 模型残差 """ fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) # 残差图 ax1.scatter(y_pred, residuals, residuals, alpha=0.6, edgecolor='k', s=80) ax1.axhline(y=0, color='r', linestyle='--', linewidth=2) ax1.set_xlabel('预测值', fontsize=12) ax1.set_ylabel('残差', fontsize=12) ax1.set_title('残差 vs 预测值', fontsize=14) ax1.grid(True, linestyle='--', alpha=0.5) # Q-Q图 stats.probplot(residuals, dist="norm", plot=ax2) ax2.set_title('残差Q-Q图', fontsize=14) ax2.grid(True, linestyle='--', alpha=0.5) plt.tight_layout() plt.show() def plot_confidence_band(x, y, y_pred, residuals, confidence=0.95): """ 绘制置信区间和预测区间 :param x: 自变量 :param y: 实际观测值 :param y_pred: 模型预测值 :param residuals: 模型残差 :param confidence: 置信水平(0-1) """ # 计算标准误差 se = np.sqrt(np.sum(residuals**2) / (len(y) - 2)) # 计算置信区间 from scipy.stats import t t_val = t.ppf((1 + confidence)/2, df=len(y)-2) conf_band = t_val * se * np.sqrt(1/len(y) + (x - np.mean(x))**2 / np.sum((x - np.mean(x))**2)) # 计算预测区间 pred_band = t_val * se * np.sqrt(1 + 1/len(y) + (x - np.mean(x))**2 / np.sum((x - np.mean(x))**2)) # 绘图 plt.figure(figsize=(10, 6)) plt.scatter(x, y, alpha=0.6, label='观测数据') plt.plot(x, y_pred, 'r-', label='拟合曲线') plt.fill_between(x, y_pred - conf_band, y_pred + conf_band, color='orange', alpha=0.3, label='95%置信区间') plt.fill_between(x, y_pred - pred_band, y_pred + pred_band, color='green', alpha=0.2, label='95%预测区间') plt.xlabel('自变量') plt.ylabel('因变量') plt.title('拟合曲线与置信区间') plt.legend() plt.grid(True, linestyle='--', alpha=0.5) plt.show() ``` ### 二、统计检验函数集(完整代码) ```python import numpy as np from scipy import stats from scipy.optimize import curve_fit def fit_nonlinear_model(model_func, x_data, y_data, p0=None): """ 非线性模型拟合函数 :param model_func: 自定义非线性模型函数 :param x_data: 自变量数据 :param y_data: 因变量数据 :param p0: 初始参数猜测值 :return: 拟合参数、预测值、残差 """ params, cov = curve_fit(model_func, x_data, y_data, p0=p0, maxfev=5000) y_pred = model_func(x_data, *params) residuals = y_data - y_pred return params, np.sqrt(np.diag(cov)), y_pred, residuals def calculate_r2(y_true, y_pred, k_params): """ 计算决定系数和调整决定系数 :param y_true: 实际观测值 :param y_pred: 模型预测值 :param k_params: 模型参数数量 :return: R², 调整R², MSE """ ss_res = np.sum((y_true - y_pred)**2) ss_tot = np.sum((y_true - np.mean(y_true))**2) r2 = 1 - (ss_res / ss_tot) n = len(y_true) adj_r2 = 1 - (1 - r2) * (n - 1) / (n - k_params - 1) mse = ss_res / n return r2, adj_r2, mse def calculate_information_criteria(y_true, y_pred, k_params): """ 计算AIC和BIC信息准则 :param y_true: 实际观测值 :param y_pred: 模型预测值 :param k_params: 模型参数数量 :return: AIC, BIC """ n = len(y_true) residuals = y_true - y_pred mse = np.mean(residuals**2) # AIC计算(修正版本) aic = n * np.log(mse) + 2 * k_params + (2*k_params*(k_params+1))/(n-k_params-1) # BIC计算 bic = n * np.log(mse) + k_params * np.log(n) return aic, bic def residual_normality_test(residuals): """ 残差正态性检验 :param residuals: 模型残差 :return: Shapiro-Wilk检验统计量和p值 """ shapiro_stat, shapiro_p = stats.shapiro(residuals) return shapiro_stat, shapiro_p def durbin_watson_test(residuals): """ 杜宾-瓦特森检验(残差自相关检验) :param residuals: 模型残差 :return: DW统计量 """ diff = np.diff(residuals) dw = np.sum(diff**2) / np.sum(residuals**2) return dw ``` ### 三、完整使用示例 ```python # ========== 模型定义 ========== # 示例:S型生长曲线模型 y = a / (1 + exp(-b*(x-c))) def sigmoid_growth(x, a, b, c): return a / (1 + np.exp(-b * (x - c))) # ========== 数据生成 ========== np.random.seed(42) x = np.linspace(0, 10, 100) y_true = sigmoid_growth(x, 10, 1, 5) y_data = y_true + 0.5 * np.random.normal(size=x.size) # ========== 模型拟合 ========== params, param_stds, y_pred, residuals = fit_nonlinear_model( sigmoid_growth, x, y_data, p0=[8, 0.5, 4] ) print(f"拟合参数: {params}") print(f"参数标准差: {param_stds}") # ========== 统计检验 ========== # 计算拟合优度 r2, adj_r2, mse = calculate_r2(y_data, y_pred, k_params=3) print(f"\n拟合优度:") print(f"R² = {r2:.4f} | 调整R² = {adj_r2:.4f} | MSE = {mse:.4f}") # 计算信息准则 aic, bic = calculate_information_criteria(y_data, y_pred, k_params=3) print(f"\n信息准则:") print(f"AIC = {aic:.2f} | BIC = {bic:.2f}") # 残差检验 shapiro_stat, shapiro_p = residual_normality_test(residuals) dw = durbin_watson_test(residuals) print(f"\n残差检验:") print(f"Shapiro-Wilk正态性检验: W = {shapiro_stat:.4f}, p = {shapiro_p:.4f}") print(f"Durbin-Watson自相关检验: DW = {dw:.4f}") # ========== 可视化分析 ========== # 拟合效果对比 plot_fit_comparison(x, y_data, y_pred, "S型生长曲线") # 残差分析 plot_residual_analysis(y_pred, residuals) # 置信区间 plot_confidence_band(x, y_data, y_pred, residuals) ``` ### 功能说明: 1. **可视化分析函数集**: - `plot_fit_comparison`: 直观展示原始数据与拟合曲线 - `plot_residual_analysis`: 残差图与Q-Q图联合诊断 - `plot_confidence_band`: 置信区间与预测区间可视化 2. **统计检验函数集**: - `fit_nonlinear_model`: 核心拟合函数(带最大迭代次数控制) - `calculate_r2`: 拟合优度计算(含MSE) - `calculate_information_criteria`: 修正版AIC/BIC计算 - `residual_normality_test`: 残差正态性检验 - `durbin_watson_test`: 残差自相关检验 3. **使用特点**: - 可视化与统计检验完全分离,可按需调用 - 所有函数独立完整,无需额外依赖 - 包含置信区间计算等高级功能 - 修正的信息准则计算更准确
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值