比萨斜塔——统计显著性检验

本文通过比萨斜塔的倾斜数据,探讨了线性回归模型的建立、残差分析、R-Squared统计量以及T分布下的统计显著性检验,解释了如何判断倾斜程度与年份之间的显著相关性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dataset

比萨斜塔是意大利最大的旅游景点之一。几百年来这座塔慢慢靠向一边,最终达到5.5度的倾斜角度,在顶端水平偏离了近3米。年度数据pisa.csv文件记录了从1975年到1987年测量塔的倾斜,其中lean代表了偏离的角度。在这个任务,我们将尝试使用线性回归来估计倾斜率以及解释其系数和统计数据。

这里写图片描述

# 读取数据
import pandas
import matplotlib.pyplot as plt
pisa = pandas.DataFrame({"year": range(1975, 1988), 
                         "lean": [2.9642, 2.9644, 2.9656, 2.9667, 2.9673, 2.9688, 2.9696, 
                                  2.9698, 2.9713, 2.9717, 2.9725, 2.9742, 2.9757]})

print(pisa)
'''
      lean  year
0   2.9642  1975
1   2.9644  1976
2   2.9656  1977
3   2.9667  1978
4   2.9673  1979
5   2.9688  1980
6   2.9696  1981
7   2.9698  1982
8   2.9713  1983
9   2.9717  1984
10  2.9725  1985
11  2.9742  1986
12  2.9757  1987
'''
plt.scatter(pisa["year"], pisa["lean"])

这里写图片描述

Fit The Linear Model

从散点图中我们可以看到用曲线可以很好的拟合该数据。在之前我们利用线性回归来分析葡萄酒的质量以及股票市场,但在这个任务中,我们将学习如何理解关键的统计学概念。Statsmodels是Python中进行严格统计分析的一个库,对于线性模型,Statsmodels提供了足够多的统计方法以及适当的评估方法。sm.OLS这个类用于拟合线性模型,采取的优化方法是最小二乘法。OLS()不会自动添加一个截距到模型中,但是可以自己添加一列属性,使其值都是1即可产生截距。

import statsmodels.api as sm

y = pisa.lean # target
X = pisa.year  # features
# add a column of 1's as the constant term
X = sm.add_constant(X)  

# OLS -- Ordinary Least Squares Fit
linear = sm.OLS(y, X)
# fit model
linearfit = linear.fit()
print(linearfit.summary())
'''
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                   lean   R-squared:                       0.988
Model:                            OLS   Adj. R-squared:                  0.987
Method:                 Least Squares   F-statistic:                     904.1
Date:                Mon, 25 Apr 2016   Prob (F-statistic):           6.50e-12
Time:                        13:30:20
为了计算这个问题,我们可以创建一个简单的函数,每次落下并反弹后累加路程。这是一个递归的过程,直到球不再反弹。以下是使用 Python 编程解决这个问题的示例: ```python def total_distance_and_next_bounce(height, bounce_ratio=0.25): # 初始高度,第一次落地后的距离,以及总路程 initial_height = height first_fall_distance = height total_path = first_fall_distance # 当球的反弹高度小于等于0.01米时(通常认为这是球停止运动的阈值),结束循环 if bounce_ratio * height <= 0.01: return round(total_path, 2), 0 # 弹跳阶段,将上一次的下落距离加入总路程,并更新高度为反弹高度 next_bounce_height = bounce_ratio * height total_path += first_fall_distance + next_bounce_height # 递归处理下一次落下和反弹 return total_path, next_bounce_height # 第四次落地前的初始高度(即第一次落地后的高度) initial_height = 56 * 4 # 因为每次都是4倍下降 total_path, fourth_bounce_height = total_distance_and_next_bounce(initial_height) print("第4次落地时,弹性球经过的路径总长度为:", total_path) print("第4次落地后弹起的高度为:", fourth_bounce_height) ``` 运行此程序后,它会计算出第4次落地时弹性球经过的总路径长度和第4次落地后弹起的高度。 注意:由于每次弹起的高度逐渐减小,这个过程实际上是非常快的收敛,所以计算过程中可能会有浮点精度的问题。这里我们设置了一个很小的阈值0.01米,当反弹高度小于这个阈值时我们认为球停止运动。实际应用中可能需要更精确的方法处理这个问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值