非线性回归-转化为线性回归以及非线性模型-用R语言实现
可化为线性回归的曲线回归
理论
例如这样的多次方
可以
就可以使其化成线性回归。转化为线性模型,再使用lm()
实例
这是一组随时间变化的数,t为时间,y为因变量
通过散点图可以看出是非线性曲线
下面是代码块,我将x平方设成一个新变量,并且将logy设成一个新变量
df = read.csv("F:\\learning_kecheng\\huigui\\9非线性回归\\data9.1.csv")
attach(df)
df$ly = log(df$y)
plot(t,y,data = df)
plot(t,ly,data = df)lm = lm(y~t,data = df)
summary(lm)
lm1 = lm(ly~t,data = df)
summary(lm1)
anova(lm1)df$t2 = df$t^2
lm2 = lm(y~t+t2,data = df)
summary(lm2)
lm3 = lm(ly~t+t2,data = df)
summary(lm3)
plot(t,y)
lines(t,exp(predict(lm3)),col = 'red')
abline(lm)AIC(lm1)
AIC(lm2)
AIC(lm3)
拟合结果
多项式回归
多项式回归同上,也是多项式作为一个新变量。同样使用lm(),注意此时平方项等使用I(x^2)
实例
以下面的数据为例
多项式通过一个一个实验,对比P值和AIC值
df9.2 = read.csv("F:\\learning_kecheng\\huigui\\9非线性回归\\data9.2.csv")
attach(df9.2)
lm1 = lm(y~x1)
lm2 = lm(y~x1+x2)
lm3 = lm(y~x1+x2+I(x1^2))
lm4 = lm(y~x1+I(x2^2))
lm5= lm(y~x1+x2+I(x1^2)+I(x2^2)++I(x2*x1))
lm_s = step(lm5)
summary(lm_s)
summary(lm1)
AIC(lm1)
AIC(lm2)
AIC(lm3)
AIC(lm4)
AIC(lm5)
非线性模型
有些模型不能转化为线性模型,就是非线性模型。
非线性模型,使用nls()
nls(formula,data,start,…),
formula 部分为非线性模型的函数表达式,start 为模型中未知参数的初始值。
nls()函数使用补充:
nls(formula, data, start, control, algorithm, trace, subset, weights, na.action, model, lower, upper, …)
注:start设置了参数初始值,设定trace为真以显示迭代过程。nls函数默认采用Gauss-Newton方法寻找极值,迭代过程中第一列为RSS值,后面三列是各参数估计值。
还有一种更为简便的方法就是采用内置自启动模型(self-starting Models),此时我们只需要指定函数形式,而不需要指定参数初始值,各种函数所对应的selfstarting函数名及使用语言格式详见R。下面代码有用SSgompertz 和SSweibull 进行演示。
更多信息可以在R的help中搜索 nls ,进入
在右下角selfstart链接进去就是。
实例
数据展示
df9.4 = read.csv("F:\\learning_kecheng\\huigui\\data9.4.csv")
attach(df9.4)
y= df9.4[,3]
t= df9.4[,2]
model = nls(y~k*(a^(b^t)),start = list(a=0.5,b=0,k=120))
model = nls(y~k*(a^(b^t)),start = list(a=0.5,b=0.5,k=120),lower = c(0,0,116),upper = c(1,1,200),algorithm = "port")
c = coef(model) #将模型的回归系数赋给c
tt = c(1:30)
yp = c[3]*(c[1]^(c[2]^tt))#预测了30个
predict(model) #只有25个观测值
t1 = t+1979
t2 = tt+1979
plot(t1,y,type = "o",ann = FALSE,ylim = c(0,160),xlim = c(1979,2015))
lines(t2,yp)#使用selfstart
#SSgompertz
#Asym*exp(-b2*b3^x)
fm1 <- nls(y ~ SSgompertz(t, Asym, b2, b3))
summary(fm1)
summary(model)#还可以使用SSweibull
df9.5 = read.csv("F:\\learning_kecheng\\huigui\\data9.5.csv")
attach(df9.5)
fm2 <- nls(y ~ SSweibull(t, Asym, Drop, lrc, pwr), data = df9.5)
summary(fm2 )
非线性回归-转化为线性回归以及非线性模型-用R语言实现相关推荐
- r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
原文 基于R语言的lmer混合线性回归模型tecdat.cn 混合模型适合需求吗? 混合模型在很多方面与线性模型相似.它估计一个或多个解释变量对响应变量的影响.混合模型的输出将给出一个解释值列表,其 ...
- 可视为线性回归的曲线回归(R语言)
用R软件进行计算,说闲话出原始数据对自变量的散点图,代码实现如下: data9.1<-read.csv("C:/Users/Administrator/Desktop/data9.1. ...
- 多元线性回归——《应用回归分析R语言版》
#第3章-多元线性回归data3.1<-read.table('clipboard',header=T)#导入数据 lm3.1<-lm(y~x1+x2+x3+x4+x5+x6+x7+x8+ ...
- R语言PCA主成分分析(Principle Component Analysis)与线性回归结合实战
R语言PCA主成分分析(Principle Component Analysis)与线性回归结合实战 目录 R语言PCA主成分分析(Principle Component Analysis)与线性回归 ...
- R语言dataframe数据列格式转换(从整型integer转化为浮点型float)
R语言dataframe数据列格式转换(从整型integer转化为浮点型float) 目录 R语言dataframe数据列格式转换(从整型integer转化为浮点型float)
- R语言as.numeric函数将因子变量(factor)转化为数值变量(Numeric)
R语言as.numeric函数将因子变量(factor)转化为数值变量(Numeric) 目录 R语言as.numeric函数将因子变量(factor)转化为数值变量(Numeric) #基本语法
- R语言as.Date函数将字符串转化为日期格式实战
R语言as.Date函数将字符串转化为日期格式实战 目录 R语言as.Date函数将字符串转化为日期格式实战 #基础语法 # 仿真数据
- r语言datarame删除行_R语言缺失值的处理:线性回归模型插补
原文链接: 拓端数据科技 / Welcome to tecdattecdat.cn 在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1.这样就可以不删除变量或观测值. 视频 ...
- 多元线性回归分析c语言,多元线性回归公式推导及R语言实现
多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...
最新文章
- ServiceMesh有关sidecar理解
- Python学习三——列表
- 吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!
- ApiController得到服务器端绝对路径
- win7开机动画_如果看腻了win7的启动界面,教你一招让你的win7启动与众不同
- Python程序:求最小公倍数
- Axure社区产品app原型通用版+prd通用产品需求文档+产品结构+业务流程+社区产品信息结构功能脑图
- 如何写好标题,才能轻松上简书首页?
- css全局加粗,CSS 实现矩形四个边角加粗的方法
- 用c语言编程二元一次方程组的根,c++用函数写输入abc求二元一次方程根
- 无法找到元素 ‘aop:aspectj-autoproxy‘ 的声明
- 嵌入式系统概论-考试总结
- mysql求和语句月份,sql – 按月求和并将月份作为列
- 2023新年快乐,友盟+伴你岁岁年年
- assoc在php中,在PHP中使用array_diff_assoc函数
- Biotin-PEG-SH生物素-聚乙二醇-巯基结构式;SH-PEG-Biotin
- python tell方法_Python File tell() 方法
- 如何提高在搜索引擎中的排名-百度排名-竞价排名-自然排名
- 模具设计干货,UG部件的自动取整
- stata自变量滞后