Applied Spatial Statistics(五)线性回归 I

Applied Spatial Statistics(五)线性回归 I

该笔记本演示了:

  1. 线性回归系数估计在假设下是无偏的
  2. 如何围绕系数估计构建 bootstrap 置信区间
  3. 残差图
  4. Q-Q图

1. 线性回归系数估计在假设下是无偏的

import numpy as np
import matplotlib.pyplot as plt

Statsmodels是python中的统计建模包

import statsmodels.api as sm
#Randomly draw X and error
x = np.random.randn(1000) # ~ N(0,1) 
e = np.random.randn(1000) # ~ N(0,1)

定义与一些干扰(噪声)的线性关系

#b0 = 10
#b1 = 4
y = 10 + 4*x + e
plt.scatter(x,y,alpha=0.4)plt.axline((0, 10), (3, 22), linewidth=2, color='r')
<matplotlib.lines.AxLine at 0x29e732150>

在这里插入图片描述

x_cons = sm.add_constant(x)model = sm.OLS(y,x_cons).fit()

线性回归结果总结

model.summary()
OLS Regression Results
Dep. Variable:y R-squared: 0.944
Model:OLS Adj. R-squared: 0.944
Method:Least Squares F-statistic: 1.678e+04
Date:Wed, 07 Feb 2024 Prob (F-statistic): 0.00
Time:19:25:57 Log-Likelihood: -1394.3
No. Observations: 1000 AIC: 2793.
Df Residuals: 998 BIC: 2802.
Df Model: 1
Covariance Type:nonrobust
coefstd errtP>|t|[0.0250.975]
const 9.9372 0.031 321.228 0.000 9.876 9.998
x1 4.0251 0.031 129.541 0.000 3.964 4.086
Omnibus: 1.647 Durbin-Watson: 1.924
Prob(Omnibus): 0.439 Jarque-Bera (JB): 1.671
Skew: 0.098 Prob(JB): 0.434
Kurtosis: 2.963 Cond. No. 1.06


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

测试公正性

def reg_unbiased(x,y):estimates_list = []#Repeat the sampling process for 10,000 timesfor i in range(10000):#Get a random indexsample_index = np.random.choice(1000, 300)#Use the index to index y and xsample_y = y[sample_index]sample_x = x[sample_index]#add constant to xsample_x = sm.add_constant(sample_x)#Fit the OLSmodel = sm.OLS(sample_y,sample_x).fit()#Append the parametersestimates_list.append(model.params)return np.array(estimates_list)
rslt = np.array(reg_unbiased(x,y))
rslt
array([[9.98692129, 4.0672853 ],[9.93114785, 4.03665871],[9.99781954, 4.10916308],...,[9.91294925, 3.98044767],[9.88729838, 3.992089  ],[9.87920183, 4.12874911]])
np.mean(rslt,axis=0)
array([9.93654559, 4.02654646])

10000 次重复的估计平均值相当于截距为 10、斜率为 4 的真实回归线。

2. 如何围绕系数估计构建置信区间

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import *
import statsmodels.formula.api as smf#Use the mgp dataset
url = 'https://raw.githubusercontent.com/mwaskom/seaborn-data/master/mpg.csv'df = pd.read_csv(url)
df = df.dropna()

如果您使用“pandas.DataFrame”,则可以使用此接口来拟合模型

model = smf.ols(formula='acceleration ~ horsepower', data=df).fit()
subsample_coef = model.params
subsample_coef.values[0]
20.701933699127174
model.summary()
OLS Regression Results
Dep. Variable:acceleration R-squared: 0.475
Model:OLS Adj. R-squared: 0.474
Method:Least Squares F-statistic: 352.8
Date:Wed, 07 Feb 2024 Prob (F-statistic):1.58e-56
Time:19:25:58 Log-Likelihood: -827.24
No. Observations: 392 AIC: 1658.
Df Residuals: 390 BIC: 1666.
Df Model: 1
Covariance Type:nonrobust
coefstd errtP>|t|[0.0250.975]
Intercept 20.7019 0.293 70.717 0.000 20.126 21.277
horsepower -0.0494 0.003 -18.784 0.000 -0.055 -0.044
Omnibus:29.904 Durbin-Watson: 1.483
Prob(Omnibus): 0.000 Jarque-Bera (JB): 37.989
Skew: 0.608 Prob(JB): 5.63e-09
Kurtosis: 3.919 Cond. No. 322.


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

从数据帧中替换引导样本

#Define a bootstrap CI function
def bootstrap_ci(df):np.random.seed(100)bootstrap_b0 = []bootstrap_b1 = []for i in range(1000):#generate a re-sample with the original sample size, with replacementsample = df.sample(len(df), replace=True)#formulate the model model = smf.ols(formula='acceleration ~ horsepower', data=sample).fit()#Get the intercept and slope estimatessubsample_coef = model.params#Append them to the listbootstrap_b0.append(subsample_coef.values[0])bootstrap_b1.append(subsample_coef.values[1])#Get the lower and upper bound for the middle 95%:b0_CI = [np.percentile(bootstrap_b0, 2.5),np.percentile(bootstrap_b0, 97.5)]b1_CI = [np.percentile(bootstrap_b1, 2.5),np.percentile(bootstrap_b1, 97.5)]return b0_CI,b1_CI
rslt = bootstrap_ci(df)
print("95% CI for intercept:",rslt[0])
95% CI for intercept: [20.017892056783964, 21.347498114044548]
print("95% CI for slope:",rslt[1])
95% CI for slope: [-0.0548220191942679, -0.043592380423869134]
import seaborn as snssns.regplot(data=df, x="horsepower", y="acceleration", ci=95, truncate=False,line_kws={"color": "red"})#plt.xlim(300)
<Axes: xlabel='horsepower', ylabel='acceleration'>

在这里插入图片描述

3. 残差图

plt.scatter(model.predict(),model.resid)
plt.hlines(0,8,20,color="black")
plt.ylim(-8,8)
plt.xlabel("Fitted acceleration")
plt.ylabel("Residuals")
Text(0, 0.5, 'Residuals')

在这里插入图片描述

4. Q-Q 图

res = model.resid
fig = sm.qqplot(res,line='q')
#plt.xlim(-8,8)
plt.ylim(-8,8)
plt.show()

在这里插入图片描述

plt.hist(model.resid)
(array([  5.,  29.,  69., 106., 102.,  40.,  25.,   8.,   5.,   3.]),array([-4.99465643, -3.73465643, -2.47465643, -1.21465643,  0.04534357,1.30534357,  2.56534357,  3.82534357,  5.08534357,  6.34534357,7.60534357]),<BarContainer object of 10 artists>)

在这里插入图片描述

5. 线性回归 - 模型规范

该笔记本演示了:

  1. 正确指定模型(基线)
  2. 型号不详
    • 不相关的预测变量
    • 相关预测变量
  3. 过度指定模型
    • 完美的多重共线性
    • 不同程度的多重共线性
    • 包括不相关的变量
import numpy as np
import statsmodels.api as sm

5.1 正确指定模型(基线)

  • 我们按照正态分布随机生成 100 个不相关的 X1 和 X2。

  • 我们指定一条真正的回归线: y y y = 3 + 2* X 1 X_1 X1 + 4* X 2 X_2 X2 + e

  • 我们在回归模型中正确包含 X1 和 X2:y ~ X1 + X2(带截距)

  • 我们拟合 1000 个这样的回归模型,并检查估计值的偏差和精确度。

estimates = []
for i in range(1000):X1 = np.random.randn(100) + 2X2 = np.random.randn(100) + 2e = np.random.randn(100)y = 3 + 2*X1 + 4*X2 + eX = sm.add_constant(np.column_stack([X1,X2]))model = sm.OLS(y, X).fit()estimates.append(model.params)
#The averages of estimates across the 1000 replications are:
print("Average of estimates:", np.mean(np.array(estimates),axis=0))
print("SE of estimates:", np.std(np.array(estimates),axis=0))
Average of estimates: [3.0037811  2.00347394 3.99617821]
SE of estimates: [0.30086517 0.09971629 0.10145132]

5.2 未指定型号

不相关的预测变量 (#1)
  • 我们按照正态分布随机生成 100 个不相关的 X1 和 X2。

  • 我们指定一条真正的回归线: y y y = 3 + 2* X 1 X_1 X1 + 4* X 2 X_2 X2 + e

  • 我们的回归模型中仅包含 X1:y ~ X1(带截距)

  • 我们拟合 1000 个这样的回归模型并检查偏差。

estimates = []
for i in range(1000):means = [2 , 2]cov = [[1,0], [0,1]]X = np.random.multivariate_normal(means,cov,100)e = np.random.randn(100)y = 3 + 2*X[:,0] + 4*X[:,1] + eX = sm.add_constant(X[:,0])model = sm.OLS(y, X).fit()estimates.append(model.params)
#The averages of estimates across the 1000 replications are:
print("Average of estimates:", np.mean(np.array(estimates),axis=0))print("SE of estimates:", np.std(np.array(estimates),axis=0))
Average of estimates: [11.01614906  1.99128492]
SE of estimates: [0.95786376 0.42621356]

我们可以看到截距估计是有偏(只有当您省略的变量均值为零时才会无偏),并且 b1 的系数是无偏。 估计的 SE 远高于正确指定的模型中的 SE。

相关预测变量 (#2)
  • 我们按照双变量正态分布随机生成 100 个相关的 X1 和 X2(因此 X1 和 X2 的相关系数为 0.4)。

  • 我们指定一条真正的回归线: y y y = 3 + 2* X 1 X_1 X1 + 4* X 2 X_2 X2 + e

  • 我们的回归模型中仅包含 X1:y ~ X1(带截距)

  • 我们拟合 1000 个这样的回归模型并检查偏差。

estimates = []
for i in range(1000):means = [2, 2]cov = [[1,0.4], [0.4,1]]X = np.random.multivariate_normal(means,cov,100)e = np.random.randn(100)y = 3 + 2*X[:,0] + 4*X[:,1] + eX = sm.add_constant(X[:,0])model = sm.OLS(y, X).fit()estimates.append(model.params)
#The averages of estimates across the 1000 replications are:
np.mean(np.array(estimates),axis=0)
array([7.77702431, 3.60628815])
#The averages of estimates across the 1000 replications are:
np.std(np.array(estimates),axis=0)
array([0.85773046, 0.38963273])

我们可以看到截距估计是有偏差的(只有当两个变量的均值都为零时,它才是无偏差的),并且 b1 的系数也相对于其真实值 2 有偏差**。

结论:当预测变量相关时,忽略一个变量会使其他估计产生偏差。

5.3 过度指定模型

完美多重共线性 (#1)
  • 我们按照正态分布随机生成 X1 的 100 个数据点。

  • 我们设置 X2 = 1 - X1

  • 我们指定一条真正的回归线: y y y = 3 + 2* X 1 X_1 X1 + 4* X 2 X_2 X2 + e

  • 我们只将回归模型拟合为:y ~ X1 + X2(带截距)

X1 = np.random.randn(100)
X2 = 1 - X1
e = np.random.randn(100)y = 3 + 2*X1 + 4*X2 + eX = sm.add_constant(np.column_stack([X1,X2]))model = sm.OLS(y,X).fit()
model.summary()
OLS Regression Results
Dep. Variable:y R-squared: 0.826
Model:OLS Adj. R-squared: 0.825
Method:Least Squares F-statistic: 466.2
Date:Tue, 13 Feb 2024 Prob (F-statistic):4.98e-39
Time:09:50:43 Log-Likelihood: -141.90
No. Observations: 100 AIC: 287.8
Df Residuals: 98 BIC: 293.0
Df Model: 1
Covariance Type:nonrobust
coefstd errtP>|t|[0.0250.975]
const 4.0724 0.075 54.100 0.000 3.923 4.222
x1 1.0145 0.072 14.005 0.000 0.871 1.158
x2 3.0579 0.045 67.296 0.000 2.968 3.148
Omnibus: 1.402 Durbin-Watson: 2.156
Prob(Omnibus): 0.496 Jarque-Bera (JB): 1.313
Skew: 0.152 Prob(JB): 0.519
Kurtosis: 2.527 Cond. No. 1.32e+16


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The smallest eigenvalue is 1.91e-30. This might indicate that there are
strong multicollinearity problems or that the design matrix is singular.

多重共线性 (#2)
  • 我们按照双变量正态分布随机生成 100 个相关的 X1 和 X2,并让 X1 和 X2 具有不同程度的相关性(0、0.3、0.6、0.9、0.95 和 0.99)。

  • 我们指定一条真实的回归线: y y y = 2* X 1 X_1 X1 + 4* X 2 X_2 X2 + e

  • 我们在回归模型中包含 X1 和 X2:y ~ X1 + X2(为了简单起见,没有截距)

  • 对于每个预设的相关值,我们重复 1000 次以生成回归估计的采样分布。

  • 绘制采样分布图

#Write a function to return the sampling distribution of regression coefficients 
# based on different degree of correlation between X1 and X2
def simulation_multi_colinearity(cor):params = []for i in range(1000):means = [2,2]cov = [[1,cor], [cor,1]]X = np.random.multivariate_normal(means,cov,100)e = np.random.randn(100)*2y = 2*X[:,0] + 4*X[:,1] + emodel = sm.OLS(y,X).fit()params.append(model.params)return params
sampling_dist_0 = simulation_multi_colinearity(0)
sampling_dist_0_3 = simulation_multi_colinearity(0.3)
sampling_dist_0_6 = simulation_multi_colinearity(0.6)
sampling_dist_0_9 = simulation_multi_colinearity(0.9)
sampling_dist_0_95 = simulation_multi_colinearity(0.95)
sampling_dist_0_99 = simulation_multi_colinearity(0.99)
print("SE of estimates when X1 and X2 have a cor of 0:", np.std(sampling_dist_0,axis=0))
print("SE of estimates when X1 and X2 have a cor of 0.3:", np.std(sampling_dist_0_3,axis=0))
print("SE of estimates when X1 and X2 have a cor of 0.6:", np.std(sampling_dist_0_6,axis=0))
print("SE of estimates when X1 and X2 have a cor of 0.9:", np.std(sampling_dist_0_9,axis=0))
print("SE of estimates when X1 and X2 have a cor of 0.95:", np.std(sampling_dist_0_95,axis=0))
print("SE of estimates when X1 and X2 have a cor of 0.99:", np.std(sampling_dist_0_99,axis=0))
SE of estimates when X1 and X2 have a cor of 0: [0.14924138 0.15362695]
SE of estimates when X1 and X2 have a cor of 0.3: [0.18184739 0.18149639]
SE of estimates when X1 and X2 have a cor of 0.6: [0.23542159 0.23302496]
SE of estimates when X1 and X2 have a cor of 0.9: [0.46005811 0.46522827]
SE of estimates when X1 and X2 have a cor of 0.95: [0.62053723 0.61689469]
SE of estimates when X1 and X2 have a cor of 0.99: [1.5058649  1.50165901]
print("Mean of estimates when X1 and X2 have a cor of 0:", np.mean(sampling_dist_0,axis=0))
print("Mean of estimates when X1 and X2 have a cor of 0.3:", np.mean(sampling_dist_0_3,axis=0))
print("Mean of estimates when X1 and X2 have a cor of 0.6:", np.mean(sampling_dist_0_6,axis=0))
print("Mean of estimates when X1 and X2 have a cor of 0.9:", np.mean(sampling_dist_0_9,axis=0))
print("Mean of estimates when X1 and X2 have a cor of 0.95:", np.mean(sampling_dist_0_95,axis=0))
print("Mean of estimates when X1 and X2 have a cor of 0.99:", np.mean(sampling_dist_0_99,axis=0))
Mean of estimates when X1 and X2 have a cor of 0: [1.99528853 4.00220908]
Mean of estimates when X1 and X2 have a cor of 0.3: [1.99374527 4.00339456]
Mean of estimates when X1 and X2 have a cor of 0.6: [2.01461324 3.98911849]
Mean of estimates when X1 and X2 have a cor of 0.9: [2.02487827 3.97569048]
Mean of estimates when X1 and X2 have a cor of 0.95: [2.04199266 3.95822687]
Mean of estimates when X1 and X2 have a cor of 0.99: [1.96516269 4.03487359]

我们可以观察到,模型中两个预测变量之间的相关程度不同,回归系数仍然无偏,但估计的标准误差根据相关程度夸大

添加不相关的预测变量 (#2)
  • 我们按照正态分布随机生成 X1、X2 和 X3 的 100 个数据点。

  • 我们指定一条真正的回归线: y y y = 3 + 2* X 1 X_1 X1 + 4* X 2 X_2 X2 + e

  • 我们在回归模型中包括 X1、X2 和 X3:y ~ X1(带截距)。 这里X3不应该在模型中,而是包含在内。

  • 我们拟合 1000 个这样的回归模型并检查偏差。

estimates = []
for i in range(1000):X1 = np.random.randn(100)X2 = np.random.randn(100)X3 = np.random.randn(100)e = np.random.randn(100)y = 3 + 2*X1 + 4*X2 + eX = sm.add_constant(np.column_stack([X1,X2,X3]))model = sm.OLS(y, X).fit()estimates.append(model.params)
#The averages of estimates across the 1000 replications are:
print("Average of estimates:", np.mean(np.array(estimates),axis=0))
print("SE of estimates:", np.std(np.array(estimates),axis=0))
Average of estimates: [ 3.00132214e+00  1.99576168e+00  3.99886082e+00 -2.36659646e-03]
SE of estimates: [0.10146959 0.09980508 0.10321398 0.1018764 ]

我们发现 X1 和 X2 的估计是无偏,并且标准误差也很小。 X3 的估计值几乎为零,如果我们从 1000 个模型中检查一个模型,我们会发现该估计值在统计上并不显着。 从这个意义上讲,将不相关的随机数据纳入模型并没有多大害处。

model.summary()
OLS Regression Results
Dep. Variable:y R-squared: 0.962
Model:OLS Adj. R-squared: 0.961
Method:Least Squares F-statistic: 806.9
Date:Tue, 13 Feb 2024 Prob (F-statistic):6.27e-68
Time:09:50:44 Log-Likelihood: -138.60
No. Observations: 100 AIC: 285.2
Df Residuals: 96 BIC: 295.6
Df Model: 3
Covariance Type:nonrobust
coefstd errtP>|t|[0.0250.975]
const 3.0338 0.099 30.704 0.000 2.838 3.230
x1 1.9591 0.094 20.781 0.000 1.772 2.146
x2 3.9472 0.090 43.918 0.000 3.769 4.126
x3 0.1564 0.099 1.580 0.117 -0.040 0.353
Omnibus: 2.692 Durbin-Watson: 2.382
Prob(Omnibus): 0.260 Jarque-Bera (JB): 2.525
Skew:-0.387 Prob(JB): 0.283
Kurtosis: 2.920 Cond. No. 1.20


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5分钟速通大语言模型(LLM)的发展与基础知识

✍️ 作者&#xff1a;哈哥撩编程&#xff08;视频号同名&#xff09; 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5; 程序员&#xff1a;职场关键角色通识宝…

N5183B是德科技n5183b信号源

181/2461/8938产品概述&#xff1a; 简  述&#xff1a; N5183B 频率范围&#xff1a;9 kHz 至 20 GHz&#xff0c;具有 AM、FM、相位调制功能。N5183B MXG X 系列微波模拟信号发生器拥有 9 kHz 至 40 GHz 的频率覆盖范围&#xff0c;以及接近 PSG 级别的相位噪声性能&…

3588 pwm android12 的操作

问题&#xff1a; 客户需要在android12 的界面上操作板卡上的 PWM 蜂鸣器设备。 过程&#xff1a; 1 了解一下 3588 android12 源码的 关于PWM 的驱动。 设备树找不到 pwm 但是&#xff0c; 还不知道&#xff0c;android12 最终包含的 设备树是哪个&#xff0c;但是经过我的…

ctfshow SSRF 351-358

做题前,需要先学习关于ssrf漏洞的相关知识 小注意: 当使用 file_get_contents() 函数访问远程 URL 时&#xff0c;它会尝试获取该 URL 指向的资源的内容&#xff0c;并将内容以字符串的形式返回。 如果 b.php 文件是一个 PHP 文件&#xff0c;它包含的内容取决于该 PHP 文件…

素数伴侣最大组合数

若两个正数之和为素数&#xff0c;则这两个数称之为“素数伴侣”。利用此特性找出给定数组中最大的“素数伴侣”对数。 (笔记模板由python脚本于2024年05月11日 18:17:40创建&#xff0c;本篇笔记适合熟悉基本编程且了解素数的coder翻阅) 【学习的细节是欢悦的历程】 Python 官…

阿里云ECS服务器实例挂载数据盘步骤(磁盘自动挂载.、访问挂载点)

阿里云ECS服务器实例挂载数据盘步骤 相关指令 df -h 查看磁盘空间 du -sh * 查看使用内存大小1.磁盘自动挂载 首先登录阿里云ECS服务器&#xff0c;通过 df -h 命令查看当前磁盘挂载情况 通过 fdisk -l 命令查看磁盘情况&#xff0c;可以发现有两个盘&#xff1a; 系统盘 …

绍兴ISO27001认证:信息安全认证的金钥匙

&#x1f308;&#x1f308;绍兴ISO27001认证&#xff1a;✌️信息安全认证的金钥匙&#x1f511; &#x1f498;随着信息技术的飞速发展&#xff0c;&#x1f481;信息安全问题日益凸显。&#x1f510;为了提升信息安全管理水平&#xff0c;&#x1f46e;保障企业数据资产安全…

神经网络复习--神经网络算法模型及BP算法

文章目录 神经网络模型的构成BP神经网络 神经网络模型的构成 三种表示方式&#xff1a; 神经网络的三要素&#xff1a; 具有突触或连接&#xff0c;用权重表示神经元的连接强度具有时空整合功能的输入信号累加器激励函数用于限制神经网络的输出 感知神经网络 BP神经网络 …

内容检索(2024.05.12)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 本期更新内容&#xff1a; 1. 信号仿真类话题-…

webpack5基础和配置

初步体验webpack打包 webpack是一个静态资源打包工具。 它会以一个或多个文件作为打包的入口&#xff0c;将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件&#xff0c;就可以在浏览器段运行了。 1.初始化最简单的一个目录文件&#xff…

JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)

目录 集合体系概述 集合体系结构 Collection集合体系 Collection的常用方法 介绍 实例演示 完整代码 集合体系概述 集合体系结构 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。 为了满足…

# ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案

ERROR: node with name “rabbit” already running on “MS-ITALIJUXHAMJ” 解决方案 一、问题描述&#xff1a; 1、启动 rabbitmq-server.bat 服务时&#xff0c;出错 Error 2、查询 rabbitmqctl status 状态时&#xff0c;出错 Error 3、停止 rabbitmqctl stop 服务时&a…

关于画图-一次性搞定各类高级论文作图及配色

关于画图-一次性搞定各类高级论文作图及配色 图&#xff08;Figure&#xff09;可以让各类论文的结果更加直观&#xff0c;有时候一张图片比一大段文字更有说服力。 但许多新手作者可能会有一连串的疑惑&#xff1a;数据这么多&#xff0c;什么时候该做什么类型的图&#xff…

LabVIEW开发MOOG控制系统数据处理软件

LabVIEW开发MOOG控制系统数据处理软件 在现代航空领域&#xff0c;飞机结构的静强度试验是保证飞机安全运行的关键环节。MOOG加载控制系统作为试验中的关键设备&#xff0c;其数据输出的直观性和易处理性对于提高试验效率具有重要意义。设计了一种基于LabVIEW的MOOG控制系统数…

Pikachu 靶场 File Inclusion 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

Android面试题之kotlin热流和channel

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点 于冷流不同&#xff0c;在垃圾回收之前&#xff0c;flow里的值都是存在内存之中&#xff0c;并且处于活跃状态 StateFlow StateFlow是一个状态容…

DSA理解理解蓝桥杯例题signature

一、历史 1991年8月&#xff0c;NIST&#xff08;Nation Institute of Standards and Technology&#xff0c;美国国家标准技术研究所&#xff09;提出了数字签名算法&#xff08;DSA&#xff09;用于他们的数字签名标准&#xff08;DSS&#xff09;中。 DSA是算法&#xff0c…

双向带头循环链表(图解)

文章目录 头节点(哨兵位)双向循环结构头插尾插头删尾删在指定位置之前插入数据删除指定位置之前的数据销毁链表 全部代码结语 单链表地址 头节点(哨兵位) 什么是头节点呢?头节点也叫哨兵节点,他在链表中进行不了任何操作,只是用来放哨用的,在单链表中我们当我们尾插的时候我们…

使用Flask构建POST请求的Web应用

文章目录 准备工作创建路由处理POST请求创建表单页面运行应用结论 在Web开发中&#xff0c;处理POST请求是一项常见任务&#xff0c;特别是在构建表单提交、用户注册和数据提交等功能时。Flask是一个简单而强大的Python Web框架&#xff0c;它提供了方便的工具来处理HTTP请求&a…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑微电网联盟协调运行的用户侧共享储能多计费方式博弈定价方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…