我想比较两个嵌套的线性模型,称之为m01和m02,其中m01是简化模型,m02是完整模型。我想做一个简单的F测试,看看完整的模型是否为简化模型增加了显着的效用。
这在R中非常简单。例如:
mtcars <- read.csv("https://raw.githubusercontent.com/focods/WonderfulML/master/data/mtcars.csv")
m01 <- lm(mpg ~ am + wt, mtcars)
m02 <- lm(mpg ~ am + am:wt, mtcars)
anova(m01, m02)
给我以下输出:
这告诉我添加 am:wt 交互项可以显着改善模型。有没有办法在Python / sklearn / statsmodels中做类似的事情?
修改:在发布此内容之前,我查看了this question,但无法弄清楚它们是如何相同的。另一个问题是对两个向量进行F检验。这个问题是关于比较2个嵌套线性模型。
我认为这就是我的需要:
但我不确定究竟要通过这个功能。如果有人可以提供或指出一个例子,那将非常有帮助。
答案 0 :(得分:2)
以下列方式调整Jeremy的答案让我得到了我在R中获得的相同结果:
import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
cars_df = pd.read_csv("https://raw.githubusercontent.com/focods/WonderfulML/master/data/mtcars.csv")
m01 = ols('mpg ~ am + wt', data=cars_df).fit()
m02 = ols('mpg ~ am + wt + am:wt', data=cars_df).fit()
anovaResults = anova_lm(m01, m02)
print(anovaResults)
这在我的jupyter笔记本中给了我以下结果:
我也遇到了这些相当神秘的错误:
任何人都知道产生这些错误的原因是什么?
答案 1 :(得分:1)
我发现这个book很有帮助(“使用python进行统计学介绍”/ Thomas Haslwanter)
以下是相关的代码示例:
import createHistory from 'history/createBrowserHistory';
import { createStore, combineReducers, compose, applyMiddleware } from 'redux';
import { routerMiddleware, routerReducer } from 'react-router-redux';
import thunk from 'redux-thunk';
import DevTools from '../components/DevTools';
import * as rootReducer from '../services/rootReducer';
const composeEnhancers = compose;
export const history = createHistory();
const middleware = routerMiddleware(history);
export function configureStore(initialState) {
const reducers = { ...rootReducer, router: routerReducer };
const store = createStore(
combineReducers(reducers),
initialState,
composeEnhancers(
applyMiddleware(middleware, thunk),
DevTools.instrument()
)
);
if (module.hot) {
module.hot.accept('../services/rootReducer', () => {
const nextRootReducer = require('../services/rootReducer').default;
const finalReducer = {...nextRootReducer, router: routerReducer };
store.replaceReducer(finalReducer);
})
}
return store;
}
查看上面的图书链接,了解打印结果。
注意:anova_lm有时与参数'typ'一起使用,尝试使用不同的可能值来查看适合您的值。