解决RN异常Cannot find entry file index.android.js in any of the roots的心累历程

React Native APP搭建

最近接触到React Native技术,感觉会是APP开发的一个方向,就来研究一下,看着官网上写的蛮简单的,还有不少大神的教程,然后初上手还是问题不断...

先贴一下官网的教程,怎么配置上面都写的比较清楚的,当然,看看其他大神写的环境搭建,配合一下理解比较好,像python不需要用的话就不用装了,官网提的Chocolatey也可以不用装

开发环境搭建:https://reactnative.cn/docs/0.51/getting-started.html#content

设备上运行:https://reactnative.cn/docs/0.51/running-on-device-android.html#content

英文官网:http://facebook.github.io/react-native/docs/getting-started.html

我安装的软件版本,除了JDK安装的早,其他都是最新版本:

node: v8.10.0

react-native-cli: 2.0.1

react-native: 0.54.3

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

我创建的工程目录在 F:\react_native,工程名称 FirstRn, 下面用到这些路径的,要替换为自己Project的实际路径

一. 创建好工程后,编译时遇到的问题 FAILURE: Build failed with an exception.
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> The SDK directory 'SDK路径' does not exist.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

这个问题是用 react-native init 命令创建的工程,和用Android studio里面创建的工程相比,缺少了local.properties文件导致,拷贝一个Android studio里面的local.properties文件到F:\react_native\FirstRn\android,再次运行 react-native run-android即可通过。

二. bundling failed: NotFoundError: Cannot find entry file index.android.js in any of the roots 问题

前面都没问题了,用react-native run-android也能启动成功

Scanning folders for symlinks in F:\react_native\FirstRn\node_modules (99ms)
┌──────────────────────────────────────────────────────────────────────────────┐
│                                                                              │
│  Running Metro Bundler on port 8081.                                         │
│                                                                              │
│  Keep Metro running while developing on any JS projects. Feel free to        │
│  close this tab and run your own Metro instance if you prefer.               │
│                                                                              │
│  https://github.com/facebook/react-native                                    │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

Looking for JS files in
   F:\react_native\FirstRn


Metro Bundler ready.

Loading dependency graph, done.

然后,用浏览器去访问http://localhost:8081/index.android.bundle?platform=android时,却出现这个问题,手机上解决红屏后,一片空白,index.js已经载入100%,reload n多次也没用,菜单上一个一个试也没用...

error: bundling failed: NotFoundError: Cannot find entry file index.android.js in any of the roots: ["F:\\react_native\\FirstRn"]
    at DependencyGraph.getAbsolutePath (F:\react_native\FirstRn\node_modules\metro\src\node-haste\DependencyGraph.js:316:11)
    at F:\react_native\FirstRn\node_modules\metro\src\DeltaBundler\DeltaCalculator.js:280:416
    at Generator.next (<anonymous>)
    at step (F:\react_native\FirstRn\node_modules\metro\src\DeltaBundler\DeltaCalculator.js:11:445)
    at F:\react_native\FirstRn\node_modules\metro\src\DeltaBundler\DeltaCalculator.js:11:605
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
 BUNDLE  [android, dev] ./index.android.js ░░░░░░░░░░░░░░░░ 0.0% (0/1), failed.

郁闷,抓狂,然并卵....

问题还是要解决,只能百度,谷歌了......

1.先搜到这篇文章 https://blog.youkuaiyun.com/mymy_blog/article/details/73277884 ,试了上面的方法,问题依旧...

2.再看到这篇文章 https://segmentfault.com/q/1010000011930742/a-1020000011980791 ,然后跳到 https://github.com/facebook/react-native/issues/16517,文章写的比较早,检查了里面写的问题,只有一个index.js的问题已经解决了,继续失败...

3.又看了这篇 https://stackoverflow.com/questions/44786655/react-native-cannot-find-entry-file-in-any-of-the-roots,折腾之后,问题依然...

4.卸载babel-preset-react-native重装,又看到这个,运行之后,还得继续...

       yarn remove babel-preset-react-native

yarn add babel-preset-react-native

5.看到有建议运行 npm install 的,运行后,依旧...

6.内心很抓狂有没有,抓狂...

7.没人可指导,没相似问题可参考,怎么办?

还是找官网吧,突然就注意到了一句话

Windows用户请注意,请不要在命令行默认的System32目录中init项目!会有各种权限限制导致不能运行!

然后,迅速打开管理员shell,删除原工程,新建工程,哎,问题还是没解决...

继续查,再看英文官网,哎呦,有不同,多了个Quick Start,赶快点进去


npm install -g create-react-native-app

create-react-native-app FirstRnPro

cd FirstRnPro

npm start

一条一条执行完之后,发现运行不到手机上,提示一个bundle的错误,打开工程看了一下,用这个命令创建的工程,竟然少了

Android和iOS的文件夹,这怎么能运行的了呢,大哭


转回折腾FirstRn,咦,有 npm start,是不是也有 yarn start呢,敲入,启动,打开APK,神奇发生了,index.js竟然

有资源在载入,心跳砰然加速,等到加载完成,手机上竟然有显示了,有内容显示了呀呀呀...


改下app.js,reload一下,还有,好神奇有没有...


艾玛,一脸懵逼呀,赶快新建SecondRn,ThirdRN,只用三条命令,一切顺利运行,这是为什么呢?

react-native init SecondRn
cd SecondRn
react-native run-android

不会白屏了,但是用网页访问,还是同样的错误,还是要继续深入研究才行呀,加油吧,骚年!

有没有大神知道,还请指点下,十分感谢哦!



<think>我们面对两个核心问题:ADF检验的正确执行和VAR模型最优滞后期的选择。此外,还需要解决因maxlags过大导致VAR模型无法估计的问题。 ### 问题一:ADF检验的正确执行 ADF检验用于判断时间序列的平稳性。步骤: 1. **数据准备**:确保数据为时间序列格式,且已进行对数转换(根据用户描述已完成)。 2. **检验步骤**: - 原假设$H_0$:存在单位根(序列非平稳) - 备择假设$H_1$:不存在单位根(序列平稳) - 若p值小于显著性水平(通常为0.05),则拒绝原假设,认为序列平稳。 **注意事项**: - 若序列非平稳,需进行差分处理,直到通过ADF检验(即平稳)。 - 对于多个变量,需确保所有变量同阶单整(如都为一阶差分平稳)才能建立VAR模型,否则需考虑协整关系(如Johansen检验)。 ### 问题二:VAR模型最优滞后期选择 使用信息准则(LR、FPE、AIC、SC、HQ)选择最优滞后期$p$。这些准则都是通过平衡拟合优度和模型复杂度(参数数量)来选择滞后期。 **准则公式**: 1. **Akaike信息准则 (AIC)**: $$ \text{AIC} = 2k - 2\ln(\hat{L}) $$ 2. **Schwarz准则 (SC/BIC)**: $$ \text{BIC} = k \ln(n) - 2\ln(\hat{L}) $$ 3. **Hannan-Quinn准则 (HQ)**: $$ \text{HQ} = 2k \ln(\ln(n)) - 2\ln(\hat{L}) $$ 4. **最终预测误差 (FPE)**: $$ \text{FPE} = \frac{(n + k^*)}{(n - k^*)} \hat{\sigma}^2 $$ 其中$k^*$是待估参数个数,$\hat{\sigma}^2$是残差方差估计。 5. **似然比检验 (LR)**: $$ \text{LR} = -2(\ln\mathcal{L}_p - \ln\mathcal{L}_{p+1}) \sim \chi^2_m $$ 其中$m$是约束条件的个数(即增加的滞后项数)。 **选择原则**: - 选择使这些准则值最小的滞后期$p$。 - 通常,AIC和FPE倾向于选择较大的滞后期,而SC和HQ倾向于选择较小的滞后期。 ### 问题三:maxlags过大导致VAR无法估计 当maxlags过大时,模型参数过多,可能导致: 1. **样本不足**:参数数量超过样本量。 2. **多重共线性**:滞后项间高度相关。 3. **数值不稳定**:矩阵求逆困难。 **解决方案**: 1. **限制最大滞后期**:根据经验,最大滞后期$p_{\max}$应满足: $$ p_{\max} \leq \frac{T}{k} $$ 其中$T$是样本量,$k$是变量个数。通常取$p_{\max} = \sqrt{T}$或$T^{1/3}$。 2. **逐步增加滞后期**:从较小值(如0、1、2)开始,逐步增加,观察信息准则值的变化。 3. **减少变量数量**:如果变量过多,可考虑主成分分析(PCA)或剔除部分变量。 ### 完整步骤 1. **ADF检验**:确保所有变量平稳(或同阶单整)。 2. **选择最大滞后期**:根据样本量计算$p_{\max}$(例如$p_{\max}=5$)。 3. **计算信息准则**:使用VAR模型的`select_order`方法计算不同滞后阶数下的信息准则值。 4. **选择最优滞后期**:综合考虑各准则,选择最优$p$。 5. **估计VAR模型**:使用最优$p$建立VAR模型。 ### 代码示例 ```python import pandas as pd from statsmodels.tsa.stattools import adfuller from statsmodels.tsa.api import VAR # 1. 读取数据 data = pd.read_excel('回归数据excel.xlsx', index_col=0) # 2. ADF检验 adf_results = {} for col in data.columns: result = adfuller(data[col].dropna()) adf_results[col] = {'ADF Statistic': result[0], 'p-value': result[1]} print(f"{col}: ADF Statistic={result[0]}, p-value={result[1]}") # 3. 若序列非平稳,进行差分(假设一阶差分后平稳) if any([adf_results[col]['p-value'] > 0.05 for col in data.columns]): data = data.diff().dropna() # 一阶差分 # 4. 设置最大滞后期(根据样本量调整) n_obs = len(data) k_vars = len(data.columns) max_lags = int(min(5, n_obs / k_vars)) # 确保不超过样本限制 # 5. 选择最优滞后期 model = VAR(data) lag_results = model.select_order(max_lags) print(lag_results.summary()) # 6. 根据准则选择最优滞后期(以AIC为例) optimal_lag = lag_results.aic print(f"最优滞后期(AIC): {optimal_lag}") # 7. 建立VAR模型 var_model = model.fit(optimal_lag) print(var_model.summary()) ``` ### 注意事项 - **样本量要求**:VAR模型要求样本量$T$远大于参数数量($k \times p$),否则会出现过拟合或无法估计。 - **模型诊断**:建立VAR后需进行残差自相关检验(如Ljung-Box检验)、正态性检验和异方差检验。 - **协整关系**:若变量非平稳但存在协整关系,应建立VECM模型。 ### 相关问题 §§相关问题§§ 1. 当ADF检验显示部分变量非平稳时如何执行Johansen协整检验? 2. VAR模型建立后如何进行Granger因果关系检验? 3. 如何解读VAR模型的脉冲响应函数(IRF)结果? 4. 信息准则选择的最优滞后期不一致时应如何处理? 5. 如何对VAR模型的残差进行自相关和异方差检验?</think>### 解决VAR模型滞后阶数选择问题与ADF检验指南 #### 一、ADF检验的正确执行(平稳性检验) ADF检验用于验证时间序列的平稳性,是VAR建模的前提: ```python import pandas as pd from statsmodels.tsa.stattools import adfuller # 读取对数处理后的数据 data = pd.read_excel('回归数据excel.xlsx', index_col='年份') def adf_test(series, signif=0.05): """执行ADF检验并返回结果""" result = adfuller(series.dropna(), regression='c', autolag='AIC') return { 'ADF Statistic': result[0], 'p-value': result[1], 'Critical Values': result[4], 'Stationary': result[1] < signif } # 对所有变量进行ADF检验 adf_results = {} for col in data.columns: adf_results[col] = adf_test(data[col]) ``` **关键步骤说明**: 1. **检验类型选择**: - `regression='c'`:包含常数项(默认) - `regression='ct'`:包含常数项和趋势项 - 根据序列可视化选择合适类型[^1] 2. **结果解读**: - 若$p<0.05$:拒绝原假设$H_0$(存在单位根),序列平稳 - 若$p>0.05$:接受$H_0$,需进行差分处理 - 比较ADF统计量与临界值:若ADF < 临界值(1%水平),则平稳 3. **非平稳序列处理**: ```python # 一阶差分处理 data_diff = data.diff().dropna() ``` #### 二、VAR模型最优滞后期选择 当`maxlags`过大导致无法估计时,按以下步骤解决: **步骤1:确定最大滞后期上限** 根据样本量$T$和变量数$k$计算: $$ p_{\max} = \left\lfloor \frac{T}{k} \right\rfloor \quad \text{或} \quad p_{\max} = \left\lfloor T^{1/3} \right\rfloor $$ ```python n_obs = len(data) # 样本量 k_vars = len(data.columns) # 变量数 max_lags = int(min(5, n_obs/(3*k_vars))) # 保守估计 ``` **步骤2:多准则滞后期选择** ```python from statsmodels.tsa.api import VAR model = VAR(data) lag_results = model.select_order(max_lags) # 提取各准则推荐值 optimal_lags = { 'AIC': lag_results.aic, 'BIC': lag_results.bic, # SC准则 'HQIC': lag_results.hqic, 'FPE': lag_results.fpe, 'LR': lag_results.lr } ``` **步骤3:滞后期冲突解决方案** 1. **优先序原则**: - 大样本:优先考虑BIC(惩罚项更强) - 小样本:优先考虑AIC/FPE $$ \text{BIC} = k\ln(n) - 2\ln(\hat{L}) \quad \text{vs} \quad \text{AIC} = 2k - 2\ln(\hat{L}) $$ 2. **LR检验补充**: - 从最大滞后开始逐步检验: $$ \text{LR} = (T - c)(\ln|\Sigma_{p}| - \ln|\Sigma_{p+1}|) \sim \chi^2(k^2) $$ - 其中$c$为约束参数个数,$\Sigma$为残差协方差矩阵 **步骤4:模型可行性检查** ```python # 检查参数数量是否超过样本量 if optimal_lag * k_vars**2 > n_obs: print(f"需降低滞后期:当前参数数{optimal_lag*k_vars**2} > 样本量{n_obs}") # 重新计算:按样本量限制 max_lags = int(n_obs**(1/3)) lag_results = model.select_order(max_lags) ``` #### 三、常见问题解决方案 1. **"Singular Matrix"错误**: - 原因:滞后阶数过高导致多重共线性 - 解决: ```python # 增加最小滞后阶数限制 lag_results = model.select_order(max_lags, trend='c', verbose=True) ``` 2. **样本量不足问题**: - 方案1:合并低频数据(年度→季度) - 方案2:减少变量数量(主成分分析) $$ \text{PC}_i = \sum_{j=1}^k w_{ij} X_j $$ 3. **准则结果不一致**: - 采用"多数原则"选择最常见值 - 建立不同模型比较预测效果: ```python models = {} for lag in set(optimal_lags.values()): models[lag] = model.fit(lag) # 计算样本外预测误差 forecast_err = np.mean((models[lag].forecast(data.values, steps=1) - actual)**2) ``` #### 四、完整工作流程 1. 数据平稳性检验(ADF) 2. 非平稳序列差分处理 3. 计算最大允许滞后期$p_{\max}$ 4. 多准则滞后期选择 5. 模型可行性验证 6. VAR模型估计与诊断 ```python final_model = model.fit(optimal_lag) # 模型稳定性检验(特征根在单位圆内) roots = final_model.roots print("稳定条件:", all(np.abs(roots) < 1)) ``` > **关键提示**:年度数据建议$p_{\max} \leq 5$,当$T<30$时优先选择BIC准则[^2]。若仍无法解决,可考虑使用贝叶斯VAR(BVAR)或减少变量维度。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值