R语言(一)——横截面数据回归

本文通过数据分析和逐步回归,研究了交通、风速、时间等因素对CO浓度的影响,建立了预测模型并进行了残差分析,最终模型的解释力达到99%以上。

目录

一、数据

二、简单拟合

1.回归

2.残差分析

三、模型修正

1.数据分析

2.回归


一、数据

首先到网址http://www.statsci.org/data/general/cofreewy.html获取cofreewy.txt数据

二、简单拟合

1.回归

rm(list=ls())
#setwd("")  #设置路径
w=read.table("cofreewy.txt",header=T)
a=lm(CO~.,w)  #利用全部自变量
summary(a) 

将CO作为因变量,其余作为自变量,得到回归方程,Estimate为各项系数,其中R²约为0.95左右,但是发现因子的P值过大了,进一步进行逐步回归。

这里运用倒向逐步回归(backward),就是不断剔除一个变量,利用其余变量进行回归;接着剔除两个变量....每次计算AIC值,看剔除哪些变量的情况下能达到更好的效果。

b=step(a,direction = "backward") #逐步回归,与lm配合
summary(b)

此时P值都小于0.05,且R²和调整后R²也稍稍提高了一些,看起来具有更好的效果,此时拟合的回归直线是:

2.残差分析

shapiro.test(b$res)  #残差的正态性检验
qqnorm(b$res);qqline(b$res)

残差分析用文字和图像两种方式呈现,可以看到文字中P值>0.05,因此不够合格。而从图像上,合格的残差结果应该具备两点:(1)直线经过原点(2)直线在第一象限呈45°角,显然也不符合。因此需要对数据进一步修正。

三、模型修正

1.数据分析

可以通过plot(w)或pairs(w)将变量间的关系用散点图显示,可以发现Hour和Wind之间似乎呈现正弦曲线关系,可以将其加入考虑。CO和Wind、Traffic的关系比较复杂,很难用线性关系表示,利用变量的二次项和三次项考察对CO的影响

2.回归

attach(w)#变量存入内存
cor(cbind(CO,Traffic,Tsq=Traffic^2,Tcub=Traffic^3,  #相关系数矩阵
          Hour,Hsq=Hour^2,Hcub=Hour^3,
          Wind,Wsq=Wind^2,Wcub=Wind^3))
a=lm(CO~Traffic+Wind+I(Wind^2)+I(Wind^3)+sin((2*pi/25)*Hour)
     +cos((2*pi/24)*Hour)+sin((4*pi/24)*Hour)+cos((4*pi/24)*Hour))
b=step(a) #逐步回归,按照AIC选择变量
summary(b);  #anova(b)
#shapiro.test(b$res)

改变自变量内容后,进行回归分析。观察各项的P值,其中Wind的三次项和Hour的sin项的P值都过大,去掉之后重新拟合,代码为:

b1=lm(CO~Traffic+Wind+I(Wind^2)+
      +cos((2*pi/24)*Hour)+cos((4*pi/24)*Hour))
summary(b1)
anova(b1)  #方差分析表
shapiro.test(b1$res)  #对残差正态性检验
qqnorm(b$res);qqline(b$res)

最终回归结果: 

方差分析表:

最终选择出的模型:

其中在对残差的正态性检验中,P值为0.6396,不能拒绝其来自正太总体。

系数R²和调整的R²分别为0.9913和0.9889,比之前具有更好的结果。

在Stata中,如果你想对文献中的某横截面数据进行尾部(异常值)处理并进行横截面回归(例如使用`reg`命令),可以按照以下步骤操作: 1. **导入数据**: 首先,确保数据已经导入到Stata中。如果数据是以`.dta`或`.csv`等常见格式存在,可以直接使用`use`命令打开文件。 ```stata use your_data_file_year.dta, clear ``` 2. **检查异常值**: 使用`summarize`或`describe`命令查看变量是否存在极端值。如果需要,你可以生成描述统计量和箱线图来识别潜在的异常值。 ```stata summarize variable_name [if condition] // 如果有条件限制 graph box variable_name ``` 3. **处理异常值**: Stata没有直接内置的尾部修剪(trimming)功能,但可以使用`replace`命令手动修改。例如,如果你想要删除小于最小值5%的数据点,可以这样做: ```stata qui replace variable_name = . if variable_name < (min(variable_name) * .05) ``` 或者使用`outliers`工具包(需要安装)进行更复杂的处理,如四分位数范围(IQR)剔除法。 4. **运行横截面回归**: 确保处理完异常值后,就可以开始做回归了。假设你有个名为`dependent_variable`的因变量和个或多个自变量,例如`independent_variable1`, `independent_variable2`等,横截面回归的命令就是: ```stata reg dependent_variable independent_variable1 independent_variable2, cluster(cluster_variable) // 如果有聚类效应,添加cluster选项 ``` 这里,`cluster_variable`应替换为你数据集中的集群标识符。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值