美文网首页
R环境下实现非线性拟合(多项式拟合)以及ggplot2的可视化

R环境下实现非线性拟合(多项式拟合)以及ggplot2的可视化

作者: 纷纷不可诉 | 来源:发表于2022-11-01 21:21 被阅读0次

    对数据的拟合(回归分析)是常见的分析需求,可以更直观地反应数据的变化趋势,并对数据进行评价。(虽然这个东西excel其实也可以很简答地搞定,但是可视化和文章Methods阐述方面还是R/python或者其他语言更胜一筹)

    R里面基本函数都是一样的:y~lm(x),同样非常简单

    1. 线性回归

    线性回归问题求解拟合方程:(举例如下)

    x=c(9,13,20,30,41,54,67,86)
    y=c(53,59,60,81,93,112,130,160)
    model=lm(y~x)
    # 查看拟合方程系数(例如这里是y=37.80+1.39x)
    model$coefficients 
    # R值
    summary(model)$r.squared
    summary(model)$adj.r.squared
    # p值
    f <- summary(model)$fstatistic
    pf(f[1], f[2], f[3], lower.tail=F)
    # y-y^ 即参差
    model$residuals
    # predict()预测新的值(虽然但是 必须以dataframe/list的方式输入)
    predict(model, data.frame(x=c(0, 1, 2)))
    # 可视化(这里比较简单 建议用ggplot2美化)
    plot(x,y)
    abline(model,col='red') # 或者abline(a=截距,b=斜率,col=颜色)
    
    线性拟合示意图

    PS,上面这个lm()也是支持多元线性回归的,例如y~lm(x1+x2+x3)

    2.非线性拟合

    常规方法,可以把自变量调整(例如x^2变成x,变成线性),或者直接丢给R, R是做多项式拟合:
    可是化主要依托于 ggplot2 的 geom_smooth() 函数。

    # 只要求解 访问基本和上面一样 不再赘述
    model=lm(y〜poly(x,n))# n是多项式的最高次数,可以按拟合效果自己选择
    formula <- y ~ poly(x, 6, raw = TRUE)
    
    # ggplot2 可视化  
    library(ggplot2)
    ggplot(data, aes(x=x,y=y)) +
      geom_point() + theme_bw() +
      geom_smooth(method = "lm", formula = formula)+
     stat_poly_eq( # 注释方程 不想要 就去掉这部分
       aes(label =  paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")),
       formula = formula, parse = TRUE
      )
    

    扩展,如果是想在一张图里面画多个数据,需要先把宽数据转长数据,然后微调参数,操作如下:

    library(reshape2)
    data2<- melt(data, id='classification')
    formula <- y ~ poly(x, 6, raw = TRUE)
    ggplot(data, aes(x, y, color = variable))+theme_bw()+
      geom_smooth(aes(fill = variable), method = "lm", formula = formula)
    
    多项式拟合示意图

    3.广义线性回归模型(Generalized Linear Model)

    如果有目的活着期望的分布模型,那么可以借助R里面的glm()函数。

    glm(formula, family = gaussian, data, weights, subset,na.action, start = NULL, etastart, mustart, offset,control = list(...), model = TRUE, method = "glm.fit",x = FALSE, y = TRUE, contrasts = NULL, ...)
    

    其中,
    formula为拟合公式,与函数lm()中的参数formula用法相同;
    family用于指定分布族,包括正态分布(gaussian)、二项分布(binomial)、泊松分布(poisson)和伪伽马分布(Gamma),以及逻辑回归等;分布族还可以通过选项link来指定连接函数,默认值为family=gaussian (link=identity),二项分布默认值为family=binomial(link=logit);
    data指定数据集;
    offset指定线性函数的常数部分,通常反映已知信息;
    control用于对待估参数的范围进行设置。
    例如:https://www.cnblogs.com/runner-ljt/p/4574275.html

    相关文章

      网友评论

          本文标题:R环境下实现非线性拟合(多项式拟合)以及ggplot2的可视化

          本文链接:https://www.haomeiwen.com/subject/cwzrtdtx.html