GEE:多元线性回归

news2024/11/28 10:49:29

作者:CSDN @ _养乐多_

本文记录了在NDVI、EVI和LAI作为自变量,precipitation作为因变量的条件下,使用linearRegression函数进行线性回归分析的代码,代码在Google Earth Engine(GEE)平台上实现。具体而言,该函数可以计算NDVI、EVI和LAI对precipitation的影响关系。通过线性回归分析,可以了解NDVI、EVI和LAI与precipitation之间的关系,并获得每个自变量(NDVI、EVI和LAI)对应的因变量(precipitation)的系数。系数表示自变量对因变量的影响程度,正值表示正相关,负值表示负相关。

结果如下图所示,

在这里插入图片描述


文章目录

      • 一、多元线性回归概念和意义
          • 1.1 概念
          • 1.2 意义
      • 二、函数详解
          • 2.1 函数参数
          • 2.1 举例说明
      • 三、代码详解
          • 3.1 代码详解
          • 3.2 完整代码
          • 3.3 代码链接


一、多元线性回归概念和意义

1.1 概念

多元线性回归是一种统计分析方法,用于研究多个自变量对一个因变量的影响关系。它是简单线性回归的扩展,可以同时考虑多个自变量之间的关系,并分析它们与因变量之间的线性关系。

在多元线性回归中,我们有一个因变量(也称为响应变量)和多个自变量(也称为解释变量)。我们的目标是建立一个线性模型,以最好地拟合观测数据并预测因变量。

多元线性回归模型的一般形式可以表示为:

Y = β 0 + β 1 X 1 + β 2 X 2 + . . . + β p X p + ε Y = β₀ + β₁X₁ + β₂X₂ + ... + βₚXₚ + ε Y=β0+β1X1+β2X2+...+βpXp+ε

其中,

  • Y Y Y 是因变量(响应变量),
  • X 1 , X 2 , . . . , X p X₁, X₂, ..., Xₚ X1,X2,...,Xp 是自变量(解释变量),
  • β 0 , β 1 , β 2 , . . . , β p β₀, β₁, β₂, ..., βₚ β0,β1,β2,...,βp 是模型的系数(回归系数),
  • ε ε ε是误差项,表示模型无法完全解释的随机误差。

多元线性回归的目标是通过最小化残差平方和,找到最佳的系数估计值,使得模型拟合数据最好。这样,我们可以得到每个自变量对因变量的影响程度,并使用模型进行预测和推断。

在多元线性回归分析中,还需要考虑一些假设,如误差项的独立性、正态性、方差齐性等。通过检验这些假设,我们可以评估模型的适用性和解释结果的可靠性。

多元线性回归在许多领域中广泛应用,例如社会科学、经济学、生态学和环境科学等,用于研究和预测因变量受多个自变量影响的情况。

1.2 意义

在NDVI、EVI和LAI作为自变量,NPP作为因变量的条件下,使用linearRegression函数可以进行线性回归分析。具体而言,该函数可以计算NDVI、EVI和LAI对NPP的影响关系。

  • 自变量:NDVI、EVI和LAI是植被指数,用于描述植被生长状况、叶绿素含量和叶面积指数等植被属性。这些指标反映了植被的光合作用能力和生长水平。
  • 因变量:NPP代表净初级生产力,是指植物在光合作用中固定的净碳量,是衡量生态系统生产力的重要指标。

通过线性回归分析,可以了解NDVI、EVI和LAI与NPP之间的关系,并获得每个自变量(NDVI、EVI和LAI)对应的因变量(NPP)的系数。系数表示自变量对因变量的影响程度,正值表示正相关,负值表示负相关。

例如,通过线性回归分析可以得到以下结果:

  • 系数数组:具有维度为(3, 1)的数组,其中每列对应一个因变量(NPP)的系数,例如第一列是NDVI的系数,第二列是EVI的系数,第三列是LAI的系数。
  • 残差均方根向量:表示回归模型对NPP的拟合程度,向量中的每个元素对应一个因变量(NPP)的残差均方根。
    通过这些分析结果,可以了解到NDVI、EVI和LAI对NPP的影响程度和统计拟合程度。

这种分析有助于理解植被指数与净初级生产力之间的关系,以及预测植被生长状况对生态系统生产力的影响。

二、函数详解

2.1 函数参数

ee.Reducer.linearRegression(numX, numY) 创建一个reducer,用于计算具有numX个独立变量和numY个因变量的线性最小二乘回归。

每个输入元组将包含独立变量的值,后跟因变量的值。

第一个输出是一个系数数组,维度为(numX, numY);每列包含对应因变量的系数。第二个输出是每个因变量残差的均方根的向量。如果系统欠定,例如输入的数量小于等于numX,则两个输出都为null。

参数:
numX (整数):
输入维度的数量。

numY (整数,默认为1):
输出维度的数量。

返回值: Reducer

2.1 举例说明

在给定NDVI、EVI、LAI作为自变量,NPP作为因变量的情况下,可以使用 ee.Reducer.linearRegression(numX, numY) 函数创建一个 reducer 来执行线性最小二乘回归

参数如下:

  • numX(整数):表示自变量的数量。在这种情况下,自变量是NDVI、EVI和LAI,因此 numX 为3。
  • numY(整数):表示因变量的数量。在这种情况下,因变量是NPP,因此 numY 为1。

通过使用该 reducer,可以计算NDVI、EVI和LAI作为自变量,NPP作为因变量的线性最小二乘回归。

输入元组中的每个元素将包含NDVI、EVI、LAI的值,后跟NPP的值。

该 reducer 的第一个输出是一个系数数组,维度为 (numX, numY),其中每列包含对应因变量的系数(NPP的系数)。第二个输出是NPP残差的均方根。如果输入的数量小于等于 numX,则两个输出都为 null,表示系统欠定。

因此,您可以使用 ee.Reducer.linearRegression(3, 1) 来执行基于NDVI、EVI、LAI作为自变量,NPP作为因变量的线性最小二乘回归分析。

三、代码详解

3.1 代码详解
  • 构建自变量和因变量影像集合
  • 应用多元线性回归函数
  • 可视化结果
3.2 完整代码
var startYear = 2003;
var endYear = 2020;
var roi = table;
Map.centerObject(roi, 11);

var chirps = ee.ImageCollection("UCSB-CHG/CHIRPS/DAILY")
               .map(roiClip)
               .select('precipitation')

var NDVI_EVI_Collection = ee.ImageCollection("MODIS/006/MOD13A1")
                            .map(roiClip)
                            .select(['NDVI','EVI'])

var LAI_Collection = ee.ImageCollection("MODIS/061/MCD15A3H")
                       .map(roiClip)
                       .select('Lai')
                       
var new_NDVI_EVI_Collection = compositeByYear(NDVI_EVI_Collection, startYear, endYear);                       
var new_LAI_Collection = compositeByYear(LAI_Collection, startYear, endYear);
var new_chirps_Collection = compositeByYear(chirps, startYear, endYear);

print('new NDVI EVI Collection', new_NDVI_EVI_Collection);
print('new LAI Collection', new_LAI_Collection);
print('new chirps Collection', new_chirps_Collection);

var merged_NDVI_EVI_LAI_Collection = getMergeImages(new_NDVI_EVI_Collection, new_LAI_Collection)
var merged_NDVI_EVI_LAI_Chirps_Collection = getMergeImages(merged_NDVI_EVI_LAI_Collection, new_chirps_Collection)
print('merged NDVI EVI LAI Chirps Collection',merged_NDVI_EVI_LAI_Chirps_Collection)

var linearRegressionResult = merged_NDVI_EVI_LAI_Chirps_Collection.reduce(
  ee.Reducer.linearRegression({
    numX: 3,
    numY: 1
}));

print('Linear Regression Result', linearRegressionResult)
Map.addLayer(linearRegressionResult, {}, 'linearRegressionResult')

var bandNames =[ ['NDVI_mean', 'EVI_mean', 'Lai_mean'] ,['precipitation_mean']]

var coefficients = linearRegressionResult.select('coefficients').arrayFlatten(bandNames);

print('coefficients', coefficients);

Map.addLayer(coefficients, {min: -1, max: 1, bands: 
['NDVI_mean_precipitation_mean', 'EVI_mean_precipitation_mean', 'Lai_mean_precipitation_mean']}, 'coefficients');

var phenoPalette = ['C2523C','F2B60E','77ED00','1BAA7D','0B2C7A']
Map.addLayer(coefficients.select('Lai_mean_precipitation_mean'), {min: -1.4, max: -0.1467, Palette:phenoPalette}, 'Lai_mean_precipitation_mean');

print('OLS estimates:', coefficients.reduceRegion({
  reducer: ee.Reducer.first(),
  geometry: ee.Geometry.Point([117.6832, 29.0214]),
  scale: 500
}));

//********************code-lib********************//

function roiClip(image)
{
  return image.clip(roi);
}

function compositeByYear(colYLD, startYear, endYear)
{
  var myReducer = ee.Reducer.mean();
  var yearList = ee.List.sequence(startYear, endYear);
  var yearCompList = yearList.map(function(year){
  var yearCol = colYLD.filter(ee.Filter.calendarRange(year, year, 'year'));
  var yearComp = yearCol.reduce(myReducer);
  var imgList = yearCol.aggregate_array('constant');
  var systemStart = yearCol.reduceColumns(ee.Reducer.min(), ['system:time_start']).get('min');
  var nBands = yearComp.bandNames().size();
  return yearComp.set({
      'year': year,
      'image_list': imgList,
      'n_bands': nBands,
      'system:time_start':ee.Date.fromYMD(year, 6, 3).millis()
    });
  });
  var YearColYLD = ee.ImageCollection.fromImages(yearCompList);
  return YearColYLD;
}

function getMergeImages(primary, secondary) 
{
  var join = ee.Join.inner();
  var filter = ee.Filter.equals({
    leftField: 'system:time_start',
    rightField: 'system:time_start'
  });
  var joinCol = join.apply(primary, secondary, filter);
  joinCol = joinCol.map(function(image) {
    var img1 = ee.Image(image.get("primary"));
    var img2 = ee.Image(image.get("secondary"));
    return img1.addBands(img2);
  });
  return ee.ImageCollection(joinCol);
}
3.3 代码链接

https://code.earthengine.google.com/4287eec83819573cad1b501a5177951c?noload=true

声明:
本人作为一名作者,非常重视自己的作品和知识产权。在此声明,本人的所有原创文章均受版权法保护,未经本人授权,任何人不得擅自公开发布。
本人的文章已经在一些知名平台进行了付费发布,希望各位读者能够尊重知识产权,不要进行侵权行为。任何未经本人授权而将付费文章免费或者付费(包含商用)发布在互联网上的行为,都将视为侵犯本人的版权,本人保留追究法律责任的权利。
谢谢各位读者对本人文章的关注和支持!

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

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

相关文章

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvi…

Linux 学习记录50(QT篇)

Linux 学习记录50(QT篇) 本文目录 Linux 学习记录50(QT篇)一、基于QT的TCP客户端连接1. 代码实现2. 自制的客户端/服务器 二、QT数据库SQL1. QT将数据库分为三个层次2. 实现数据库操作的相关方法 思维导图练习1.2.3.4. 一、基于QT的TCP客户端连接 所需头文件 <QTcpSocket&g…

3G理论概述

文章目录 UMTS&#xff08;通用移动通信系统&#xff0c;Universal Mobile Telecommunications System&#xff09;UTRAN&#xff08;UMTS陆地无线接入网&#xff0c;UMTS Terrestrial Radio Access Network&#xff09;RNC&#xff08;无线网络控制器&#xff0c;Radio Networ…

music21 层级解析(了解次结构方可将任意曲谱与mid互相转换)

这段代码创建了一个音乐乐谱并将其保存为 MIDI 文件&#xff0c;其中包含一个乐器和多个小节。每个小节中包含四个音符或和弦&#xff0c;然后将小节添加到乐谱中。最后&#xff0c;将乐谱写入 MIDI 文件。 首先&#xff0c;通过导入 music21 库来使用它的功能。 import music2…

onvif库封装及qt工程调用onvif库实现设备搜索、获取码流地址等功能

一、前言&#xff1a; 本篇的OnvifManager工程是在vs2010下进行开发编译&#xff0c;它实现了对onvif库的封装调用&#xff0c;目前工程接口实现了对onvif的搜索、码流地址获取、设备重启接口&#xff0c;其他接口后续可以通过更改工程代码进行添加。qt工程myonvif是对OnvifMan…

Zotero翻译插件“zotero pdf translate”——使用时出现广告的问题的解决办法

一、背景&#xff1a; 在Zotero上安装了“zotero-pdf-translate”插件来辅助翻译。今天忽然发现&#xff0c;在使用CNKI翻译引擎的时候&#xff0c;末尾被加上了广告&#xff1a; (查看名企职位领高薪offer&#xff01;--->智联招聘https***dict.cnki.net/ad.html) 如下&…

【IMX6ULL驱动开发学习】16.睡眠机制_poll机制_fasync异步通知(按键控制LED)

学完了休眠唤醒机制、poll机制、异步通知、定时器、tasklet、工作队列、mmap、input子系统后&#xff0c;该沉淀沉淀了 一、睡眠机制 案例&#xff1a;APP程序读取按键值 - 睡眠机制&#xff08;阻塞或非阻塞&#xff09; 1.等待队列头创建 static DECLARE_WAIT_QUEUE_HEA…

从零实现深度学习框架——带Attentiond的Seq2seq机器翻译

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽量不使用外部完备的框架前提下,实现我…

【Windows】PowerToys - 微软超强生产力工具

Windows用户必看 - 电脑系统增强工具 下载 下载地址 简介 PowerToys 是一组由 Microsoft 创建和维护的开源实用工具集&#xff0c;旨在为 Windows 操作系统提供额外的功能和增强体验。它是为 Windows 10 及更高版本设计的&#xff0c;可帮助用户提高效率、个性化和定制化他们…

apache 安装配置 基础篇(三) 之 虚拟机

apache虚拟主机类型有两种 1、基于名称的虚拟主机 2、基于地址或IP地址的虚拟主机 基于名称的虚拟主机 ## httpd-vhosts.conf 添加如下代码&#xff0c; ## 同时要在httpd.conf中追加监听89端口 Listen 89 ## 修改apache 文件要 在bin路径下面的cmd 录入 httpd -t 检测 代…

centos7搭建postgresql主从(主备)架构

本篇介绍如何在centos7系统搭建一个postgresql主备集群实现最近的HA&#xff08;高可用&#xff09;架构。后续更高级的HA模式都是基于这个最基本的主备搭建。 节点规划 ip 主机名 用途 192.168.182.4 node1 主库&#xff08;读写&#xff09; 192.168.182.5 node2 备库&#…

大神都在用的4个AI绘画工具,记得收藏

AI绘画工具是一种利用人工智能辅助绘画创作的工具&#xff0c;它可以帮助设计师快速绘制高质量的艺术作品。本文列出了国内外4款免费的AI绘画工具&#xff0c;它们使用起来非常简单&#xff0c;而且创作效果非常不错&#xff0c;一起来看看吧&#xff01; 1.即时灵感 即时灵感…

【字符串 简单】LeetCode 14. 最长公共前缀 Java

我的思路&#xff1a; 给字符串数组按照字符串的长度从长到短排序&#xff0c;因为最长公共前缀最长的话&#xff0c;也只能是字符串数组中最短的那一个字符串设置一个index变量&#xff0c;表示当前正在检查字符数组中所有字符串的index位置循环遍历字符串数组n遍&#xff0c…

Java设计模式之结构型-桥接模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色分析 四、案例分析 1、支付方式 2、支付渠道 五、总结 一、基础概念 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;其主要目的是“将抽象部分与实现部分分离&#xff0c;使它们都可以独立地…

微信小程序扫码邀请,小程序码生成带参数

代码一&#xff1a; public String generateQRCode(String appId, String appSecret, String pagePath) throws IOException {String accessToken getAccessToken(appId, appSecret);String apiUrl "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token&qu…

springboot家乡特色推荐系统

本次设计任务是要设计一个家乡特色推荐系统&#xff0c;通过这个系统能够满足家乡特色文章的管理功能。系统的主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章分享管理&#xff0c;系统管理等。 管理员可以根据系统给定的账…

前端工程化与webpack

一、目标 能够说出什么是前端工程化能够说出webpack的作用能够掌握webpack的基本使用了解常用plugin的基本使用了解常用loader的基本使用能够说出Source Map的作用 二、目录 前端工程化webpack的基本使用webpack中的插件webpack中的loader打包发布Source Map 1.前端工程化 …

2023年Q2京东冰箱行业品牌销售排行榜(京东销售数据分析)

近年我国的冰箱零售呈波动变化的趋势&#xff0c;由于冰箱市场趋于饱和&#xff0c;因此消费者对冰箱的需求逐渐变为替换需求&#xff0c;这也进一步推动了产品的更新迭代。接下来结合具体数据&#xff0c;我们来分析一下2023年Q2冰箱行业的销售详情。 根据鲸参谋电商数据分析平…

MySQL环境配置

MySQL在centos7环境安装 一.卸载不要的环境二.获取mysql官方yum源三.安装mysql服务四.mysql登陆五.设置配置文件my.cnf六.设置开机启动【可以不设】七.常见问题 安装与卸载中&#xff0c;⽤⼾全部切换成为root&#xff0c;⼀旦安装&#xff0c;普通⽤⼾也能使⽤。 一.卸载不要…

Python编程——字符串的三种定义方式讲解

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 前言 上篇文章讲了python字符串的一些知识&#xff0c;现在…