AMcoder - javascript, python, java, html, php, sql

Ինչպե՞ս փոխել lm() գործակիցների ընդհանուր անունները lm օբյեկտների ցանկում՝ predict()-ում օգտագործելու համար:

Ես փորձում եմ գրել ֆունկցիա, որը ստեղծում է տվյալների շրջանակից lm օբյեկտների ցանկ՝ իմ տվյալների հավաքածուի յուրաքանչյուր յուրահատուկ ամսաթվի համար տարբեր lm-ով: Այնուհետև ես կցանկանայի այս lms-ը փոխանցել predict()-ին նոր տվյալների շրջանակով՝ կանխատեսված արժեքներ և վստահության միջակայքեր ստեղծելու համար:

Տվյալներն այսպիսի տեսք ունեն.

Date        ppm area
10/18/2019  0   0
10/18/2019  0   0
10/18/2019  0.1 438.9804
10/18/2019  0.1 447.1784
10/18/2019  0.1 443.7794
10/18/2019  1   3232.2088
10/18/2019  1   3206.6672
10/18/2019  1   3206.232
10/24/2019  0   0
10/24/2019  0   15.98
10/24/2019  0   0
10/24/2019  0   0
10/24/2019  0.1 379.387
10/24/2019  0.1 325.5268
10/24/2019  0.1 325.8126
10/24/2019  0.1 310.5972
10/24/2019  1   3259.366
10/24/2019  1   3218.0836
10/24/2019  1   3192.7076

Առաջին մասը պարզ է թվում՝ գրելով ֆունկցիա, որը յուրաքանչյուր ամսաթվի համար ստեղծում է տարբեր lm.

standard.lm= function(standards,
                          date_field = "date",
                          peak_field,
                          std_field,
                          peak_field2 = NA){
  library(tidyverse)
  library(broom)


  y = standards %>% nest(-date_field) %>%
    mutate(fit = map(data, ~lm(.[[std_field]] ~ .[[peak_field]], data = .)))

    return(y)  }

Այնուհետև ես կարող եմ գործարկել հրամանը.

test = standard.lm(standard_data, std_field = "std.ppm", peak_field = "area")

Սա լավ է աշխատում յուրաքանչյուր ամսաթվի համար lms ստեղծելու համար, բայց խնդիրն այն է, որ գործակիցը կոչվում է.[[peak_field]]՝ ոչ թե "area":

Սա ինձ համար խնդիր է ստեղծում, քանի որ ես կցանկանայի այս lm օբյեկտները փոխանցել predict()-ին՝ տարածքի չափումներից ppm արժեքները կանխատեսելու համար: Հաջորդ տվյալների աղյուսակի իմ սյունակը կկոչվի area, և ես չեմ կարող այն վերանվանել .[[peak_field]]: Ես փորձում եմ նման բան և ստանում եմ սխալ.

a = c(1300.1, 1400.3, 1500.9)
df = data.frame(area = a)
df$std.ppm = predict(test$fit[[1]], newdata = df)

Սխալ $<-.data.frame-ում (*tmp*, std.ppm, արժեքը = c(1 = -0.00299110569401364, . փոխարինումն ունի 8 տող, տվյալները՝ 3: Բացի այդ. Զգուշացնող հաղորդագրություն. «newdata»-ն ուներ 3 տող, բայց հայտնաբերված փոփոխականները ունեն 8 տող

Դա տեղի է ունենում, քանի որ predict()-ը տարածքը ճանաչելու փոխարեն փնտրում է .[[peak_field]] անունով սյունակ և կանխատեսում է արժեքներ սկզբնական մուտքագրված lm տվյալների համար՝ այն տվյալների փոխարեն, որոնք ես ուզում եմ, որ այն կանխատեսի:

Այսպիսով, ես հիմնականում լուծում եմ փնտրում այս խնդիրը հաղթահարելու համար: Լավագույն լուծումը թույլ կտա ինձ նշել գործակիցների անունները, երբ ես ի սկզբանե ստեղծում եմ lm օբյեկտները առաջին ֆունկցիայի մեջ, բայց ես լավ կլինեմ մի բանի հետ, որը թույլ է տալիս ինձ նշել, թե որ սյունակն օգտագործել predict()-ում:

22.02.2020


Պատասխանները:


1

Կարող եք փորձել բանաձև ստեղծել ֆունկցիայում՝ օգտագործելով ձեր սահմանված y և x փոփոխականները.

standard.lm= function(standards,date_field = "Date",
                      peak_field,std_field,peak_field2 = NA){
  lm_form = as.formula(paste(std_field,"~",peak_field))
  #another away
  #lm_form = substitute(y~x,list(y=as.name(std_field),x=as.name(peak_field)))
  y = standards %>% nest(data=-one_of(date_field)) %>%
    mutate(fit = map(data, ~lm(lm_form, data = .)))

    return(y)  }

Մենք փորձարկում ենք այն.

standard_data = structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("10/18/2019", 
"10/24/2019"), class = "factor"), ppm = c(0, 0, 0.1, 0.1, 0.1, 
1, 1, 1, 0, 0, 0, 0, 0.1, 0.1, 0.1, 0.1, 1, 1, 1), area = c(0, 
0, 438.9804, 447.1784, 443.7794, 3232.2088, 3206.6672, 3206.232, 
0, 15.98, 0, 0, 379.387, 325.5268, 325.8126, 310.5972, 3259.366, 
3218.0836, 3192.7076)), class = "data.frame", row.names = c(NA, 
-19L))

mdl = standard.lm(standard_data, std_field = "ppm", peak_field = "area")

predict(mdl$fit[[1]], data.frame(area=c(1300.1,1400.3)))
        1         2 
0.3897161 0.4215205 
22.02.2020
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..